Windows下使用ffmpeg为视频添加字幕
字幕分以下几种形式:
第一种是外挂字幕(软字幕),视频文件和字幕文件分离。当播放某视频文件时,会自动载入相同文件夹下同名的字幕文件,当然也可以用播放器(如:VLC media player)手动载入字幕(不要求字幕文件和视频文件同名并在相同文件夹下,可任意载入)。
第二种是将字幕封装到容器中,就是所谓的字幕流,和视频流、音频流同等地位。值得说明的是,并非所有的容器都支持字幕流,先进的 MKV 是支持的,MP4 目前我只知道支持苹果的 MOV text。
ffmpeg -i input.mkv -i subtitles.srt -c copy output.mkv
查看 output.mkv 的信息,已经包含了字幕流,但不知为何播放视频时仍然不能显示字幕。
从容器中提取字幕流,生成字幕文件(例子中生成的是 srt 格式的,可以任意生成所需的格式,改一下扩展名即可):
ffmpeg -i input.mkv output.srt
第三种是内嵌字幕(硬字幕),利用 video filter(subtitles、ass、甚至是 overlay)将字幕文件烧进视频流中,就像水印一样。
在使用 FFmpeg 的 subtitles filter 或 ass filter 时,可能会出现类似于下面这样的错误:
Fontconfig error: Cannot load default config file
[Parsed_subtitles_0 @ 0000000004b181c0] No usable fontconfig configuration file found, using fallback.
Fontconfig error: Cannot load default config file
无效的解决方法:
Fontconfig 是一个用来配置和自定义字体访问的库,在这里是为了让 ffmpeg 从系统中取用所需的字体。下载链接:http://www.freedesktop.org/software/fontconfig/release/。我下载的是 fontconfig-2.11.94.tar.gz。在存放 ffmpeg.exe 的文件夹内,新建一个命名为 fonts 的文件夹。把 fontconfig-2.11.94.tar.gz 解压后,找到 fonts.conf.in、fonts.dtd 和 conf.d ,并把它们复制到刚才新建的文件夹 fonts 中,最后把 fonts.conf.in 重命名为 fonts.conf 即可。
通过以上步骤,尽管不再出现前面的错误,但输出的视频仍然不能显示字幕。也许要先对 Fontconfig 进行编译才行(尽管 ffmpeg 不会用到生成的库),尝试用 MinGW+msys 编译了一下,没有搞定。
有效解决:
还是需要 fonts.conf 文件。下载地址:http://download.csdn.net/detail/u013699869/9074131。只要一步,将下载的压缩包解压到 ffmpeg.exe 所在的文件夹下即可。解决方案来源:https://ffmpeg.zeranoe.com/forum/viewtopic.php?f=7&t=2554。
利用 subtitles filter 为视频添加字幕(将字幕合成到视频流中,输出文件中不含字幕流):
ffmpeg -i input.mkv -vf subtitles=subtitles.srt output.mkv
将输入文件的第一个字幕流合成到视频流中:
ffmpeg -i input.mkv -vf subtitles=input.mkv output.mkv
将某容器第二个字幕流合成到另一个容器的视频流中输出:
ffmpeg -i input.mkv -vf subtitles=video.mkv:si=1 output.mkv
关于 subtitles filter 的详细用法: http://ffmpeg.org/ffmpeg-all.html#subtitles-1
ass filter 的用法和 subtitles filter 几乎一样,但它只用于 ASS(Advanced Substation Alpha)字幕文件,可以先进行字幕转换,再使用它:
ffmpeg -i subtitles.srt subtitles.ass
ffmpeg -i input.mkv -vf ass=subtitles.ass output.mkv
关于 ass filter 的说明:http://ffmpeg.org/ffmpeg-all.html#ass
FFmpeg 官方 wiki:HowToBurnSubtitlesIntoVideo
还可以用 overlay filter 来把字幕烧录进视频,比如把MKV格式转为MP4格式(mp4 也支持字幕流封装,但目前我仅知道支持苹果的 MOV text,所以一般都要把字幕烧到视频流中):
ffmpeg -i input.mkv -filter_complex [0:v][0:s]overlay[v] -map [v] -map 0:a output.mp4
Windows下使用ffmpeg为视频添加字幕相关推荐
- 安卓使用ffmpeg给视频添加字幕
包含添加字幕能力的ffmpeg和相关so编译 需要下载的源码 https://github.com/tanersener/mobile-ffmpeg https://github.com/taners ...
- Mac OS中利用ffmpeg为视频添加字幕
Mac系统下,利用ffmpeg加字幕 字幕类型 硬字幕,类似视频水印,作为视频的一部分内嵌了. 软字幕,封装字幕,也是内嵌到视频里,不过只是作为渲染,而且需要播放器支持才行. 外挂字幕,就是外部字幕文 ...
- ffmpeg 合并视频 添加字幕 bat命令
首先将ffmpeg添加进系统环境变量 1.mp4转mkv for %%a in ("*.mp4") do ffmpeg -i %%~na.mp4 -vcodec copy -aco ...
- windows下使用ffmpeg进行视频转换和截图。
author:fanfq(xiaoban) Email:fangqing.fan#gmail.com link:http://fanfq.iteye.com/admin/blogs/655569 ch ...
- python实现给视频添加字幕,并根据字幕添加语音
文章目录 前言 一."pyttsx3"实现"文字到音频"的转换 二."pydub"处理音频 1.安装 2.测试 三."moviep ...
- ffmpeg给视频添加文本
1. 给视频添加文本 给视频添加文本有两种通常做法,一种是使用字幕实现,一种是使用overlay滤镜实现.但下面是通过使用drawtext滤镜,更高级的做法实现. 格式:ffmpeg -i inp ...
- ffmpeg-给视频添加字幕(二十四)
前言 在我们观看电影或者抖音等短视频平台的视频时一般都会出现字幕,有了字幕那视频的表现形式就更加丰富了,所以为一段视频添加字幕也是一个硬需求.本文的目的就是为一段视频添加字幕,了解如何添加字幕前先了解 ...
- 在Windows下编译FFmpeg详细说明
在Windows下编译FFmpeg详细说明 MinGW:一个可自由使用和自由发布的Windows特定头文件和使用GNC工具集导入库的集合,允许你生成本地的Windows程序而不需要第三方C运行时 Mi ...
- WINDOWS 下编译 ffmpeg 源码总结
WINDOWS 下编译 ffmpeg 源码,有两种方式:VC.GCC 1.VC 编译: https://github.com/ShiftMediaProject/FFVS-Project-Gene ...
最新文章
- C++抽象基类和纯虚成员函数
- fixture.detectChange如何通过Angular zone执行其异步逻辑的
- 使用Rancher搭建K8S测试环境
- d3代码如何改造成update结构(恰当处理enter和exit)
- linux 查tls模块,TLSSLed · Kali Linux Tools Documents · 看云
- 网易云音乐被纳入港股通 3月7日起生效
- matlab18a,Matlab R2018a安装详解
- Autodesk Map 3D 2012 新功能介绍
- 《数学之美》—PageRank
- Unity3D笔记 愤怒的小鸟二 实现Play界面
- struts2 tag if NumberFormatException
- 关于如何取消萤石云视频加密
- psd格式图片保存自己需要的png图片
- html js css 简明教程,HTML+CSS+JavaScript网页制作简明教程
- 盲孔、埋孔、通孔、一阶HDI、二阶HDI概念
- rtx java_如何使用JAVAWEB集成RTX推送消息
- 握手定理(握手数之和为偶数)和相关2个推论
- 基于saber软件的无源RC滤波器仿真
- 安装完svn客户端后在bin目录中没有svn.exe文件
- 如果你会玩这4个自媒体运营工具,副业收入6000+很轻松