原文:http://www.yaosansi.com/post/ffmpeg-burn-subtitles-into-video
向视频文件里添加字幕是件很常见的事,本文使用FFmpeg将字幕文件集成到视频文件里。
字幕文件转换
字幕文件有很多种,常见的有 .srt
, .ass
文件等,下面使用FFmpeg进行相互转换。
将.srt
文件转换成.ass
文件
1
|
ffmpeg -i subtitle.srt subtitle.ass
|
将.ass
文件转换成.srt
文件
1
|
ffmpeg -i subtitle.ass subtitle.srt
|
集成字幕,选择播放
这种字幕集成比较简单,播放时需要在播放器中选择相应的字幕文件。
1
|
ffmpeg -i input.mp4 -i subtitles.srt -c:s mov_text -c:v copy -c:a copy output.mp4
|
嵌入SRT字幕到视频文件
单独SRT字幕
字幕文件为subtitle.srt
1
|
ffmpeg -i video.avi -vf subtitles=subtitle.srt out.avi
|
嵌入在MKV等容器的字幕
将video.mkv
中的字幕(默认)嵌入到out.avi
文件
1
|
ffmpeg -i video.mkv -vf subtitles=video.mkv out.avi
|
将video.mkv
中的字幕(第二个)嵌入到out.avi
文件
1
|
ffmpeg -i video.mkv -vf subtitles=video.mkv:si=1 out.avi
|
嵌入ASS字幕到视频文件
1
|
ffmpeg -i video.avi -vf "ass=subtitle.ass" out.avi
|
不能加载fontconfig文件
1
|
Fontconfig error: Cannot load default config file
|
出现类似错误的原因是无法加载字体配置文件。
环境变量
FFmpeg使用的默认字体文件是使用系统环境变量中对应的文件位置。
默认文件名:fonts.conf
环境变量 FONTCONFIG_FILE
可以覆盖默认配置文件
环境变量 FONTCONFIG_PATH
可以覆盖默认配置文件目录
Linux 默认配置文件:fonts.conf
使用步骤:
- 以root权限登录
- 建立
/etc/fonts
目录 - 下载
fonts.conf
文件到/etc/fonts
目录 - 设置
fonts.conf
文件权限为可读
Linux/Mac 系统
在~/.bashrc 最后添加:
1
|
export FONTCONFIG_PATH=/opt/X11/lib/X11/fontconfig
|
使之有效:
1
|
source ~/.bashrc
|
编辑 /opt/X11/lib/X11/fontconfig/fonts.conf
在字体目录添加 /Library/Fonts
1
|
<!-- Font directory list -->
|
Windows系统
在系统环境变量中添加:
name: FONTCONFIG_PATH
value: J:/ffmpeg
(我本机ffmpeg
目录,与fonts.conf
同目录即可)
将fonts.conf
文件放至上述指定目录。
以下为yaosansi使用的fonts.conf
文件:
1
|
<?xml version="1.0"?>
|
参考
- http://www.ffmpeg.org/
- https://trac.ffmpeg.org/wiki/HowToBurnSubtitlesIntoVideo
- http://ffmpeg.org/ffmpeg-all.html#toc-subtitles-1
- http://en.wikipedia.org/wiki/SubStation_Alpha#Advanced_SubStation_Alpha
- http://ffmpeg.org/ffmpeg-filters.html#ass
- http://www.stata.com/support/faqs/unix/fontconfig-error/
- http://freedesktop.org/software/fontconfig/fontconfig-user.html
- http://www.freedesktop.org/wiki/Software/fontconfig/
- http://www.stata.com/support/faqs/unix/fonts.conf/lux64/fonts.conf
- http://blog.neten.de/posts/2013/10/06/use-ffmpeg-to-burn-subtitles-into-the-video/