用FFmpeg提取视频中的字幕
📝 字幕提取在后期制作中的应用
从视频中提取字幕在内容创作和翻译工作中非常实用:
- 二次创作:从已有视频中提取字幕,作为剪辑参考或素材库,辅助快速定位和整理内容。
- 双语字幕制作:提取原文字幕后,在翻译软件或文本编辑器中逐行翻译,再封装回视频,高效制作双语字幕版本。
- 格式转换:不同字幕格式(SRT、ASS、VobSub)互转以适配不同的编辑软件和播放器。FFmpeg支持直接在提取时进行格式转换。
- 时间轴校正:提取后的字幕文件可在文本编辑器中调整时间轴偏移,解决视频重新剪辑后字幕不同步的问题,再重新封装回视频。
🧠 FFmpeg提取字幕核心知识
使用 ffmpeg -i input.mp4 查看视频文件信息时,输出中会列出所有媒体流。要找到字幕流,在输出中搜索以 Stream 开头且包含 Subtitle 的行,例如:Stream #0:2(eng): Subtitle: subrip (srt)。其中 #0:2 表示第 0 个输入文件的第 2 个流,(eng) 是语言代码,subrip (srt) 是字幕编码格式。
📌 -map 0:s:0 语法详解:
-map 0:s:0 的含义为:从输入文件 0(即第一个输入)中选择字幕类型(s)的流中索引为 0 的那个。同理,-map 0:s:1 选择第二个字幕流。-map 0:3 则是按全局流索引选择(不区分流类型),直接选择第 3 个流。
📄 字幕格式说明:
- SRT(SubRip) — 最常见的纯文本字幕格式,文件扩展名为
.srt。结构简单:序号 + 时间轴 + 文本,易于编辑和阅读。提取命令:ffmpeg -i input.mkv -map 0:s:0 subtitle.srt。 - ASS/SSA(Advanced SubStation Alpha) — 支持丰富的样式(字体、颜色、位置、动画效果),扩展名为
.ass或.ssa。适合特效字幕。提取命令:ffmpeg -i input.mkv -map 0:s:0 subtitle.ass。 - VobSub — 图形化字幕,实际为位图图像序列,包含
.idx(索引)+.sub(图像数据)两个文件。常见于 DVD 光盘。提取后需要保持成对使用。
🔧 格式转换:
FFmpeg 可以直接在不同字幕格式之间转换:ffmpeg -i input.srt output.ass。注意:从 ASS 转为 SRT 会丢失样式信息,仅保留纯文本和时间轴。
💡 实用技巧:
如果只需要复制字幕流而不重新编码,使用 -c:s copy 参数,速度极快:ffmpeg -i input.mkv -map 0:s:0 -c:s copy subtitle.srt。一次性提取多个字幕流可用 -map 0:s:0 -map 0:s:1 分别指定输出。
广告
{{v.name}}
先查看视频文件的详细信息,确认字幕流的数量、格式和语言等信息,代码如下
$ ffmpeg -i input_video.mp4
在输出信息中,注意寻找以 Stream 开头的行,特别是那些标有 Subtitle 的流
提取第一个字幕流(通常索引为 0),代码如下
$ ffmpeg -i input.mkv -map 0:s:0 subtitle.srt
提取第二个字幕流(例如是 ASS 格式),代码如下
$ ffmpeg -i input.mkv -map 0:s:1 subtitle.ass
提取特定索引的流,代码如下
$ ffmpeg -i input.mkv -map 0:3 sub.srt
一次性全部提取多个字幕流,代码如下
$ ffmpeg -i input.mkv -map 0:s:0 -c:s copy sub1.srt -map 0:s:1 -c:s copy sub2.ass
转换字幕格式,代码如下
$ ffmpeg -i input.srt output.ass