ニュース

Facebook、新たな時間の最小単位「Flick」を提唱

~映像やゲーム制作向け

 米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にて公開されている。