2018年1月23日 15:20
米Facebookは、メディアコンテンツのフレームレートやサンプリングレートを扱うための最小時間単位として、新時間単位「Flick」を提唱した。
映画やTVなど映像メディアのためビジュアルエフェクトを制作するさい、1フレームを固定した整数値で扱うのが一般的だが、1フレームを累積したときに、正確に「1秒」を取る値になるのが望ましい。
C++において、最も小さい時間単位はナノ秒だが、「10億分の1秒」ではフレームレートなどで多用される値を整数で表現できない。浮動小数点を累積していくのは望ましくないため、通常は丸め込んで整数として扱うが、その結果、時間が経過するほど(フレームが累積されるほど)精度が低下し、時間とフレームの同期にズレが生じてしまうという。
Flickはその問題を解決するため、Christopher Horvath氏の発案で開発されたもので、秒に換算すると「1flick=7億560万分の1秒」となり、ナノ秒よりも僅かに長い(1flick=1.41723356ナノ秒)。
キモとなるのは7億560万分の1という値で、映像コンテンツで多用される24hz/25hz/30hz/48hz/50hz/60hz/90hz/100hz/120hzといった値を正確に整数で表現できる。
たとえば24fpsの映像の1フレームは、ナノ秒で示すと41,666,666.666…ナノ秒となり端数が生じるが、Flickなら1フレーム=2,940万flicksとして扱える。同様に30fpsの1フレームなら2,352万flicksといった具合になる。ただし、NTSCでの29.97fps(24×1,000/1,001および30×1,000/1,001)については、Flickでも丸めきれないため、近似値を使うことになる。
音声でも同様で、8kHz/16kHz/22.05kHz/24kHz/32kHz/44.1kHz/48kHz/88.2kHz/96kHz/192kHzなどのサンプリングレートを、整数で表記できる。
- 1/24 fps frame: 29,400,000 flicks
- 1/25 fps frame: 28,224,000 flicks
- 1/30 fps frame: 23,520,000 flicks
- 1/48 fps frame: 14,700,000 flicks
- 1/50 fps frame: 14,112,000 flicks
- 1/60 fps frame: 11,760,000 flicks
- 1/90 fps frame: 7,840,000 flicks
- 1/100 fps frame: 7,056,000 flicks
- 1/120 fps frame: 5,880,000 flicks
- 1/8,000 fps frame: 88,200 flicks
- 1/16,000 fps frame: 44,100 flicks
- 1/22,050 fps frame: 32,000 flicks
- 1/24,000 fps frame: 29,400 flicks
- 1/32,000 fps frame: 22,050 flicks
- 1/44,100 fps frame: 16,000 flicks
- 1/48,000 fps frame: 14,700 flicks
- 1/88,200 fps frame: 8,000 flicks
- 1/96,000 fps frame: 7,350 flicks
- 1/192,000 fps frame: 3,675 flicks
実装はC++のstd::chrono関数を使って、7億560万分の1秒をFlicksとして定義され、仕様はGithubにて公開されている。