Add fashionable curtain(barn door) and circle wipe effects
Curtains, unveiled Horizontal
真ん中から左右へフェードアウトするカーテンエフェクト
FFmpegでプレビュー
ffmpeg -f lavfi -i "testsrc2=s='480*360'" -filter_complex "[0]format=yuv444p,split=2[a][b];[b]drawbox=t=fill[b];[a][b]blend=all_expr='if(lte(2*abs(X-W/2)/W,(T-2)/3),A,B)':enable='between(t,0,6)',format=yuv420p" -f matroska - | ffplay -i -
ffmpeg -i input.mp4 -filter_complex "[0]format=yuv444p,split=2[a][b];[b]drawbox=t=fill[b];[a][b]blend=all_expr='if(lte(2*abs(X-W/2)/W,(T-2)/3),A,B)':enable='between(t,0,6)',format=pix_fmts=yuv420p" -movflags +faststart -c:v libx264 -crf 20 "output.mp4"
真ん中から左右へワイプするblendコマンド。
blend=all_expr='if(lte(2*abs(X-W/2)/W,(T-2)/3),A,B)'
[0]format=yuv444p,split=2[a][b];でフォーマット形式をyuv444pに変換して入力された動画を2つの出力に分割して[a]と[b]という任意の名前をつけています。
[b]drawbox=t=fill[b];で入力動画と同じ解像度のワイプエフェクトさせる黒のboxを生成しています。drawboxを使用するときは、フォーマット形式をyuv444pに変換すると色の領域の幅が改善されます。
[a][b]blend=all_expr='if(lte(2*abs(X-W/2)/W,(T-2)/3),A,B)'で[a]と[b]をブレンドしてblend=all_exprコマンドで使えるStatement formula(計算式)コマンドを指定してワイプエフェクトの設定しています。
:enable='between(t,0,6)',format=yuv420pで[a]と[b]のブレンド時間を指定して負荷を下げて他のデバイスでも見れるようにformat=yuv420pで出力を最適化しています。
Wipe, unveiled vertically
真ん中から上下へフェードアウトするワイプエフェクト
ffmpeg -f lavfi -i "testsrc2=s='480*360'" -filter_complex "[0]format=yuv444p,split=2[a][b];[b]drawbox=t=fill[b];[a][b]blend=all_expr='if(lte(2*abs(Y-H/2)/H,(T-2)/3),A,B)':enable='between(t,0,6)',format=yuv420p" -f matroska - | ffplay -i -
ffmpeg -i input.mp4 -filter_complex "[0]format=yuv444p,split=2[a][b];[b]drawbox=t=fill[b];[a][b]blend=all_expr='if(lte(2*abs(Y-H/2)/H,(T-2)/3),A,B)':enable='between(t,0,6)',format=pix_fmts=yuv420p" -movflags +faststart -c:v libx264 -crf 20 "output.mp4"
真ん中から上下へワイプするblendコマンド。
blend=all_expr='if(lte(2*abs(Y-H/2)/H,(T-2)/3),A,B)'
Circle Wipe, expanding
真ん中から円状にフェードアウトするワイプエフェクト
ffmpeg -f lavfi -i "testsrc2=s='480*360'" -filter_complex "[0]format=yuv444p,split=2[a][b];[b]drawbox=t=fill[b];[a][b]blend=all_expr='if(lte(sqrt(pow(X-W/2,2)+pow(Y-H/2,2))/sqrt(pow(W,2)+pow(H,2)),(T-2)/3)/2,A,B)':enable='between(t,0,5)',format=yuv420p" -f matroska - | ffplay -i -
ffmpeg -i "input.mp4" -filter_complex "[0]format=yuv444p,split=2[a][b];[b]drawbox=t=fill[b];[a][b]blend=all_expr='if(lte(sqrt(pow(X-W/2,2)+pow(Y-H/2,2))/sqrt(pow(W,2)+pow(H,2)),(T-2)/3)/2,A,B)':enable='between(t,0,5)',format=pix_fmts=yuv420p" -movflags +faststart -c:v libx264 -crf 20 "output.mp4"
真ん中から円状にワイプするblendコマンド。
blend=all_expr='if(lte(sqrt(pow(X-W/2,2)+pow(Y-H/2,2))/sqrt(pow(W,2)+pow(H,2)),(T-2)/3)/2,A,B)'
真ん中からダイヤ状にフェードアウトするワイプエフェクト
ffmpeg -f lavfi -i "testsrc2=s='480*360'" -filter_complex "[0]format=yuv444p,split=2[a][b];[b]drawbox=t=fill[b];[a][b]blend=all_expr='if(lte(abs(X-W/2)/W+(abs(Y-H/2)/H),(T-2)/3),A,B)':enable='between(t,0,6)',format=yuv420p" -f matroska - | ffplay -i -
ffmpeg -i "input.mp4" -filter_complex "[0]format=yuv444p,split=2[a][b];[b]drawbox=t=fill[b];[a][b]blend=all_expr='if(lte(abs(X-W/2)/W+(abs(Y-H/2)/H),(T-2)/3),A,B)':enable='between(t,0,6)',format=pix_fmts=yuv420p" -movflags +faststart -c:v libx264 -crf 20 "output.mp4"
真ん中からダイヤ状にワイプするblendコマンド。
blend=all_expr='if(lte(abs(X-W/2)/W+(abs(Y-H/2)/H),(T-2)/3),A,B)'
Curtains, Right to left
右から左へフェードアウトするカーテンエフェクト
ffmpegでプレビュー
ffmpeg -f lavfi -i "testsrc2=s='480*360'" -filter_complex "[0]format=yuv444p,split=2[a][b];[b]drawbox=t=fill[b];[a][b]blend=all_expr='if(gte(X,W*(1-T/2)),A,B)':enable='between(t,0,4)',format=yuv420p" -f matroska - | ffplay -i -
ffmpeg -i "input.mp4" -filter_complex "[0]format=yuv444p,split=2[a][b];[b]drawbox=t=fill[b];[a][b]blend=all_expr='if(gte(X,W*(1-T/2)),A,B)':enable='between(t,0,4)',format=yuv420p" "output.mp4"
右から左へワイプするblendコマンド。
blend=all_expr='if(gte(X,W*(1-T/2)),A,B)'
Wipe, bottm to top
下からから上へフェードアウトするワイプエフェクト
ffmpegでプレビュー
ffmpeg -f lavfi -i "testsrc2=s='480*360'" -filter_complex "[0]format=yuv444p,split=2[a][b];[b]drawbox=t=fill[b];[a][b]blend=all_expr='if(gte(Y,H*(1-T/2)),A, B)':enable='between(t,0,4)',format=yuv420p" -f matroska - | ffplay -i -
ffmpeg -i "input.mp4" -filter_complex "[0]format=yuv444p,split=2[a][b];[b]drawbo x=t=fill[b];[a][b]blend=all_expr='if(gte(Y,H*(1-T/2)),A,B)':enable='between (t,0,4)',format=yuv420p" "output.mp4"
下からから上へワイプするblendコマンド。
blend=all_expr='if(gte(Y,H*(1-T/2)),A, B)'
左から右へフェードアウトするカーテンエフェクト
FFmpegでプレビュー
ffmpeg -f lavfi -i "testsrc2=s='480*360'" -filter_complex "[0]format=yuv444p,split=2[a][b];[b]drawbox=t=fill[b];[a][b]blend=all_expr='if(lte(X,W*(T/2)),A,B)':enable='between(t,0,4)',format=yuv420p" -f matroska - | ffplay -i -
ffmpeg -i "input.mp4" -filter_complex "[0]format=yuv444p,split=2[a][b];[b]drawbox=t=fill[b];[a][b]blend=all_expr='if(lte(X,W*(T/2)),A,B)':enable='between(t,0,4)',format=pix_fmts=yuv420p" -movflags +faststart -c:v libx264 -crf 20 "output.mp4"
左から右へワイプするblendコマンド。
blend=all_expr='if(lte(X,W*(T/2)),A,B)'
上から下へフェードアウトするワイプエフェクト
FFmpegでプレビュー
ffmpeg -f lavfi -i "testsrc2=s='480*360'" -filter_complex "[0]format=yuv444p,split=2[a][b];[b]drawbox=t=fill[b];[a][b]blend=all_expr='if(lte(Y,H*(T/2)),A, B)':enable='between(t,0,4)',format=yuv420p" -f matroska - | ffplay -i -
ffmpeg -i "input.mp4" -filter_complex "[0]format=yuv444p,split=2[a][b];[b]drawbox=t=fill[b];[a][b]blend=all_expr='if(lte(Y,H*(T/2)),A, B)':enable='between(t,0,4)',format=pix_fmts=yuv420p" -movflags +faststart -c:v libx264 -crf 20 "output.mp4"
上から下へワイプするblendコマンド。
blend=all_expr='if(lte(Y,H*(T/2)),A, B)'
右下からから左上へフェードアウトするワイプエフェクト
ffmpegでプレビュー
ffmpeg -f lavfi -i "testsrc2=s='480*360'" -filter_complex "[0]format=yuv444p,split=2[a][b];[b]drawbox=t=fill[b];[a][b]blend=all_expr='if(gte(X+Y,(W+H)*(1-T/2)),A,B)':enable='between(t,0,4)',format=yuv420p" -f matroska - | ffplay -i -
ffmpeg -i "input.mp4" -filter_complex "[0]format=yuv444p,split=2[a][b];[b]drawbox=t=fill[b];[a][b]blend=all_expr='if(gte(X+Y,(W+H)*(1-T/2)),A,B)':enable='between(t,0,4)',format=yuv420p" "output.mp4"
右下からから左上へワイプするblendコマンド。
blend=all_expr='if(gte(X+Y,(W+H)*(1-T/2)),A,B)'
右上からから左下へフェードアウトするワイプエフェクト
ffmpegでプレビュー
ffmpeg -f lavfi -i "testsrc2=s='480*360'" -filter_complex "[0]format=yuv444p,split=2[a][b];[b]drawbox=t=fill[b];[a][b]blend=all_expr='if(gte(X-Y,(W+H)*(1-T/2)),A,B)':enable='between(t,0,4)',format=yuv420p" -f matroska - | ffplay -i -
ffmpeg -i "input.mp4" -filter_complex "[0]format=yuv444p,split=2[a][b];[b]drawbox=t=fill[b];[a][b]blend=all_expr='if(gte(X-Y,(W+H)*(1-T/2)),A,B)':enable='between(t,0,4)',format=yuv420p" "output.mp4"
右上からから左下へワイプするblendコマンド。
blend=all_expr='if(gte(X-Y,(W+H)*(1-T/2)),A,B)'
左上から右下へフェードアウトするワイプエフェクト
FFmpegでプレビュー
ffmpeg -f lavfi -i "testsrc2=s='480*360'" -filter_complex "[0]format=yuv444p,split=2[a][b];[b]drawbox=t=fill[b];[a][b]blend=all_expr='if(lte(X+Y,(W+H)*(T/2)),A,B)':enable='between(t,0,4)',format=yuv420p" -f matroska - | ffplay -i -
ffmpeg -i "input.mp4" -filter_complex "[0]format=yuv444p,split=2[a][b];[b]drawbox=t=fill[b];[a][b]blend=all_expr='if(lte(X+Y,(W+H)*(T/2)),A,B)':enable='between(t,0,4)',format=pix_fmts=yuv420p" -movflags +faststart -c:v libx264 -crf 20 "output.mp4"
左上から右下へワイプするblendコマンド。
blend=all_expr='if(lte(X+Y,(W+H)*(T/2)),A,B)'
参考にさせていただきました。Special Thanks
Also see