動態分為三種:
- 水印本身變化
- 水印顯示時間變化
- 水印位置變化
水印本身變化
看過上一篇的小伙伴可能覺得第一種很簡單,把jpg格式的圖片換成gif格式的不就可以了嗎,然而親自試一下就會發現,把gif圖片當水印加上去后,圖片播放一遍就不會動了。
之所以會這樣是因為在ffmpeg中,水印的eof_action
選項默認為repeat
(參考這里),而repeat
的作用是重復最后一幀,這就是為什么gif圖片播放一遍就不動了的原因。
要解決這個問題,有兩種方式,第一種是設置gif的-ignore_loop
為0,讓gif保持循環播放即可,命令如下:
ffmpeg -hide_banner -i big_buck_bunny.mp4 -ignore_loop 0 -i doggie3.gif -filter_complex overlay -shortest out.mp4 -y
但是這種方式,只適用於gif格式的圖像,如果濾鏡是一小段視頻就無能為力了。
第二種解決方案是使用movie濾鏡,同樣是讓gif循環播放,雖然這種方式復雜點,不過這種解決方案支持視頻水印,命令如下:
ffmpeg -hide_banner -i big_buck_bunny.mp4 -vf "movie=doggie3.gif:loop=0,setpts=N/FRAME_RATE/TB[out];[0:v][out]overlay=x=main_w-overlay_w:y=0" -shortest out.mp4 -y
上面的命令有兩個地方比較關鍵:
loop=0,setpts=N/FRAME_RATE/TB
:設置水印gif無限循環-shortest
:將輸出文件的時長設置為第一個視頻文件的時長,如果不設置,你會發現命令會一直執行根本不會停下來,因為gif圖的循環是無限的
這樣gif圖/短視頻就會一直不停的播放了。
當然,如果希望水印播放一次就不播放了,那就設置上面的eof_action
為pass
就可以了,如下:
ffmpeg -hide_banner -i big_buck_bunny.mp4 -i doggie3.gif -filter_complex "overlay=x=0:y=0:eof_action=pass" out.mp4 -y
當然,如果視頻一開始就播放且只播放一次,假如水印比較短可能根本就沒被注意就過去了,這時可以設置水印出現的延遲時間,使用-itsoffset
選項,如下:
ffmpeg -hide_banner -i big_buck_bunny.mp4 -itsoffset 3 -i doggie3.gif -filter_complex "overlay=x=0:y=0:eof_action=pass" out.mp4 -y
這樣,視頻播放3秒后,水印才會出現。
水印顯示時間變化
設置水印顯示時長
ffmpeg -hide_banner -i big_buck_bunny.mp4 -i doggie2.png -filter_complex "overlay=enable='lte(t,5)'" out.mp4 -y
上面命令作用是:讓水印只顯示5秒,5秒后消失。
設置水印顯示時間段
ffmpeg -hide_banner -i big_buck_bunny.mp4 -i doggie2.png -filter_complex "overlay=enable='between(t,5,10)'" out.mp4 -y
上面的命令作用是:讓水印在視頻的5~10秒時間段內顯示
設置兩個水印輪番出現
ffmpeg -i big_buck_bunny.mp4 -i doggie1.png -i doggie2.png -filter_complex "overlay=enable='lte(mod(t,10),4)',overlay=enable='gt(mod(t,10),6)'" out.mp4 -y
上面的命令作用是:第一個水印顯示4秒后消失,2秒后第二個水印顯示4秒后消失。
這里布置個作業? 請讓兩個水印一個在左上角,一個在右上角
水印位置變化
設置水印隨時間向右移動
ffmpeg -i big_buck_bunny.mp4 -ignore_loop 0 -i doggie3.gif -lavfi "overlay=x=t*20" -shortest out.mp4 -y
上面命令的作用是:讓水印每秒向右移動20像素,直到消失。
設置水印每隔10秒鍾從左移動右直至消失
ffmpeg -i big_buck_bunny.mp4 -ignore_loop 0 -i doggie3.gif -lavfi "overlay=enable='mod(t,10)':x='100*mod(t,10)-w'" -shortest out.mp4 -y
很實用很常見的水印展現方式有沒有?可以有效的防止別人盜視頻並把水印去掉
這篇講了三種水印活動的方式,下篇讓水印轉起來~
文章目錄
ffmpeg第1篇:日志級別控制、保存日志到指定文件、處理進度查詢
ffmpeg第2篇:簡單濾鏡與復雜濾鏡的區別
ffmpeg第3篇:為視頻添加靜態水印
ffmpeg第4篇:為視頻添加動態水印
ffmpeg第5篇:讓水印圖片旋轉起來
ffmpeg第6篇:濾鏡語法
ffmpeg第7篇:數據流選擇神器-map指令