ffmpeg处理字幕
ffmpeg加载font
以ass为例,第一次用ffmpeg将ass字幕加到视频里面的时候报下面的错误:
Fontconfig error: Cannot load default config file
[Parsed_ass_0 @ 00000000042c33c0] No usable fontconfig configuration file found, using fallback.
Fontconfig error: Cannot load default config file
[Parsed_ass_0 @ 00000000042c33c0] Added subtitle file: ‘subs.ass’ (3 styles, 68 events)
解决办法参考:
https://superuser.com/questions/794014/ffmpeg-ass-filter-not-working
http://www.yaosansi.com/post/ffmpeg-burn-subtitles-into-video/
也就是要配置一下fonts.conf。
windows下
增加环境变量:
export FC_CONFIG_DIR=$(pwd)/conf
export FONTCONFIG_FILE=$(pwd)/conf/fonts.conf
export FONTCONFIG_PATH=$(pwd)/conf
export
VS2013调试设置环境变量:
ffmpeg.exe所在的目录ffmpeg-3.3\msvc\MSVC_ffmpeg-3.0\Debug,下面新增conf目录,config目录下面放fonts.conf,fonts.conf内容如下:
C:\WINDOWS\Fonts
mono
monospace
sans-serif
serif
monospace
sans-serif
Times
Times New Roman
serif
Helvetica
Arial
sans
Courier
Courier New
monospace
serif
Times New Roman
/alias>
br />
br />
family>sans
/family>
br />
prefer>
Arial /prefer>
br />
family>Andale Mono
/family>
br />
string>Courier New
/string>
br />
br />
string>monospace
/string>
br />
br />
string>Courier
/string>
br />
br />
string>monospace
/string>
br />
字幕嵌入视频
下面的命令可以将字幕合成到视频里面,成为硬字幕,不是放到mkv容器里面,所以需要重新编码:
ffmpeg -ss 00:01:15 -i "input.mkv" -vf ass=" input.ass" -t 00:02:00 -map 0:0 -acodec copy " output.mkv"
字幕放入mkv容器
片源input.mkv,字幕input.ass。原始片源有mkv内嵌字幕,ffmpeg没有找到参数来去掉mkv内嵌的字幕,可以用MKVToolNix GUI来去掉(https://mkvtoolnix.download/index.html)。MKVToolNix GUI版本12.0.0,其64位版本在win7下有问题,报mkvmerge启动不了,32位的可以在win7下运行。
选择混流,打开input.mkv后,不要勾选SubRip/SRT,然后单击“开始混流”按钮,处理完后的码流就没有内嵌字幕了。
libass好像只支持UTF-8编码的字幕,libass/ass.c里面的process_text函数,只处理了0xEFBBBF这个BOM前缀:
while (1) {
if ((p == '\r') || (p == '\n'))
++p;
else if (p[0] == '\xef' && p[1] == '\xbb' && p[2] == '\xbf')
p += 3; // U+FFFE (BOM)
else
break;
}
BOM前缀编码:
Byte-order mark Description
EF BB BF UTF-8
FF FE UTF-16 aka UCS-2, little endian
FE FF UTF-16 aka UCS-2, big endian
00 00 FF FE UTF-32 aka UCS-4, little endian.
00 00 FE FF UTF-32 aka UCS-4, big-endian.
所以非UTF-8编码的字幕,需要用aegisub32.exe转换一下,打开字幕后,菜单->文件->导出字幕,在下面的对话框中的“文字编码”选择UTF-8,点导出就可以保存成UTF-8编码的字幕:
ffmpeg命令合成mkv:
ffmpeg -i input.mkv -i input.ass -c copy output.mkv
不能用-map参数,-map参数会重新编码并将字幕嵌入到视频上面,成为硬字幕。
将上面的命令中输出文件改成mp4后缀,不能将字幕放入mp4容器,有可能mp4只支持苹果的MOV text。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/hz/148877.html