ニュース
Facebook、新たな時間の最小単位「Flick」を提唱
~映像やゲーム制作向け
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などについても、Flickで整数表記できる。ただし、少数を含むため(定義上は循環小数で、29.97は30×1,000/1,001の近似値)、フレームを累積しても1秒からズレていくが、これはNTSC側の抱える問題である。
【お詫びと訂正】初出時に、NTSCの説明について誤りがありましたので、訂正させていただきます。
【24日】NTSCに関して再度訂正しました。
音声でも同様で、8kHz/16kHz/22.05kHz/24kHz/32kHz/44.1kHz/48kHz/88.2kHz/96kHz/192kHzなどのサンプリングレートを、整数で表記できる。
- 24fpsの1フレーム: 29,400,000 flicks
- 25fpsの1フレーム: 28,224,000 flicks
- 30fpsの1フレーム: 23,520,000 flicks
- 48fpsの1フレーム: 14,700,000 flicks
- 50fpsの1フレーム: 14,112,000 flicks
- 60fpsの1フレーム: 11,760,000 flicks
- 90fpsの1フレーム: 7,840,000 flicks
- 100fpsの1フレーム: 7,056,000 flicks
- 120fpsの1フレーム: 5,880,000 flicks
- 8,000fpsの1フレーム: 88,200 flicks
- 16,000fpsの1フレーム: 44,100 flicks
- 22,050fpsの1フレーム: 32,000 flicks
- 24,000fpsの1フレーム: 29,400 flicks
- 32,000fpsの1フレーム: 22,050 flicks
- 44,100fpsの1フレーム: 16,000 flicks
- 48,000fpsの1フレーム: 14,700 flicks
- 88,200fpsの1フレーム: 8,000 flicks
- 96,000fpsの1フレーム: 7,350 flicks
- 192,000fpsの1フレーム: 3,675 flicks
- 1001/24000 (~23.976) fpsの1フレーム: 29,429,400 flicks
- 1001/30000 (~29.97) fpsの1フレーム: 23,543,520 flicks
- 1001/60000 (~59.94) fpsの1フレーム: 11,771,760 flicks
- 1001/120000 (~119.88) fpsの1フレーム: 5,885,880 flicks
実装はC++のstd::chrono関数を使って、7億560万分の1秒をFlicksとして定義され、仕様はGithubにて公開されている。