Askthewind’s diary

個人的なメモ

FFmpegで動画にロゴ(watermark)を挿入して透過させてフェードイン・フェードアウトする

FFmpeg, Insert a logo (watermark) in the movie, pass it through, fading in and out

 

fading in and out

f:id:Askthewind:20190216140208g:plain

FFmpegで動画にロゴ(watermark)を挿入して透過させてフェードイン・フェードアウトする

FFmpegでプレビュー

ffmpeg -i input.mp4 -loop 1 -i logo.png -filter_complex "[1]format=yuva420p,lut=a='val*0.9',fade=in:st=1:d=2:alpha=1,fade=out:st=7:d=2:alpha=1[a];[0][a] overlay=(W-w)/2:(H-h)/2:shortest=1" -f matroska - | ffplay -i -

FFmpegエンコード

ffmpeg -i input.mp4 -loop 1 -i logo.png -filter_complex "[1]format=yuva420p,lut=a='val*0.9',fade=in:st=1:d=2:alpha=1,fade=out:st=7:d=2:alpha=1[a];[0][a] overlay=(W-w)/2:(H-h)/2:shortest=1" -movflags +faststart -pix_fmt yuv420p -c:v libx264 -crf 20 "output.mp4"

 [1]format=yuva420p,lut=a='val*0.9',fade=in:st=3:d=2:alpha=1,fade=out:st=30:d=2:alpha=1[a];で二番目に入力した画像logo.pngのフォーマット形式をアルファ(透過)チャンネル付きのyuva420pに変換して、透過をした後、フェードインフェードアウトの時間設定をして[a]という任意の名前を付けています。

[0][a] overlay=(W-w)/2:(H-h)/2:shortest=1で一番目に入力した動画input.mp4と[a]を合成して[a]の貼り付け位置の指定をして一番目に入力した動画が終わったら動画の出力を終了するという指定をしています。

-loop 1  -loopオプションは入力した画像をループするために使用できます。ここでは画像をフェードインフェードアウトするために-loop 1で無限ループさせて使用しています。

入力した画像が動きのあるgifアニメーションの場合は-loop 1の代わりに-ignore_loop 0でgifアニメーションをループさせます。

FFmpegでプレビュー

ffmpeg -i input.mp4 -ignore_loop 0 -i logo.gif -filter_complex "[1]format=yuva420p,lut=a='val*0.9',fade=in:st=1:d=2:alpha=1,fade=out:st=7:d=2:alpha=1[a];[0][a] overlay=(W-w)/2:(H-h)/2:shortest=1" -f matroska - | ffplay -i -

FFmpegエンコード

ffmpeg -i input.mp4 -ignore_loop 0 -i logo.gif -filter_complex "[1]format=yuva420p,lut=a='val*0.9',fade=in:st=1:d=2:alpha=1,fade=out:st=7:d=2:alpha=1[a];[0][a] overlay=(W-w)/2:(H-h)/2:shortest=1" -movflags +faststart -pix_fmt yuv420p -c:v libx264 -crf 20 "output.mp4"

 

画像をループさせるコマンド

-loop 1

gifアニメーションをループさせるコマンド

-ignore_loop 0

画像を透過させるコマンド

format=yuva420p,lut=a='val*0.9'

画像をフェードフェードインフェードアウトするコマンド

fade=in:st=3:d=2:alpha=1,fade=out:st=7:d=2:alpha=1

 

Middle

f:id:Askthewind:20190216141726g:plain

合成した画像を真ん中に貼り付けるコマンド

overlay=(W-w)/2:(H-h)/2
 
Upper left

f:id:Askthewind:20190216141339g:plain

合成した画像を左上に貼り付けるコマンド(10pxづつ隙間を空ける)

overlay=10:10

合成した画像を左上に貼り付けるコマンド(隙間を空けない場合)

overlay 又は overlay=0:0
 
Upper right

f:id:Askthewind:20190216143431g:plain

合成した画像を右上に貼り付けるコマンド(10pxづつ隙間を空ける)

overlay=(W-w)-10:10

合成した画像を右上に貼り付けるコマンド(隙間を空けない場合)

overlay=(W-w):0 又は overlay=x=(W-w)
 
Bottom left

f:id:Askthewind:20190216143801g:plain

合成した画像を左下に貼り付けるコマンド(10pxづつ隙間を空ける)
overlay=10:(H-h)-10

合成した画像を左下に貼り付けるコマンド(隙間を空けない場合)

overlay=0:(H-h) 又は overlay=y=(H-h)
 
Bottom right

f:id:Askthewind:20190216144208g:plain

合成した画像を右下に貼り付けるコマンド(10pxづつ隙間を空ける)

overlay=(W-w)-10:(H-h)-10

合成した画像を右下に貼り付けるコマンド(隙間を空けない場合)

overlay=(W-w):(H-h)
 
 
参考にさせていただきました。Special Thanks