私の意図は、ビデオの特定の時間にフェード効果のある画像オーバーレイを適用し、単一のコマンドでビデオにバックグラウンド オーディオを適用することです。ビデオは 15 秒に制限されます。
現在、2 つのコマンドでこれを実現でき、その結果 2 つの出力が生成されますが、この 2 つのコマンドを結合するにはどうすればよいでしょうか?
最初のコマンド
ffmpeg -i video.mp4 -loop 1 -i image.png -ss 00:00:00 -t 00:00:15 -filter_complex "[1]format=yuva420p,fade=in:st=12:d=0.5:alpha=1[i]; [0][i]overlay=main_w/2-overlay_w/2-0+0:main_h/2-overlay_h/2-0+0:shortest=1" incomplete.mp4
第二のコマンド
ffmpeg -i audio.mp3 -i incomplete.mp4 -shortest finalVideo.mp4
これは 2 つのコマンドを 1 つのコマンドに統合する試みですが、ビデオは 15 秒に制限されなくなり、いくつかの mp4 ビデオでテストした後、バックグラウンド オーディオは少数のビデオにのみ適用されます。
ffmpeg -i video.mp4 -loop 1 -i image.png -ss 00:00:00 -t 00:00:15 -i audio.mp3 -shortest -filter_complex "[1]format=yuva420p,fade=in:st=12:d=0.5:alpha=1[i]; [0][i]overlay=main_w/2-overlay_w/2-0+0:main_h/2-overlay_h/2-0+0:shortest=1" finalVideo.mp4
答え1
使用
ffmpeg -ss 00:00:00 -t 00:00:15 -i video.mp4 -loop 1 -i image.png -i audio.mp3
-filter_complex "[1]format=yuva420p,fade=in:st=12:d=0.5:alpha=1[i];
[0][i]overlay=main_w/2-overlay_w/2:main_h/2-overlay_h/2:shortest=1[v]"
-map "[v]" -map 2:a -shortest incomplete.mp4
ffmpeg では、オプションの配置が重要です。入力の前のオプションは、その入力にのみ適用されます。試行した結合コマンドでは、時間指定の後にオーディオを入力するため、オーディオ入力にのみ固有になります。
FFmpeg は、出力に含めるストリームを決定するためにマッピング システムを使用します。マップ割り当てが明示的に設定されていない場合、デフォルトのマッピングは入力の中から 1 つのオーディオを選択します。一部の MP4 には、MP3 よりも優先されるオーディオ ストリームがあるようです。明示的に割り当てると、そのようなことは起こりません。