FFMPEG添加文字中文显示乱码的问题

 【后记】本篇是几年前还在从事流媒体时候的一篇笔记文,近来常有朋友问我目前的方向,经过几年的辗转,目前在计算机视觉AI方向落地生根。转方向需要持续的学习和突破,从流媒体转到人工智能也是一个需要时间的过程,所幸的是,自己从来没有放弃前进的步伐。在不断的摸索前进中,逐渐汲取更多的知识和能量,才能支撑我们走到更远更高的地方。前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享给想学习人工智能的你。点击跳转到网站

---------------------------------------------------------------------------------------------------------------------------------

最近在视频中添加文字的时候,遇到中文显示乱码的问题,使用的命令行如下:

ffmpeg  -i bingheshiji.ts  -c:v libx264 -preset veryfast  -s 1280x720 -r 25  -b:v 1500k  -bufsize 1500k -maxrate 1500k -minrate 1500k 

-rc_init_occupancy 1125k  -max_delay 1.4M  -vf 

drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeMono.ttf:textfile=text.txt:x=100:y=200:fontsize=50:

fontcolor=0xFF0000:reload=1" -c:a libfdk_aac -profile:a aac_low  -b:a 64k  -ar 48000 -ac 2 -muxrate 2000k -f mpegts  

-max_interleave_delta 1000000  addtext.ts

滤镜参数说明:

drawtext是用来添加文字的滤镜名称;

fontfile:指定的字体文件;

textfile:需要添加的文字文件,也可以用text=‘Hello world’这种格式指定需要添加的文字,但是对于大量文字,显然文件更为方便;

x,y:文字左上角在画面上显示的位置;

fontsize:字体大小;

fontcolor:字体颜色,可以通过0xRRGGBB@0.X来指定文字的透明度,例如0xFF0000@0.5为红色半透明。

reload:为1时表示每帧重新load字体文件,可以实现实时更新显示文字的功能。

输出的添加文字的视频如下:

网上类似情况,有人说文字需要转成UTF-8编码,经查看,文字文件已经是UTF-8编码格式。于是怀疑是字体文件不匹配。从windows下面获取了宋体、微软雅黑两个字体文件,拷贝到ubuntu系统中,具体步骤如下:

1. 从工作电脑C:\Windows\Fonts下面找到宋体文件simsun.ttc,并将其上传至转码服务器自己的文件夹中,我用的是winscp工具。

2. 在服务器中,进入字体文件存放位置:cd /usr/shared/fonts/,创建一个新文件夹,用来存放新拷贝进来的汉字字体文件:

     sudo mkdir chinese

3. cd chinese/,进入新建的文件夹,将放在自己目录中的宋体文件simsun.ttc拷贝至chinese文件夹下:

     sudo cp /home/ubuntu/myname/simsun.ttc ./simsun.ttc

4. 为新拷贝进来的字体文件加可读权限: 

     sudo chmod 644 simsun.ttc

     644为当前用户读写,当前组用户只读,其他用户只读,也可以用444,全部只读。

5. 安装字体文件:

    (1) sudo mkfontscale  创建字体fonts.scale文件,用来控制字体的旋转缩放;

    (2) sudo mkdir    创建fonts.dir文件;

    (3) sudo fc-cache -fv    建立字体缓存信息,即让系统识别到当前字体。

做完上面的5步操作后,修改命令行如下:

ffmpeg  -i bingheshiji.ts  -c:v libx264 -preset veryfast  -s 1280x720 -r 25  -b:v 1500k  -bufsize 1500k -maxrate 1500k -minrate 1500k 

-rc_init_occupancy 1125k  -max_delay 1.4M  -vf  drawtext="fontfile=/usr/share/fonts/chinese/simsun.ttc:textfile=text.txt:x=100:y=200:fontsize=50:

fontcolor=0xFF0000:reload=1"  -c:a libfdk_aac -profile:a aac_low  -b:a 64k  -ar 48000 -ac 2 -muxrate 2000k -f mpegts 

 -max_interleave_delta 1000000  addtext.ts

再来看得到的结果:

用同样方法安装微软雅黑字体 msyh.ttf到ubuntu系统中,也能正常显示中文:

注:由于在drawtext滤镜中使用了参数reload=1,且在转码过程中实时编辑文字文件text.txt,因此,可以看到播放到后面的时候,文字内容已经比前面有所增加。

评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值