web-dev-qa-db-ja.com

ffmpegのビデオタイムスケール、タイムベース、またはタイムスタンプとは何ですか?

これらが何であるかについてのオンライン説明はないようです。人々は彼らについて多くのことを話します。それらが何であり、なぜ重要なのかを知りたいだけです。 -video_track_timescaleを使用して、その数値をどのように決定しますか?ランダムですか? 0にすべきですか?

28
Please Help

最新のコンテナは、フレームレートではなくタイムスタンプを使用して、ビデオ(およびオーディオ)フレームのプレゼンテーションの時間コンポーネントを管理します。そのため、ビデオを25 fpsとして記録するのではなく、各フレームを0.04秒間隔で描画する必要があることを暗示する代わりに、各フレームのタイムスタンプを保存します。

 Frame      pts_time
   0          0.00
   1          0.04
   2          0.08
   3          0.12
   ...

これらの時間値の正確な解決のために、タイムベース、つまり、クロックの1ティックを表す時間単位が使用されます。したがって、タイムベースは1/75は1/75秒を表します。 [〜#〜] p [〜#〜]再送信[〜#〜] t [〜#〜] ime [〜#〜] s [ 〜#〜]このタイムベースの観点からタンプが指定されます。タイムスケールは、単にタイムベースの逆数です。 FFmpegは、ストリームの読み出しでtbn値としてタイムスケールを表示します。

Timebase = 1/75; Timescale = 75
 Frame        pts           pts_time
   0          0          0 x 1/75 = 0.00
   1          3          3 x 1/75 = 0.04 
   2          6          6 x 1/75 = 0.08
   3          9          9 x 1/75 = 0.12
   ...

時間を調整するこの方法により、可変フレームレートのビデオが可能になります。

62
Gyan