本文最后更新于:2015-05-25 13:12:00
原文:http://www.yaosansi.com/post/ffmpeg-burn-subtitles-into-video

向视频文件里添加字幕是件很常见的事,本文使用FFmpeg将字幕文件集成到视频文件里。

在CentOS上编译安装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文件

1234
Fontconfig error: Cannot load default config file[Parsed_ass_0 @ 0000000002bfa3e0] No usable fontconfig configuration file found,using fallback.Fontconfig error: Cannot load default config file

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

环境变量

FFmpeg使用的默认字体文件是使用系统环境变量中对应的文件位置。

默认文件名:fonts.conf

环境变量 FONTCONFIG_FILE 可以覆盖默认配置文件
环境变量 FONTCONFIG_PATH 可以覆盖默认配置文件目录

Linux 默认配置文件:fonts.conf

使用步骤:

  1. 以root权限登录
  2. 建立/etc/fonts目录
  3. 下载fonts.conf文件到/etc/fonts目录
  4. 设置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

123456
<!-- Font directory list -->

<dir>/opt/X11/share/fonts</dir><dir>/usr/X11R6/lib/X11/fonts</dir><dir>~/.fonts</dir><dir>/Library/Fonts</dir>

Windows系统

在系统环境变量中添加:

name: FONTCONFIG_PATH
value: J:/ffmpeg (我本机ffmpeg目录,与fonts.conf同目录即可)

fonts.conf文件放至上述指定目录。

以下为yaosansi使用的fonts.conf文件:

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
<?xml version="1.0"?><!DOCTYPE fontconfig SYSTEM "fonts.dtd"><!-- /etc/fonts/fonts.conf file to configure system font access --><fontconfig>

<!--DO NOT EDIT THIS FILE.IT WILL BE REPLACED WHEN FONTCONFIG IS UPDATED.LOCAL CHANGES BELONG IN 'local.conf'.

The intent of this standard configuration file is to be adequate formost environments.  If you have a reasonably normal environment andhave found problems with this configuration, they are probablythings that others will also want fixed.  Please submit anyproblems to the fontconfig bugzilla system located at fontconfig.org

Note that the normal 'make install' procedure for fontconfig is toreplace any existing fonts.conf file with the new version.  Placeany local customizations in local.conf which this file references.

Keith Packard-->

<!-- Font directory list -->

<dir>C:/Windows/Fonts</dir><!--Accept deprecated 'mono' alias, replacing it with 'monospace'--><match target="pattern"><test qual="any" name="family"><string>mono</string></test><edit name="family" mode="assign"><string>monospace</string></edit></match>

<!--Accept alternate 'sans serif' spelling, replacing it with 'sans-serif'--><match target="pattern"><test qual="any" name="family"><string>sans serif</string></test><edit name="family" mode="assign"><string>sans-serif</string></edit></match>

<!--Accept deprecated 'sans' alias, replacing it with 'sans-serif'--><match target="pattern"><test qual="any" name="family"><string>sans</string></test><edit name="family" mode="assign"><string>sans-serif</string></edit></match>

<!--Mark common families with their generics so we'll getsomething reasonable-->

<!--Serif faces--><alias><family>Times New Roman</family><default><family>serif</family></default></alias>

<!--If the font still has no generic name, add sans-serif--><match target="pattern"><test qual="all" name="family" compare="not_eq"><string>sans-serif</string></test><test qual="all" name="family" compare="not_eq"><string>serif</string></test><test qual="all" name="family" compare="not_eq"><string>monospace</string></test><edit name="family" mode="append_last"><string>sans-serif</string></edit></match>

<!--AMT provides metric and shape compatible fonts for these three web fontfamilies.--><alias><family>Times New Roman</family><accept><family>Thorndale AMT</family></accept></alias><alias><family>Arial</family><accept><family>Albany AMT</family></accept></alias><alias><family>Courier New</family><accept><family>Cumberland AMT</family></accept></alias>

<!--Some Asian fonts misadvertise themselves as monospaced whenin fact they are dual-spaced (half and full).  This makesFreeType very confused as it forces all widths to match.Undo this magic by disabling the width forcing code --><match target="font"><test name="family"><string>GulimChe</string></test><edit name="globaladvance"><bool>false</bool></edit></match>

<match target="font"><test name="family"><string>DotumChe</string></test><edit name="globaladvance"><bool>false</bool></edit></match>

<match target="font"><test name="family"><string>BatangChe</string></test><edit name="globaladvance"><bool>false</bool></edit></match>

<match target="font"><test name="family"><string>GungsuhChe</string></test><edit name="globaladvance"><bool>false</bool></edit></match>

