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处理字幕相关推荐

  1. ffmpeg 提取字幕

    ffmpeg 提取字幕 1.ffmpeg的下载地址 https://ffmpeg.zeranoe.com/builds/win64/static/ 2.有些字幕是直接打在H264裸流上的,需要先取裸流 ...

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

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

  3. ffmpeg打字幕遇到乱码

    解决linux中使用ffmpeg加字幕时出现乱码的情况 这种情况主要是因为linux系统中缺乏对应的字体库. **1.执行指令:**yum install curl cabextract xorg-x ...

  4. FFmpeg添加字幕的详细操作

    FFmpeg添加字幕的详细操作 在视频中添加字幕可以使视频更具可读性,并为观众提供更好的观看体验,这在多语种内容中尤为重要.FFmpeg是一个流行的开源视频处理工具,它可以被用来给视频添加字幕.本文将 ...

  5. ffmpeg加字幕和自定义字体

    搞了好多天,用subtitles加srt字幕文件,总是出现找不到字体文件的错误,试过许多方法都无效, 最简单的解决方法,是改用ass字幕文件 1.安装ffmpeg windoes版,并配置环境变量至f ...

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

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

  7. Centos7安装aeneas ffmpeg实现字幕音视频自动强制对齐

    前言 为啥写这个呢,因为发现除了Centos以外,其它系统安装都好方便啊.当然也可以把aeneas程序写好放到docker,然后部署到Centos7.Centos6啥的已经放弃了,完全不知道怎么玩. ...

  8. ffmpeg 视频字幕添加相关三方库

    libx264 下载地址: x264, the best H.264/AVC encoder - VideoLAN Index of /pub/videolan/x264/snapshots/ lib ...

  9. ffmpeg添加双语字幕

    [FFMPEG命令行操作]为视频添加双语字幕(附图)(不借助其他工具,只通过命令的组合实现) 核心思想:重复使用ffmpeg字幕添加命令,利用字幕的上下位置,划分中英文字幕显示位置 准备素材,如下图所 ...

最新文章

  1. SQL 判断表是否存在 数据表不存在是致命错误
  2. tensorflow从入门到精通100讲(六)-在TensorFlow Serving/Docker中做keras 模型部署
  3. Flutter实现倒计时功能
  4. mysql运行效率最高archive_MySQL 的优化方案总结
  5. 网络信息安全实验 — 网络攻击技术实验(Kali系统,John、lc7、arpspoof、ettercap、SQL注入...)
  6. 特别看好高校团队的联想创投,在中科大拉开高校AI精英挑战赛大幕
  7. c语言锁存器写入1,总线接口作两种用途,为何就要用到锁存器
  8. java 脚本怎么写_编写java的运行脚本
  9. cad快速选择命令快捷键_CAD人必知的6大CAD操作命令及快捷键
  10. 人工智能设计概述(二)
  11. linux dd命令刻录u盘,Linux使用dd命令烧录启动U盘
  12. OpenCV读取图片
  13. 为什么进行商业分析?什么是商业分析?(二)商业分析的角色、怎样进行商业分析与准备、相关方识别
  14. 六兆年と一夜物語 jzoj3501 最短路
  15. mysql教学磁力链_使用MySQL存储以太坊事件
  16. Linux系统基础操作管理
  17. 比心app源码,获取系统时间
  18. Boostnote是什么?-是为程序员开发的一种开放源代码记事本
  19. python算法问题_算法重心问题树(Python),的
  20. 计算机属性显示缩略图 桌面样式变了,Win7任务栏缩略图预览变成列表预览怎么解决?...

热门文章

  1. 互联网公司招聘--京东--运营岗-2016年笔试题
  2. 达梦迁移oracle,达梦数据迁移工具的使用
  3. 推荐一个整理免费可商用字体的网站——猫啃网
  4. android 字体百分比,android 解决百分比布局适配时Textview的字体Textsize比例缩放问题...
  5. Web 中间件漏洞笔记
  6. Photoshop CC 2019 Essential Training: Design Photoshop CC 2019 设计基础教程 Lynda课程中文字幕
  7. 修改windows启动画面:Logonui.exe
  8. Node.js配合WebSocket实现网页斗地主(一、环境配置)
  9. 计算H时M分S秒以后是_〖图朴解决方案〗热水热力管网的水力计算
  10. 目标检测,将voc格式转化为coco格式详细过程