原文:http://www.yaosansi.com/post/ffmpeg-burn-subtitles-into-video
向视频文件里添加字幕是件很常见的事,本文使用FFmpeg将字幕文件集成到视频文件里。

字幕文件转换

字幕文件有很多种,常见的有.srt,.ass文件等,下面使用FFmpeg进行相互转换。
将.srt文件转换成.ass文件

ffmpeg -i subtitle.srt subtitle.ass

将.ass文件转换成.srt文件

ffmpeg -i subtitle.ass subtitle.srt

集成字幕,选择播放

这种字幕集成比较简单,播放时需要在播放器中选择相应的字幕文件。

ffmpeg -iinput.mp4 -i subtitles.srt -c:s mov_text -c:v copy -c:a copy output.mp4

嵌入SRT字幕到视频文件

单独SRT字幕

字幕文件为subtitle.srt

ffmpeg -ivideo.avi -vf subtitles=subtitle.srt out.avi

嵌入在MKV等容器的字幕

将video.mkv中的字幕(默认)嵌入到out.avi文件

ffmpeg -ivideo.mkv -vf subtitles=video.mkv out.avi

将video.mkv中的字幕(第二个)嵌入到out.avi文件

ffmpeg -ivideo.mkv -vf subtitles=video.mkv:si=1 out.avi

嵌入ASS字幕到视频文件

ffmpeg -ivideo.avi -vf"ass=subtitle.ass" out.avi

不能加载fontconfig文件

Fontconfigerror: Cannot loaddefault configfile
[Parsed_ass_0 @0000000002bfa3e0] No usable fontconfig configurationfile found,
using fallback.
Fontconfigerror: Cannot loaddefault configfile

出现类似错误的原因是无法加载字体配置文件。

环境变量

FFmpeg使用的默认字体文件是使用系统环境变量中对应的文件位置。
默认文件名:fonts.conf
环境变量FONTCONFIG_FILE可以覆盖默认配置文件
环境变量FONTCONFIG_PATH可以覆盖默认配置文件目录
Linux 默认配置文件:fonts.conf
使用步骤:
以root权限登录建立/etc/fonts目录下载fonts.conf文件到/etc/fonts目录设置fonts.conf文件权限为可读

Linux/Mac 系统

在~/.bashrc 最后添加:

export FONTCONFIG_PATH=/opt/X11/lib/X11/fontconfig

使之有效:

source ~/.bashrc

编辑/opt/X11/lib/X11/fontconfig/fonts.conf在字体目录添加/Library/Fonts