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 で開始する場合は、運が悪いです。