ffmpeg第4篇:為視頻添加動態水印


動態分為三種:

  • 水印本身變化
  • 水印顯示時間變化
  • 水印位置變化

水印本身變化

看過上一篇的小伙伴可能覺得第一種很簡單,把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_actionpass就可以了,如下:
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秒后消失。
這里布置個作業?huaji 請讓兩個水印一個在左上角,一個在右上角

水印位置變化

設置水印隨時間向右移動

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
很實用很常見的水印展現方式有沒有?huaji可以有效的防止別人盜視頻並把水印去掉

這篇講了三種水印活動的方式,下篇讓水印轉起來~huaji

文章目錄

ffmpeg第1篇:日志級別控制、保存日志到指定文件、處理進度查詢
ffmpeg第2篇:簡單濾鏡與復雜濾鏡的區別
ffmpeg第3篇:為視頻添加靜態水印
ffmpeg第4篇:為視頻添加動態水印
ffmpeg第5篇:讓水印圖片旋轉起來
ffmpeg第6篇:濾鏡語法
ffmpeg第7篇:數據流選擇神器-map指令

番外篇

ffmpeg番外篇:聽說這款水印曾經在某音很火?辦它!

有問題請留言溝通,歡迎轉載,轉載請注明出處

更多精彩內容,歡迎點擊個人博客地址:愉快編程


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM