FFmpeg加水印

ffmpeg中文水印亂碼兩種緣由html

1.字符編碼格式緣由,中文必須是utf8編碼格式的(我遇到的問題,在vs2013上寫的中文,已作編碼格式轉碼,放到centos7.2上編譯運行也會出現中文亂碼的問題,在Linux上把中文水印從新輸入一遍就OK了)centos

2.字體文件fontfile緣由,最好去C:\Windows\Fonts目錄下去找,好比說宋體,黑體這些是不會亂碼的函數

 

1.ffmpeg命令添加視頻水印字體

ffmpeg –i input.flv -acodec copy-vcodec copy -vf "movie=test.png[watermark];[in][watermark]overlay=10:10:1[out]" output.flv
-i input.flv 表示要進行水印添加處理的視頻
-acodec copy-vcodec copy表示保持音視頻編碼不變
-b 300k 表示處理視頻的比特率
-vf 「…」 中間即是水印處理參數,movie是指圖片水印路徑,搭配overlay一塊兒使用,重要的是overlay=後面的部分,第一個參數表示水印距離視頻左邊的距離,第二個參數表示水印距離視頻上邊的距離,第三個參數 爲1,表示支持透明水印。使用透明的png圖片進行視頻編碼後,成功得到帶透明水印的視頻,而且畫質也比較好。詳情請見:https://ffmpeg.org/ffmpeg-filters.html#overlay-1
output.flv 處理後的視頻
ffmpeg命令添加文字水印
ffmpeg -i input.flv -vf "drawtext=fontfile=simhei.ttf: text='雷':x=100:y=10:fontsize=24:fontcolor=yellow:shadowy=2" drawtext.mp4編碼

文字水印filter是drawtext,首先要有simhei.ttf這個文件,能夠去網上下載,也能夠去C:\Windows\Fonts\目錄下去找,text是文字內容,
x:y是顯示位置,fontsize文字大小,fontcolor文字顏色centos7

詳情請看https://ffmpeg.org/ffmpeg-filters.html#drawtext-1.net


2.ffmpeg代碼實現文字和圖片水印
代碼就不重複粘貼上來了,由於網上好多這種demo,推薦使用雷霄華博士的:http://blog.csdn.net/leixiaohua1020/article/details/29368911
{
  // 圖片水印
  sprintf(filter_spec, "movie=test.png[wm];[in][wm]overlay=10:10,scale=1920:1080[out]");

{
  // MB轉換爲utf-8,文字水印的話,文字水印必須是utf8編碼的
  //string strCharacterInfoUTF8 = CMarkup::AToUTF8(stGetTaskRespInfo.watermark.characterInfo);
  // 文字水印
  sprintf(filter_spec, "[in]drawtext=fontfile=simhei.ttf:fontcolor=red:x=10:y=10:fontsize = 30 : text='123',scale=640:360[out]");
}
雷霄華博士的添加水印demo中init_filters()函數內將上述相關代碼添加進去就OK了!
相關說明:
1.drawtext必須依賴libfreetype畫字庫,libfontconfig字體庫兩個庫
  scale分辨率filter,overlay圖片水印filter
2.文字水印的話,文字水印必須是utf8編碼的,否則會是亂碼code

3.字體文件fontfile,最好去C:\Windows\Fonts目錄下去找,找一些中文的字體,否則可能也會致使亂碼視頻

ffmpeg支持添加多個水印:例如同時htm

 

1.同時添加圖片水印與文字水印:

sprintf(filter_spec,"[in]drawtext=x=0:y=300:text="HelloWorld"[text];movie=/Test.png[wm];[text][wm]overlay=0:0,scale=1920:1080[out]");

2.同時添加兩個圖片水印:
sprintf(filter_spec,"movie=../test.png[wm1];movie=../test.png[wm2];[in][wm1]overlay=0:0,scale=1920:1080[a];
[a][wm2]overlay=0:300,scale=1920:1080[out]");
3.同時添加兩個文字水印:
sprintf(filter_spec,"[in]drawtext=fontfile=simhei.ttf:x=0:y=0:fontsize=30:text='123',scale=1920:1080[a];[a]drawtext=fontfile=simhei.ttf:x=0:y=100:fontsize = 30 : text = '123',scale=1920:1080[out]");
可是添加多個水印有一個問題:兩個水印高寬彷佛不同,不知道什麼緣由,知道的朋友還請指點一下,謝謝

具體參數詳情請看https://ffmpeg.org/ffmpeg-filters.html

相關文章
相關標籤/搜索