端くれプログラマの備忘録 ffmpeg [ffmpeg] 透かし画像を移動させる

[ffmpeg] 透かし画像を移動させる

ネットで配信する動画保護の悪あがき(笑)。動画に入れる透かし動画を移動させることで透かしが切り取られ難くしたい。たとえば透かし画像を3分ごとに右下→右上→左上→左下と移動させたい。それもFFmpegを使ってバッチでやりたい。どうするか。

ネットで調べたらドンピシャの記事を発見。

Adding a dynamically positioned watermark to a video via ffmpeg – Stack Overflow
http://stackoverflow.com/questions/12400845/adding-a-dynamically-positioned-watermark-to-a-video-via-ffmpeg

やり方としては、透かし画像が移動するだけの透過動画を作成しておき、それと本編を合成するというもの。

用意するもの

  • 動画本編 source.mp4
  • 透かし画像 (右下) wm1.png
  • 透かし画像 (右上) wm2.png
  • 透かし画像 (左上) wm3.png
  • 透かし画像 (左下) wm4.png

手順

それぞれの透かし画像から3分(180秒)ずつの動画を生成。

ffmpeg -loop 1 -i wm1.png -t 180 -vcodec png -pix_fmt rgba wm1.mov
ffmpeg -loop 1 -i wm2.png -t 180 -vcodec png -pix_fmt rgba wm2.mov
ffmpeg -loop 1 -i wm3.png -t 180 -vcodec png -pix_fmt rgba wm3.mov
ffmpeg -loop 1 -i wm4.png -t 180 -vcodec png -pix_fmt rgba wm4.mov

結合して透かしが移動するだけの12分(3分x4箇所)の動画を生成。

ffmpeg -i wm1.mov -i wm2.mov -i wm3.mov -i wm4.mov -filter_complex "[0:0] [1:0] [2:0] [3:0] concat=n=4:v=1:a=0 [v]" -map "[v]" -y -vcodec png -pix_fmt rgba -q 0 wm12.mov

もし本編の尺に足りなければ繋ぎ合わせて長くしておく。たとえば本編が20分だったら2つ繋ぎ合わせて24分あれば足りる。

ffmpeg -i wm12.mov -i wm12.mov -filter_complex "[0:0] [1:0] concat=n=2:v=1:a=0 [v]" -map "[v]" -y -vcodec png -pix_fmt rgba -q 0 wm24.mov

本編と合成。オプションは適宜追加。

ffmpeg -i source.mp4 -i wm24.mov -filter_complex overlay -shortest -y -q 0 <追加オプション> movie_final.mp4

これにイントロやエンディングのクリップを繋ぎ合わせれば完成。