ffmpeg处理字幕
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)/confexport FONTCONFIG_FILE=$(pwd)/conf/fonts.confexport FONTCONFIG_PATH=$(pwd)/confexport
VS2013调试设置环境变量:
ffmpeg.exe所在的目录ffmpeg-3.3\msvc\MSVC_ffmpeg-3.0\Debug,下面新增conf目录,config目录下面放fonts.conf,fonts.conf内容如下:
<?xml version="1.0"?>
<fontconfig><dir>C:\WINDOWS\Fonts</dir><match target="pattern">
<test qual="any" name="family"><string>mono</string></test>
<edit name="family" mode="assign"><string>monospace</string></edit>
</match><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><alias>
<family>Times</family>
<prefer><family>Times New Roman</family></prefer>
<default><family>serif</family></default>
</alias>
<alias>
<family>Helvetica</family>
<prefer><family>Arial</family></prefer>
<default><family>sans</family></default>
</alias>
<alias>
<family>Courier</family>
<prefer><family>Courier New</family></prefer>
<default><family>monospace</family></default>
</alias>
<alias>
<family>serif</family>
<prefer><family>Times New Roman</family></prefer>
</alias>
<alias>
<family>sans</family>
<prefer><family>Arial</family></prefer>
</alias>
<alias>
<family>monospace</family>
<prefer><family>Andale Mono</family></prefer>
</alias>
<match target="pattern">
<test name="family" compare="eq">
<string>Courier New</string>
</test>
<edit name="family" mode="prepend">
<string>monospace</string>
</edit>
</match>
<match target="pattern">
<test name="family" compare="eq">
<string>Courier</string>
</test>
<edit name="family" mode="prepend">
<string>monospace</string>
</edit>
</match></fontconfig>
字幕嵌入视频
下面的命令可以将字幕合成到视频里面,成为硬字幕,不是放到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)elsebreak;}
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。
ffmpeg处理字幕相关推荐
- ffmpeg 提取字幕
ffmpeg 提取字幕 1.ffmpeg的下载地址 https://ffmpeg.zeranoe.com/builds/win64/static/ 2.有些字幕是直接打在H264裸流上的,需要先取裸流 ...
- 使用FFmpeg将字幕文件集成到视频文件
本文最后更新于:2015-05-25 13:12:00 原文:http://www.yaosansi.com/post/ffmpeg-burn-subtitles-into-video 向视频文件里添 ...
- ffmpeg打字幕遇到乱码
解决linux中使用ffmpeg加字幕时出现乱码的情况 这种情况主要是因为linux系统中缺乏对应的字体库. **1.执行指令:**yum install curl cabextract xorg-x ...
- FFmpeg添加字幕的详细操作
FFmpeg添加字幕的详细操作 在视频中添加字幕可以使视频更具可读性,并为观众提供更好的观看体验,这在多语种内容中尤为重要.FFmpeg是一个流行的开源视频处理工具,它可以被用来给视频添加字幕.本文将 ...
- ffmpeg加字幕和自定义字体
搞了好多天,用subtitles加srt字幕文件,总是出现找不到字体文件的错误,试过许多方法都无效, 最简单的解决方法,是改用ass字幕文件 1.安装ffmpeg windoes版,并配置环境变量至f ...
- ffmpeg添加字幕(包含srt文件)
words.srt代码 1 00:00:00,0 --> 00:00:10,540 旅行有起点也总有终点,旅行是结束也是重生. 生活并未给我们放纵和沉溺的机会,那些生命本来的躁动会随 时召唤我们 ...
- Centos7安装aeneas ffmpeg实现字幕音视频自动强制对齐
前言 为啥写这个呢,因为发现除了Centos以外,其它系统安装都好方便啊.当然也可以把aeneas程序写好放到docker,然后部署到Centos7.Centos6啥的已经放弃了,完全不知道怎么玩. ...
- ffmpeg 视频字幕添加相关三方库
libx264 下载地址: x264, the best H.264/AVC encoder - VideoLAN Index of /pub/videolan/x264/snapshots/ lib ...
- ffmpeg添加双语字幕
[FFMPEG命令行操作]为视频添加双语字幕(附图)(不借助其他工具,只通过命令的组合实现) 核心思想:重复使用ffmpeg字幕添加命令,利用字幕的上下位置,划分中英文字幕显示位置 准备素材,如下图所 ...
最新文章
- SQL 判断表是否存在 数据表不存在是致命错误
- tensorflow从入门到精通100讲(六)-在TensorFlow Serving/Docker中做keras 模型部署
- Flutter实现倒计时功能
- mysql运行效率最高archive_MySQL 的优化方案总结
- 网络信息安全实验 — 网络攻击技术实验(Kali系统,John、lc7、arpspoof、ettercap、SQL注入...)
- 特别看好高校团队的联想创投,在中科大拉开高校AI精英挑战赛大幕
- c语言锁存器写入1,总线接口作两种用途,为何就要用到锁存器
- java 脚本怎么写_编写java的运行脚本
- cad快速选择命令快捷键_CAD人必知的6大CAD操作命令及快捷键
- 人工智能设计概述(二)
- linux dd命令刻录u盘,Linux使用dd命令烧录启动U盘
- OpenCV读取图片
- 为什么进行商业分析?什么是商业分析?(二)商业分析的角色、怎样进行商业分析与准备、相关方识别
- 六兆年と一夜物語 jzoj3501 最短路
- mysql教学磁力链_使用MySQL存储以太坊事件
- Linux系统基础操作管理
- 比心app源码,获取系统时间
- Boostnote是什么?-是为程序员开发的一种开放源代码记事本
- python算法问题_算法重心问题树(Python),的
- 计算机属性显示缩略图 桌面样式变了,Win7任务栏缩略图预览变成列表预览怎么解决?...
热门文章
- 互联网公司招聘--京东--运营岗-2016年笔试题
- 达梦迁移oracle,达梦数据迁移工具的使用
- 推荐一个整理免费可商用字体的网站——猫啃网
- android 字体百分比,android 解决百分比布局适配时Textview的字体Textsize比例缩放问题...
- Web 中间件漏洞笔记
- Photoshop CC 2019 Essential Training: Design Photoshop CC 2019 设计基础教程 Lynda课程中文字幕
- 修改windows启动画面:Logonui.exe
- Node.js配合WebSocket实现网页斗地主(一、环境配置)
- 计算H时M分S秒以后是_〖图朴解决方案〗热水热力管网的水力计算
- 目标检测,将voc格式转化为coco格式详细过程