ffmpeg を使用してトラック間に特定の長さの無音を追加するにはどうすればよいですか?

ffmpeg を使用してトラック間に特定の長さの無音を追加するにはどうすればよいですか?

複数のオーディオファイルを背景画像と組み合わせてビデオを作成したいのですが、マップと一緒にオーディオファイルを追加できることは知っています。

-i audio1.mp3 -i audio2.mp3 -map 0 -map 1 -map 2

しかし、背景として単一の画像を使用しながら、オーディオのトラック間に特定の長さの無音を追加するにはどうすればよいでしょうか?

答え1

質問を正しく理解していれば、複数の入力を指定して連結することができます。

ffmpeg \
  -loop 1 -i image.jpg
  -i audio1.wav \
  -f lavfi -t 5 -i anullsrc \
  -i audio2.wav \
  -filter_complex "[1:a][2:a][3:a]concat=n=3:v=0:a=1[outa]" \
  -map 0:v -c:v copy \
  -map "[outa]" -c:a aac -b:a 192k \
  -shortest \
  out.mkv

これが何をするか:

  • これは、入力 #0 として単一の画像を使用します (ただし、-f lavfi -i testsrc実際のビデオ ファイルと交換できます)。入力 #1 と #3 は、使用する 2 つのオーディオ ファイルです。

  • 入力 #2 は 5 秒間の無音を生成するフィルターです。

  • 次に、すべてのオーディオ ストリームをconcatフィルターと連結します。

  • たとえば、3 番目のオーディオ ファイルを追加するには、2 つの追加オーディオ入力 (無音と実際のトラック) を指定し、フィルターの入力ラベルconcat(つまり、[4:a][5:a]) を追加して、n=3を に増やしますn=5

  • 出力ファイルは入力ビデオをそのまま使用し ( -c:v copy)、オーディオは 192 kbit/s の AAC で再エンコードされます。フィルターを適用しているため、オーディオ ストリームを再エンコードする必要があります。

  • この-shortestオプションにより、最短の (ビデオまたはオーディオ) ストリームが終了したときにエンコードが終了することが保証されます。

関連情報