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

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

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:字体颜色,可以通过[email protected]来指定文字的透明度,例如[email protected]为红色半透明。

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


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

FFMPEG添加文字中文显示乱码的问题_第1张图片

网上类似情况,有人说文字需要转成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

再来看得到的结果:

FFMPEG添加文字中文显示乱码的问题_第2张图片

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

FFMPEG添加文字中文显示乱码的问题_第3张图片

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



你可能感兴趣的:(FFMPEG)