
私は、 を使用して生成されたオーディオ ファイルsox
と画像ファイルを組み合わせて、200 個のビデオ ファイルを生成します。ほとんどのクリップは 1 秒未満で、6 秒を超えるものはありません。次に、これらのファイルを連結すると、最終結果には全体で約 2 秒の遅延が発生します。
これは、オーディオ トラックとビデオ トラックが個別に連結されていることが原因であると考えられます。
ffprobe を使用すると、ビデオ トラックとオーディオ トラック (ストリーム) の正確な継続時間を調べることができます。短いファイルの 1 つだけでも、継続時間が異なることがわかります。
ffprobe file001.webm
Input #0, matroska,webm, from 'file001.webm':
Metadata:
ENCODER : Lavf58.20.100
Duration: 00:00:00.92, start: 0.000000, bitrate: 211 kb/s
Stream #0:0: Video: vp8, yuv420p, 1100x140, SAR 1:1 DAR 55:7, 25 fps, 25 tbr, 1k tbn, 1k tbc (default)
Metadata:
ENCODER : Lavc58.35.100 libvpx
DURATION : 00:00:00.923000000
Stream #0:1: Audio: vorbis, 48000 Hz, stereo, fltp (default)
Metadata:
ENCODER : Lavc58.35.100 libvorbis
DURATION : 00:00:00.908000000
1 つのビデオ ファイル内のビデオ トラックとオーディオ トラックの長さが完全に同じになるようにするにはどうすればよいですか?
私は vpx/vorbix/webm を使用していますが (mpeg2ts の問題の原因を理解できなかったため)、どの形式を使用してもかまいません。
オーディオに無音部分を追加して、継続時間を一致させることもできます。
答え1
基本的に、労力に見合う価値はありません。オーディオ フレームは、コーデックとサンプル レートに応じて固定期間です。たとえば、aac は 1024/サンプル レートです。例: 1024/48000 ~ 21.333 ミリ秒。したがって、ビデオをその完全な倍数に再サンプルすると、理論的には正確になります。コンテナーがまったく変更しないと仮定します。それ以外の場合は、オーディオ エンコーダーを変更して、使用するプライミング サンプルの数を制御することができます。これにより、部分的な最初のオーディオ フレームを取得できるようになります。ただし、これもコーデックごとに異なります。それ以外の場合は、VFR を使用して、コンテナーがサポートしている場合は最終フレーム期間を手動で設定できます。最後に、mp4 の編集リストを変更し、サポートを保証できるプレーヤーを使用できます。
これらのことをすぐに実行できるツールがあるかどうかはわかりません。