原文: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/