這篇把上次挖的坑填上
ffmpeg正式篇的上一篇(傳送門)說了,這一篇要讓水印旋轉起來,但是後面有事情一直沒有時間搞,今天,它來了............
如果想實現旋轉的功能,需要使用ffmpeg過濾器的鏈式功能,即:先把作爲水印的圖片旋轉,再覆蓋到視頻上
第一步,實現旋轉功能,具體的命令如下:
ffmpeg -i buck.mp4 -i s1.jpg -lavfi "[1:v]rotate=PI/6:c=none[out];[0:v][out]overlay=10:10" out.mp4 -y
而實際出來的效果如下:
可以看到,旋轉功能已經實現了,但是卻有兩個問題:
- 由於圖片是長方形的,旋轉後圖片丟失了部分
- 圖片移走的部分是綠色的,完全無法直視
第二步:解決上面的兩個問題,具體命令如下:
ffmpeg -i buck.mp4 -i s1.jpg -lavfi "[1:v]format=rgba,rotate='PI/6:c=0x00000000:ow=hypot(iw,ih):oh=ow'[out];[0:v][out]overlay=10:10" out.mp4 -y
思路是:
- 調整水印寬高,根據勾股定律計算圖片對角長度(
hypot
),將這個值設置爲水印的寬高,這樣,圖片無論如何旋轉,都不會超過設定的寬高,也就不會出現圖片部分丟失的情況了 - 將圖片顯示的像素格式轉換爲rgba格式,如果做過前端的小夥伴會很熟悉的,最後的a表示透明度,如此一來,
c=0x00000000
的作用就是將圖片旋轉後的背景變爲白色且完全透明,這樣就不會遮擋視頻了
第三步:讓旋轉停不下來,具體命令如下:
ffmpeg -i buck.mp4 -loop 1 -i s1.jpg -lavfi "[1:v]format=rgba,rotate='PI/2*t:c=0x00000000:ow=hypot(iw,ih):oh=ow'[out];[0:v][out]overlay=10:10" -shortest out.mp4 -y
細心的小夥伴會發現,這次水印圖片前面添加了-loop 1
參數,具體爲什麼要添加相信看過第四篇(傳送門)的小夥伴想必已經知道了,這裏再重複一遍:因爲水印圖片默認在播放一次後就停下來,保留最後一幀,所以要讓水印圖片保持循環纔行
小作業:讓水印位置也隨着時間動起來?