利用ffmpeg实现添加图片水印和文字水印,添加多个水印。代码和命令实现及中文水印乱码

ffmpeg中文水印乱码两种原因

1.字符编码格式原因,中文必须是utf8编码格式的(我遇到的问题,在vs2013上写的中文,已做编码格式转码,放到centos7.2上编译运行也会出现中文乱码的问题,在Linux上把中文水印重新输入一遍就OK了)

2.字体文件fontfile原因,最好去C:\Windows\Fonts目录下去找,比如说宋体,黑体这些是不会乱码的

 

1.ffmpeg命令添加视频水印

{// 图片水印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编码的,不然会是乱码

3.字体文件fontfile,最好去C:\Windows\Fonts目录下去找,找一些中文的字体,不然可能也会导致乱码

ffmpeg支持添加多个水印:例如同时

 

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


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部