ffmpeg を使用してオーディオとビデオ間の正確な遅延を取得するにはどうすればよいですか?

ffmpeg を使用してオーディオとビデオ間の正確な遅延を取得するにはどうすればよいですか?

ffmpeg のフラグを使用して遅延を設定する方法はわかっています-itsoffsetが、正確な遅延時間を取得して設定する方法を知りたいです。

答え1

ビデオとオーディオ ストリームの間に固有の遅延がある場合、それを確認する簡単な方法はありません。 を使用してオーディオ ストリームが意図的にオフセットされたオーディオビジュアル ファイルを作成していると仮定しますitsoffset。これにより、ビデオに対するオーディオ プレゼンテーションのタイムスタンプが変更されます。

たとえば、ビデオ フレームあたり 3 つのオーディオ フレームがあると仮定すると、次のようになります (実際には少なすぎます)。

V1       V2          V3    ...
A1 A2 A3 A4 A5 A6 A7 A8 A9 ...

オーディオ フレームには、タイムスタンプ A1 = 0、A2 = 1、A3 = 2 などが設定されます。

ここでオーディオ ストリームを遅延します。

V1       V2          V3    ...
xx xx xx A1 A2 A3 A4 A5 A6 ...

ここで、最初の 3 つの空のサンプルにはタイムスタンプ 0、1、2 が含まれ、A1 には 3 が含まれます。プレーヤーにとって、これは V2 と A1 が一緒に属していることを意味し、これに問題はありません。

初期オフセットを推定したい場合は、オーディオストリームを手動で検査するか、silencedetectストリームの開始と情報を含む最初のオーディオ サンプル間の期間を検出できますが、これはオーディオ ストリームが信号で直接開始する場合にのみ機能します。何らかのフェードインの場合、または -∞ dBFS で開始する場合は、運が悪いです。

関連情報