web-dev-qa-db-ja.com

FFMPEGを使用して、さまざまな画像期間の画像とオーディオからビデオを作成しますか?

私がしたいこと:

私はx個の画像png/jpgを持っていますが、さまざまな時間、より長い時間、より短い時間でそれらを表示したいと思います。

  • a1.jpg1枚目の写真が3秒間表示されます
  • a2.pngは10秒間留まります
  • a3.jpgはオーディオの終わりまでとどまります

ビデオはaudio.mp3と同じ長さである必要があります

これは、ドキュメントを読んだ後のこれまでの私のコードです。何が問題なのかわかりません。音声のない破損したビデオが表示され、最後の画像のみが表示されます。

また、可能であれば画像を中央に配置したいと思います。

ffmpeg -y \
  -loop 1 -t 1 -i a1.jpg \
  -loop 1 -t 1 -i a2.jpg \
  -loop 1 -t 4 -i a3.jpg \
  -loop 1 -t 1 -i a4.png \
  -loop 1 -t 1 -i a5.png \
  -i audio.mp3 \
  -c:v libx264 -pix_fmt yuv420p -c:a copy video.mp4

試してみてください

ffmpeg -y -framerate 15 \
  -loop 1 -t 1 -i a1.jpg \
  -loop 1 -t 1 -i a2.jpg \
  -loop 1 -t 4 -i a3.jpg \
  -loop 1 -t 1 -i a4.png \
  -loop 1 -t 1 -i a5.png \
  -i audio.mp3 \
  -c:v libx264 -pix_fmt yuv420p -c:a copy \
  -filter_complex " \
  [0]setdar=16/9[a1],[a1]scale=720x406[a];[1]setdar=16/9[b1],[b1]scale=720x406[b];[2]setdar=16/9[c1],[c1]scale=720x406[c];[3]setdar=16/9[d1],[d1]scale=720x406[d];[4]setdar=16/9[e1],[e1]scale=720x406[e]; 
  [a][b][c][d][e]concat=n=5,format=yuv420p[v],[v]scale=720x406[v1],[v1]setdar=16/9[v2]" \
  -map "[v2]" -c:a copy out.mp4
2
Muhammad Umer

基本的なテンプレートは

ffmpeg -y \
  -loop 1 -t 1 -i a1.jpg \
  -loop 1 -t 1 -i a2.jpg \
  -loop 1 -t 4 -i a3.jpg \
  -loop 1 -t 1 -i a4.png \
  -loop 1 -i a5.png \
  -i audio.mp3 \
  -filter_complex "concat=n=5" -shortest \
  -c:v libx264 -pix_fmt yuv420p -c:a aac video.mp4

各画像のt仕様は、その期間を設定します。オーディオが終了するまでビデオを持続させたい場合は、最後の画像のtを省略してください。

Concatフィルターを使用して、すべてのビデオ入力を結合します。 concatフィルターが結合する入力にラベルを付けることをお勧めしますが、指定しない場合、フィルターは最初のN -i入力を取得します。ここで、Nはconcatフィルターに設定された値です。すべての画像の解像度とアスペクト比は同じである必要があります。

指定されたコマンドはオーディオをコピーしますが、MP3は許可されていますが、MP4では標準ではなく、Quicktimeなどの一部のプレーヤーはファイルを再生しないため、AACに変更しました。


サイズが異なる画像の場合は、filter_complexを次のように変更します。

"[0]scale=W:H:force_original_aspect_ratio=decrease,pad=W:H:(ow-iw)/2:(oh-ih)/2,setsar=1[i0];
 [1]scale=W:H:force_original_aspect_ratio=decrease,pad=W:H:(ow-iw)/2:(oh-ih)/2,setsar=1[i1];
 [2]scale=W:H:force_original_aspect_ratio=decrease,pad=W:H:(ow-iw)/2:(oh-ih)/2,setsar=1[i2];
 [3]scale=W:H:force_original_aspect_ratio=decrease,pad=W:H:(ow-iw)/2:(oh-ih)/2,setsar=1[i3];
 [4]scale=W:H:force_original_aspect_ratio=decrease,pad=W:H:(ow-iw)/2:(oh-ih)/2,setsar=1[i4];
 [i0][i1][i2][i3][i4]concat=n=5"

WとHは、ターゲットビデオの幅と高さの数値に置き換える必要があります。

4
Gyan