優(yōu)設(shè)網(wǎng)網(wǎng)站倉山區(qū)seo引擎優(yōu)化軟件
一、文字水印
在視頻中增加文字水印需要準(zhǔn)備的條件比較多,需要有文字字庫處理的相關(guān)文件,在編譯FFmpeg時需要支持FreeType、FontConfig、iconv,系統(tǒng)中需要有相關(guān)的字庫,在FFmpeg中增加純字母水印可以使用drawtext濾鏡進(jìn)行支持,下面就
來看一下drawtext的濾鏡參數(shù)
參數(shù) | 類型 | 說明 |
---|---|---|
text | 字符串 | 文字 |
textfile | 字符串 | 文字文件 |
box | 布爾 | 文字區(qū)域背景框(缺省false) |
boxcolor | 色彩 | 展示字體區(qū)域塊的顏色 |
font | 字符串 | 字體名稱(默認(rèn)為Sans字體) |
fontsize | 整數(shù) | 顯示字體的大小 |
x | 字符串 | 缺省為0 |
y | 字符串 | 缺省為0 |
alpha | 浮點數(shù) | 透明度(默認(rèn)為1),值從0~1 |
(1)將文字的水印加在視頻的左上角:
ffplay -i input.mp4 -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='hello world':x=20:y=20"
將字體的顏色設(shè)置為綠色:
ffplay -i input.mp4 -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='hello world':fontcolor=green"
如果想調(diào)整文字水印顯示的位置,調(diào)整x與y參數(shù)的數(shù)值即可。
ffplay -i input.mp4 -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='hello world':fontcolor=green:x=400:y=200"
修改透明度
ffplay -i input.mp4 -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='hello world':fontcolor=green:x=400:y=200:alpha=0.5"
(2)文字水印還可以增加一個框,然后給框加上背景顏色:
ffplay -i input.mp4 -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='hello world':
fontcolor=green:box=1:boxcolor=yellow"
至此,文字水印的基礎(chǔ)功能已經(jīng)添加完成。
(3)有些時候文字水印希望以本地時間作為水印內(nèi)容,可以在drawtext濾鏡中配合一些特殊用法來完成,在
text中顯示本地當(dāng)前時間,格式為年月日時分秒的方式,
ffplay -i input.mp4 -vf "drawtext=fontsize=60:fontfile=FreeSerif.ttf:text='%{localtime\:%Y\-%m\-%
d %H-%M-%S}':fontcolor=green:box=1:boxcolor=yellow"
在使用ffmpeg轉(zhuǎn)碼存儲到文件時需要加上-re,否則時間不對。
ffmpeg -re -i input.mp4 -vf "drawtext=fontsize=60:fontfile=FreeSerif.ttf:text='%{localtime\:%Y\-%
m\-%d %H-%M-%S}':fontcolor=green:box=1:boxcolor=yellow" out.mp4
(4)在個別場景中,需要定時顯示水印,定時不顯示水印,這種方式同樣可以配合drawtext濾鏡進(jìn)行處理,使
用drawtext與enable配合即可,例如每3秒鐘顯示一次文字水印:
ffplay -i input.mp4 -vf "drawtext=fontsize=60:fontfile=FreeSerif.ttf:text='test':fontcolor=green:box=1:
boxcolor=yellow:enable=lt(mod(t\,3)\,1)"
在使用ffmpeg轉(zhuǎn)碼存儲到文件時需要加上-re,否則時間不對。
(5)跑馬燈效果
ffplay -i input.mp4 -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='helloworld':x=mod(100*t\,w):y=
abs(sin(t))*h*0.7"
修改字體透明度,修改字體顏色
ffplay -i input.mp4 -vf "drawtext=fontsize=40:fontfile=FreeSerif.ttf:text='liaoqingfu':x=mod(50*t\,w):y=
abs(sin(t))*h*0.7:alpha=0.5:fontcolor=white:enable=lt(mod(t\,3)\,1)"
二、圖片水印
FFmpeg除了可以向視頻添加文字水印之外,還可以向視頻添加圖片水印、視頻跑馬燈等,本節(jié)將重點介紹如何為視頻添加圖片水印;為視頻添加圖片水印可以使用movie濾鏡,下面就來熟悉一下movie濾鏡的參數(shù)
參數(shù) | 類型 | 說明 |
---|---|---|
filename | 字符串 | 輸入的文件名,可以是文件,協(xié)議,設(shè)備 |
format_name, f | 字符串 | 輸入的封裝格式 |
stream_index, si | 整數(shù) | 輸入的流索引編號 |
seek_point, sp | 浮點數(shù) | Seek輸入流的時間位置 |
streams, s | 字符串 | 輸入的多個流的流信息 |
loop | 整數(shù) | 循環(huán)次數(shù) |
discontinuity | 時間差值 | 支持跳動的時間戳差值 |
ffmpeg -i input.mp4 -vf "movie=logo.png[watermark];[in][watermark]overlay=x=10:y=10[out]" output.mp4
? 原始視頻文件路徑:input.mp4
? 水印圖片路徑:logo.png
? 水印位置:(x,y)=(10,10)<=(left,top)距離左側(cè)、頂部各10像素;
? 輸出文件路徑:output.mp4
overlay過濾器
描述:前景窗口(第二輸入)覆蓋在背景窗口(第一輸入)的指定位置。
語法:overlay[=x:y[[:rgb={0, 1}]]
參數(shù) x 和 y 是可選的,默認(rèn)為 0。
參數(shù) rgb 參數(shù)也是可選的,其值為 0 或 1,默認(rèn)為 0。
參數(shù)說明:
x 從左上角的水平坐標(biāo),默認(rèn)值為 0
y 從左上角的垂直坐標(biāo),默認(rèn)值為 0
rgb 值為 0 表示輸入顏色空間不改變,默認(rèn)為 0;值為 1 表示將輸入的顏色空間設(shè)置為 RGB
參數(shù) | 說明 |
---|---|
main_w 或 W | 視頻單幀圖像寬度 |
main_h 或 H | 視頻單幀圖像高度 |
overlay_w | 水印圖片的寬度 |
overlay_h | 水印圖片的高度 |
對應(yīng)地可以將overlay參數(shù)設(shè)置成如下值來改變水印圖片的位置:
水印圖片位置 | overlay值 |
---|---|
左上角 | 10:10 |
右上角 | main_w-overlay_w-10:10 |
左下角 | 10:main_h-overlay_h-10 |
右下角 | main_w-overlay_w-10:main_h-overlay_h-10 |
在FFmpeg中加入圖片水印有兩種方式,一種是通過movie指定水印文件路徑,另外一種方式是通過filter讀取輸入文件的流并指定為水印,這里重點介紹如何讀取movie圖片文件作為水印
推薦一個零聲學(xué)院項目課,個人覺得老師講得不錯,分享給大家:
零聲白金學(xué)習(xí)卡(含基礎(chǔ)架構(gòu)/高性能存儲/golang云原生/音視頻/Linux內(nèi)核)
https://xxetb.xet.tech/s/VsFMs