ffmpeg、adelay、amix を使用するとオーディオが同期しなくなる

ffmpeg、adelay、amix を使用するとオーディオが同期しなくなる

開始時間のオフセットを持つ一連の mp3 ファイルがあります。

私は adelay と amix を使用してそれらを結合しようとしています。

次のコードが実行され、結合された MP3 が作成されますが、最終的な出力ファイルを聞くと、人々が互いに話し合っている箇所があり、失礼な意味ではなく、オーディオが同期していないことがわかります。

開始時間と停止時間のオフセットを含むファイルは次のとおりです。

d4a19a58-790a-45c1-b96e-819bc98cd408.webm | 1720 | 3762173
ab794f92-bdfb-4bb0-821d-ba80c8a9228a.webm | 48920 | 3328385
a7df9a51-0671-4930-a14b-e7d85a562577.webm | 76220 | 3763361
5d312878-d25d-40d7-9418-bed85e22efc6.webm | 3109640 | 3267473
1cf6127d-250a-4601-a219-b1b6bbd725f8.webm | 3360980 | 3636927
c3ddd462-e05a-425f-af58-f288f930f2cb.webm | 3689600 | 3760423

以下は、読みやすいように改行して、webm ファイルを MP3 に変換するために使用したコマンドです。

ffmpeg 
-acodec libopus 
-i d4a19a58-790a-45c1-b96e-819bc98cd408.webm 
-b:a 320K 
-vn 
-y d4a19a58-790a-45c1-b96e-819bc98cd408.mp3

読みやすくするために、すべての mp3 を行に結合するコマンドは次のとおりです。

ffmpeg 
-i d4a19a58-790a-45c1-b96e-819bc98cd408.mp3 
-i ab794f92-bdfb-4bb0-821d-ba80c8a9228a.mp3 
-i a7df9a51-0671-4930-a14b-e7d85a562577.mp3 
-i 1cf6127d-250a-4601-a219-b1b6bbd725f8.mp3 
-i c3ddd462-e05a-425f-af58-f288f930f2cb.mp3 
-filter_complex "
[0]adelay=1720|1720[a0];
[1]adelay=48920|48920[a1];
[2]adelay=76220|76220[a2];
[3]adelay=3360980|3360980[a3];
[4]adelay=3689600|3689600[a4];
[a0][a1][a2][a3][a4]amix=inputs=5
" 
out.mp3 -y

私が何を間違っているのか、何か考えはありますか?

答え1

すべてのオーディオチャンネルを同じ値で遅延させるには、adelay=ミリ秒:すべて=true、そして使用する-非同期1コマンドの最後にこれを記述すると、ffmpeg はオーディオ ストリームを伸縮するのではなく、開始部分のみを修正します。

あなたの場合は次のようになります:

ffmpeg 
-i input1.webm 
-i input2.webm
-i input3.webm
-i input4.webm
-i input5.webm
-filter_complex "
[0]adelay=1720:all=true[a0];
[1]adelay=48920:all=true[a1];
[2]adelay=76220:all=true[a2];
[3]adelay=3360980:all=true[a3];
[4]adelay=3689600:all=true[a4];
[a0][a1][a2][a3][a4]amix=inputs=5 [out]
"
-map "[out]"
out.webm -async 1 -y

ドキュメントには次のように書かれています:

-非同期サンプル数/秒

オーディオ同期方法。タイムスタンプに合わせてオーディオ ストリームを「伸縮」します。パラメータは、オーディオが変更される 1 秒あたりの最大サンプル数です。-async 1 は、オーディオ ストリームの開始部分のみが修正され、それ以降の修正は行われない特殊なケースです。

関連情報