<config><!--These are the default Unicode chars that are expected to be blankin fonts.  All other blank chars are assumed to be broken andwon't appear in the resulting charsets--><blank><int>0x0020</int>   <!-- SPACE --><int>0x00A0</int>   <!-- NO-BREAK SPACE --><int>0x00AD</int>   <!-- SOFT HYPHEN --><int>0x034F</int>   <!-- COMBINING GRAPHEME JOINER --><int>0x0600</int>   <!-- ARABIC NUMBER SIGN --><int>0x0601</int>   <!-- ARABIC SIGN SANAH --><int>0x0602</int>   <!-- ARABIC FOOTNOTE MARKER --><int>0x0603</int>   <!-- ARABIC SIGN SAFHA --><int>0x06DD</int>   <!-- ARABIC END OF AYAH --><int>0x070F</int>   <!-- SYRIAC ABBREVIATION MARK --><int>0x115F</int>   <!-- HANGUL CHOSEONG FILLER --><int>0x1160</int>   <!-- HANGUL JUNGSEONG FILLER --><int>0x1680</int>   <!-- OGHAM SPACE MARK --><int>0x17B4</int>   <!-- KHMER VOWEL INHERENT AQ --><int>0x17B5</int>   <!-- KHMER VOWEL INHERENT AA --><int>0x180E</int>   <!-- MONGOLIAN VOWEL SEPARATOR --><int>0x2000</int>   <!-- EN QUAD --><int>0x2001</int>   <!-- EM QUAD --><int>0x2002</int>   <!-- EN SPACE --><int>0x2003</int>   <!-- EM SPACE --><int>0x2004</int>   <!-- THREE-PER-EM SPACE --><int>0x2005</int>   <!-- FOUR-PER-EM SPACE --><int>0x2006</int>   <!-- SIX-PER-EM SPACE --><int>0x2007</int>   <!-- FIGURE SPACE --><int>0x2008</int>   <!-- PUNCTUATION SPACE --><int>0x2009</int>   <!-- THIN SPACE --><int>0x200A</int>   <!-- HAIR SPACE --><int>0x200B</int>   <!-- ZERO WIDTH SPACE --><int>0x200C</int>   <!-- ZERO WIDTH NON-JOINER --><int>0x200D</int>   <!-- ZERO WIDTH JOINER --><int>0x200E</int>   <!-- LEFT-TO-RIGHT MARK --><int>0x200F</int>   <!-- RIGHT-TO-LEFT MARK --><int>0x2028</int>   <!-- LINE SEPARATOR --><int>0x2029</int>   <!-- PARAGRAPH SEPARATOR --><int>0x202A</int>   <!-- LEFT-TO-RIGHT EMBEDDING --><int>0x202B</int>   <!-- RIGHT-TO-LEFT EMBEDDING --><int>0x202C</int>   <!-- POP DIRECTIONAL FORMATTING --><int>0x202D</int>   <!-- LEFT-TO-RIGHT OVERRIDE --><int>0x202E</int>   <!-- RIGHT-TO-LEFT OVERRIDE --><int>0x202F</int>   <!-- NARROW NO-BREAK SPACE --><int>0x205F</int>   <!-- MEDIUM MATHEMATICAL SPACE --><int>0x2060</int>   <!-- WORD JOINER --><int>0x2061</int>   <!-- FUNCTION APPLICATION --><int>0x2062</int>   <!-- INVISIBLE TIMES --><int>0x2063</int>   <!-- INVISIBLE SEPARATOR --><int>0x206A</int>   <!-- INHIBIT SYMMETRIC SWAPPING --><int>0x206B</int>   <!-- ACTIVATE SYMMETRIC SWAPPING --><int>0x206C</int>   <!-- INHIBIT ARABIC FORM SHAPING --><int>0x206D</int>   <!-- ACTIVATE ARABIC FORM SHAPING --><int>0x206E</int>   <!-- NATIONAL DIGIT SHAPES --><int>0x206F</int>   <!-- NOMINAL DIGIT SHAPES --><int>0x3000</int>   <!-- IDEOGRAPHIC SPACE --><int>0x3164</int>   <!-- HANGUL FILLER --><int>0xFEFF</int>   <!-- ZERO WIDTH NO-BREAK SPACE --><int>0xFFA0</int>   <!-- HALFWIDTH HANGUL FILLER --><int>0xFFF9</int>   <!-- INTERLINEAR ANNOTATION ANCHOR --><int>0xFFFA</int>   <!-- INTERLINEAR ANNOTATION SEPARATOR --><int>0xFFFB</int>   <!-- INTERLINEAR ANNOTATION TERMINATOR --></blank><!--Rescan configuration every 30 seconds when FcFontSetList is called--><rescan><int>30</int></rescan></config>

</fontconfig>

参考

  • 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/

