1. ホーム
  2. ffmpeg

[解決済み] ffmpegの "setpts "フィルタは、具体的に何をするのですか?[クローズド]

2022-02-14 06:24:41

質問

とても長い間探していたのですが、どこを探しても当たり前のこと、常識のようなものばかりです。ffmpegの"setpts"フィルタは具体的に何をするものなのでしょうか?なぜ、それをゼロにリセットするために setpts=PTS-STARTPTS ? ありがとうございます。

どのように解決するのですか?

PTSとは、Presentation TimeStampsの略です。参照 ffmpeg の video timescale, timebase, timestamp とは何ですか?

setpts フィルタは式を評価し、その値を処理中のフレームのタイムスタンプとして代入します。

setpts=2*N+5/TB ここで、Nは0から始まるフレームインデックス、TBはストリームのタイムベースである。仮に1/1000とすると、1PTS単位は1ミリ秒となる。

つまり、各フレームに対して、次のようになります。

N       expression        New PTS    New PTS time
0     2*0+5/(1/1000)       5000        5.000 sec
1     2*1+5/(1/1000)       5002        5.002 sec
2     2*2+5/(1/1000)       5004        5.004 sec
...

例えば、オーバーレイフィルターでは、タイムスタンプ 5.0 のオーバーレイ入力と PTS 時間 5.0 のメイン入力を重ね合わせます。もちろん、もしカスタムの同期を考えているのであれば、setpts exprをそれに応じて変更します。

もう一つの理由は、ストリームの開始タイムスタンプがゼロでない場合、ffmpeg は -vsync cfr モードは、タイムスタンプ0からその最初のタイムスタンプまでのギャップを埋めるために使用されます。これは、いくつかのシナリオにのみ関係します。