廢話少說督笆,先舉個(gè)例子
ffmpeg -i input.mp4 -i image1.png -i image2.png -filter_complex [1:v]scale=100:100[img1];[2:v]scale=1280:720[img2];[0:v][img1]overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2[bkg];[bkg][img2]overlay=0:0 -y output.mp4
這個(gè)例子其實(shí)在android端使用ffmpeg給視頻添加圖片水印里已經(jīng)說過了闽坡。
這是一個(gè)給視頻打上圖片水印的命令育叁。
然而绕辖,他打的不是一個(gè)普通的水印,而是兩個(gè)擂红。
命令看上去很簡潔仪际。然而(又是然而)围小,正因?yàn)樗@么簡潔,所以一開始上來未免搞不清他實(shí)際是什么意思树碱。
來肯适,我們把他拆開,其實(shí)他由以下部分組成:
//1.起始
ffmpeg
//2.輸入
-i input.mp4//這個(gè)是原始文件
-i image1.png//第一個(gè)水印圖片
-i image2.png//第二個(gè)水印圖片
//3.濾鏡
-filter_complex [1:v]scale=100:100[img1];[2:v]scale=1280:720[img2];[0:v][img1]overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2[bkg];[bkg][img2]overlay=0:0
//4.輸出
-y output.mp4//輸出文件
1成榜、2框舔、4部分的含義一目了然。3里頭的scale和overlay也是字面的意思赎婚,不難理解刘绣。然而,-filter_complex濾鏡的參數(shù)結(jié)構(gòu)就不是那么好理解了挣输,比如說那一坨[]里頭的東西是什么鬼纬凤?
來,一個(gè)個(gè)解釋撩嚼。
[1:v]這個(gè)里頭兩個(gè)參數(shù)停士,1表示的是操作對象的編號。在本例中0就是原始視頻文件input.mp4完丽,1就是image1.png恋技,2就是image2.png,3就是output.mp4逻族。而另一個(gè)參數(shù)v表示操作對象里的視頻信息蜻底。
[img1]是這個(gè)操作過濾器的名字。(當(dāng)然名字可以隨便起)
所以這頭一句[1:v]scale=100:100[img1]
的意思就是對圖片imagei.png進(jìn)行調(diào)節(jié)尺寸的操作聘鳞,并將這個(gè)操作的結(jié)果命名為img1薄辅。后面的[2:v]和[img2]也是一個(gè)意思。
我們繼續(xù)搁痛,overlay前面[0:v][img1]
湊一起是什么意思呢长搀。0自然就是指的原始視頻宇弛,這句的意思就是將[img1]疊加到0對象的視頻上鸡典。本例中就是把image1.png疊加到input.mp4上。這里需要注意的就是順序:后一個(gè)對象疊加到前一個(gè)上枪芒,后一個(gè)對象在上層彻况。如果寫成[img1][0:v]
,那相對本例其實(shí)就是把視頻疊加到圖片imge1.png上舅踪。這樣的話一般來說由于視頻通常是全屏纽甘,等于用視頻覆蓋了圖片,水印完全看不到了抽碌。
好悍赢,我們又把這個(gè)操作的結(jié)果命名為[bkg],那么接下來[bkg][img2]
的意思就很明了了。就是把image2.png再疊加上去左权,image2.png是在最上層的皮胡,如果位置重合的話,他會遮蓋 image1.png的水印赏迟。
于是屡贺,事就這樣成了。
加個(gè)餐
1.水印的移動:
這里需要用到時(shí)間參數(shù)锌杀。
比如:overlay=0+t*20:0
這里在x坐標(biāo)上加上了+t*10
甩栈,于是水印就會慢慢向右邊移動。
2.特定時(shí)間顯示水痈庠佟:
這次不僅要用到時(shí)間參數(shù)量没,還要用上條件語句。
overlay=x='if(gte(t,2),10,NAN)':(main_h-overlay_h)/2
if條件語句的基本結(jié)構(gòu)就是
if(條件,條件為true時(shí)的值,條件為false時(shí)的值)
再來看看計(jì)算表達(dá)式亿鲜。
這里用到了表達(dá)式gte(x,y)
允蜈。如果x大于等于y則表達(dá)式的值為1,反之為0蒿柳。
所以if(gte(t,2),10,NAN)
的意思就是饶套,當(dāng)時(shí)間大于等于2秒時(shí),水印x位置為10垒探,反之不顯示水印妓蛮。(或者你也可以用lte
來判斷“小于或等于”)
要了解所有表達(dá)式的話,可以去啃一下ffmpeg官方文檔的Expression Evaluation部分圾叼。