使用FFmpeg将字幕文件集成到视频文件相关推荐

  1. 如何使用格式工厂将vtt文件格式字幕加在视频文件中

    如何使用格式工厂将vtt文件格式字幕加在视频文件中 可以直接看 第三步-整合流程 一,字幕格式 现在比较流行的字幕格式,分为图形格式和文本格式两类. 图形格式字幕由 idx 和 sub 文件组成,id ...

  2. 使用ffmpeg指令转换出yuv视频文件

    播放器播放的都是经过解码后的视频,也就是yuv格式的视频文件,因此在学习的过程中需要准备一下yuv格式的视频做实验素材,这里演示如何在电脑中使用ffmpeg指令将一个视频文件转换为.yuv格式. 1. ...

  3. 记录利用ffmpeg对录制好的视频文件音量调整

    如何对MP4文件的音量进行放大 经常遇到比较苦恼的事情就是拿到一个视频文件,播放的时候即使把音量条设置到最大,音量还是小,这个时候,可以用ffmpeg对文件进行修改,重新生成一个播放音量用软件进行放大 ...

  4. FFmpeg进阶: 转码输出视频文件中的音频

    很多时候为了方便收听视频文件中的音频信息,我们会将视频文件中的音频流转码输出成音频文件,方便在对应的平台上进行播放.这里就介绍一下如何通过FFmpeg将视频文件中的音频流转码成特定编码格式的音频文件. ...

  5. 使用FFMpeg合并bilibili缓存的视频文件

    首先下载FFMpeg并配置环境变量 下载链接: https://www.gyan.dev/ffmpeg/builds/ffmpeg-git-full.7z 下载后解压文件到指定目录下,并配置环境变量& ...

  6. ffmpeg添加字幕(包含srt文件)

    words.srt代码 1 00:00:00,0 --> 00:00:10,540 旅行有起点也总有终点,旅行是结束也是重生. 生活并未给我们放纵和沉溺的机会,那些生命本来的躁动会随 时召唤我们 ...

  7. ffmpeg命令:合并拼接视频文件

    ffmpeg.exe -i "concat:1.ts|2.ts|3.ts" -c:v copy -c:a copy ./t.mp4

  8. 使用ffmpeg循环推流(循环读取视频文件)推送RTMP服务器的方法

    https://blog.csdn.net/cai6811376/article/details/74783269/

  9. ffmpeg音视频文件音视频流抽取,初步尝试人声分离

    文章目录 ffmpeg抽取音视频文件中的音频流 音频流类型 AAC与m4a的区别 AAC与mp3的区别 用ffmpeg查看视频的信息 用ffmpeg抽取AAC音频流 从AAC文件中获取音轨 音轨是什么 ...

最新文章

  1. TPYBoard开发板搭建与阿里云服务发送数据
  2. linux libcurl 库使用方法
  3. springboot创建parent_Springboot 框架整理,建议做开发的都看看,整理的比较详细!...
  4. 计算机网络工程本科培养计划,网络工程专业卓越计划本科培养方案2015版-西安电子科技大学计算机.doc...
  5. YOLOv3实现鱼类目标检测
  6. Sqoop:MySQL2Sqoop修改源表结构对同步数据的影响
  7. github hexo搭建博客
  8. DirectX 龙书 混合 理解
  9. Java随笔记录第二章:输入输出流程控制
  10. PowerShell 实现企业微信机器人推送消息
  11. unity 摄像机追随指定物体
  12. TAZ生成实践(Intel芯片Mac Python 3.7.9)
  13. 编程之路,从懵懂开始
  14. php自动填表单,GreenBrowser 自动填表
  15. 自定义圆角矩形图片/圆形图片
  16. Windows 运行chkdsk磁盘修复工具命令参数详解
  17. 软件工程测试工程师自我评价,测试工程师自我评价
  18. 一看就会的meta分析-Stata
  19. 国内外免费空间(最新)
  20. 我的联想笔记本按f12进不了u盘启动项怎么办?

热门文章

  1. 数据库课程设计:商铺入驻管理系统+Python+MySQL-8.0
  2. 好工具分享:CxImage图片无损批量压缩大师
  3. 仿真服务器性能用途说明,云服务器仿真速度
  4. VB、WIN32API函数在串口操作模块的运用
  5. DNSPod十问任可:抑郁症赛道的神奇女侠
  6. 使用CSS3制作一个简单的商品列表、浮动布局
  7. 让你最满意的几款款 PC 软件是什么?高效必备软件分享~
  8. 小字辈 (25 分)
  9. PHP文件创建/PHP文件写入/PHP文件打开/PHP文件读取
  10. Html5游戏制作 弹球游戏Pong (可在线预览对战 ^_^)