2025年4月26日 星期六 乙巳(蛇)年 正月廿七 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 软件应用 > 其它软件

使用FFmpeg将字幕文件集成到视频文件

时间:10-22来源:作者:点击数:94

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

在CentOS上编译安装FFmpeg

字幕文件转换

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

.srt文件转换成.ass文件

  • ffmpeg -i subtitle.srt subtitle.ass

.ass文件转换成.srt文件

  • ffmpeg -i subtitle.ass subtitle.srt

集成字幕,选择播放

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

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

嵌入SRT字幕到视频文件

单独SRT字幕

字幕文件为subtitle.srt

  • ffmpeg -i video.avi -vf subtitles=subtitle.srt out.avi

嵌入在MKV等容器的字幕

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

  • ffmpeg -i video.mkv -vf subtitles=video.mkv out.avi

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

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

嵌入ASS字幕到视频文件

  • ffmpeg -i video.avi -vf "ass=subtitle.ass" out.avi

不能加载fontconfig文件

  • 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 最后添加:

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

使之有效:

  • source ~/.bashrc

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

  • <!-- 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文件放至上述指定目录。

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

  • <?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 for
  • most environments. If you have a reasonably normal environment and
  • have found problems with this configuration, they are probably
  • things that others will also want fixed. Please submit any
  • problems to the fontconfig bugzilla system located at fontconfig.org
  • Note that the normal 'make install' procedure for fontconfig is to
  • replace any existing fonts.conf file with the new version. Place
  • any 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 get
  • something 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 font
  • families.
  • -->
  • <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 when
  • in fact they are dual-spaced (half and full). This makes
  • FreeType 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 blank
  • in fonts. All other blank chars are assumed to be broken and
  • won'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>
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门