如何使用ffmpeg从视频中提取字幕?


34

我正在尝试从视频中提取字幕作为.srt文件,我使用了以下命令:

FFMPEG -i mytestmovie.mkv -vn -an -codec:s:0.1 srt sub.srt

但是,由于“无法识别”选项出现错误,codec:s:0:1 因此,您能告诉我确切的命令以及如何将字幕提取为.srt视频中的文件吗?


umair:您能否在命令提示符下告诉我
vijay

我也有同样的问题。您得到了这个最终可以工作吗?
Maxime Labelle 2013年

Answers:


51

简单:

ffmpeg -i Movie.mkv -map 0:s:0 subs.srt
  • -i:输入文件的URL /路径。
  • -map:指定一个或多个输入流作为输出文件的源。
  • s:0:选择字幕流。

2
这对我来说带有嵌入字幕的MP4文件有用。
鲁本斯·马里努佐

11
这将下载第一个字幕轨道。如果有多个,请使用0:s:1下载第二个,0:s:2下载第三个,依此类推。
Fabien Snauwaert,2016年

5
@ jm3您会碰巧知道自动从文件中提取所有字幕流,并以其语言标识符(例如eng,fre,dut等)命名的任何方法吗?
神父

从大型MKV容器(〜4 gb)提取时为什么这么慢?
user25

要一次提取更多字幕,您必须-map为每个文件复制参数。还包括在内,-c copy以便它仅提取文件而不尝试处理它:ffmpeg -i Movie.mkv -c copy -map 0:s:0 subs.01.srt -c copy -map 0:s:1 subs.02.srt。无论如何,这将需要很长时间,因为ffmpeg必须读取整个视频文件才能找到字幕流的所有部分。
Radek Pech

8

-codec:s:0:1是不正确的。如果您使用-codec:s:0ffmpeg,则ffmpeg会将声明的编解码器用于传递到输出的第一个字幕流,如果使用-codec:s:1,则将其用于第二个字幕流,依此类推。

您也-codec:s可以选择所有输出字幕流,或者-codec:2选择第三个输出流,无论它是什么。

您可能会感到困惑,因为该-map选项的行为方式不同-在那里,您必须选择所选流来自哪个输入。(因此,-map 0:s:0将从第一个输入中提取第一个字幕流,并将其提供给输出)。但是,-map用于从输入中选择要获取的流;而其他大多数使用流映射的选项是在选择流之后在流上使用的(因此,无需指定它们来自哪个输入文件),因为它们被传递到了输出。


evilsoup:我将使用以下命令E:\ FFMpeg_Latest> ffmpeg -i E:\ Routine \ routine.mkv -vn -an -map 0:s:0 srt E:\ Routine \ sub.srt,这似乎是一个错误找不到适合“ srt”的输出格式,您能告诉我提取视频字幕的命令吗?
vijay 2013年

2
试试:ffmpeg -i E:\Routine\routine.mkv -map 0:s:0 E:\Routine\sub.srt(ffmpeg应该从输出文件名中检测到您想要srt字幕)
evilsoup 2013年

我曾经用过: ffmpeg -i film.mp4 -vn -an -codec:s srt film.srt那应该将所有字幕复制到srt文件中。
Stuart

@Stuart它不会提取所有字幕
user25

1
@evilsoup -codec:s等于,-codec:s:0因此它不会选择所有字幕...它将提取第一个文本轨道
user25
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.