
現在、この質問のコマンドを使用して 2 つのビデオをクロスフェードしています。
ffmpeg を使用して 2 つのビデオをクロスフェードする
私の命令:
ffmpeg -i firstVideo.mp4 -i secondVideo.mp4 -f lavfi -i color=black - filter_complex \
"[0:v]format=pix_fmts=yuva420p,fade=t=out:st=4:d=1:alpha=1,setpts=PTS-STARTPTS[va0];\
[1:v]format=pix_fmts=yuva420p,fade=t=in:st=0:d=1:alpha=1,setpts=PTS-STARTPTS+4/TB[va1];\
[2:v]scale=640x360,trim=duration=9[over];\
[over][va0]overlay[over1];\
[over1][va1]overlay=format=yuv420[outv]" \
-vcodec libx264 -map [outv] output.mp4
このクロスフェード アニメーションは、ビデオが目的の 640x360 ではなく 480x360 に縮小されることを除けば、正常に動作します。メタ情報では、寸法が 640x360 であると誤って表示されますが、実際はそうではないことは確かです。
また、両方の入力ビデオが正確に 640x360 であることも確かです。
縮小はピクセル形式によるものだと推測していますyuva420p
が、他にどのようなオプションがあるのかわかりません。ピクセル形式を変更してみましたが、今のところ何も機能していません。
上記のコマンドはエラーなしで実行されます。
答え1
使用
ffmpeg -i firstVideo.mp4 -i secondVideo.mp4 -f lavfi -i "color=black:s=640x360:d=9"
-filter_complex \
"[0:v]format=pix_fmts=yuva420p,fade=t=out:st=4:d=1:alpha=1,setpts=PTS-STARTPTS[va0];\
[1:v]format=pix_fmts=yuva420p,fade=t=in:st=0:d=1:alpha=1,setpts=PTS-STARTPTS+4/TB[va1];\
[2:v][va0]overlay[over1];\
[over1][va1]overlay=format=yuv420[outv]" \
-vcodec libx264 -map [outv] output.mp4
カラー フィルターは、特に指定がない限り、320x240 のビデオを出力します。スケール フィルターはソースのアスペクト比 (この場合は 4:3) を維持しようとするため、ビデオは 640x360 としてエンコードされますが、ディスプレイのアスペクト比は 4:3 なので、480x360 として表示されます。