使用 FFMPEG 为 M4v 视频文件添加字幕

Yuv*_*hen 6 video ffmpeg subtitles

我在使用 ffmpeg 为视频文件添加字幕时遇到了麻烦。

我正在使用这个命令:

ffmpeg -i movie_input.m4v -newsubtitle subtitles.srt -acodec copy -vcodec copy movie_output.m4v
Run Code Online (Sandbox Code Playgroud)

我在各种教程中找到了这个命令行示例,但由于某种原因(较新版本的 ffmpeg?),它给了我:

Unrecognized option 'newsubtitle'
Run Code Online (Sandbox Code Playgroud)

关于如何使用 ffmpeg 添加字幕的任何线索?

谢谢!

PS 我需要一个可以在 bash 脚本中自动化的解决方案,所以使用像 Subler 这样的程序不适合这个任务。

evi*_*oup 10

-newsubtitle是旧版本 ffmpeg 的过时选项;对于更现代的版本,命令将如下所示:

ffmpeg -i input.m4v -i subtitle.srt -map 0 -map 1 -c copy -c:s mov_text output.m4v
Run Code Online (Sandbox Code Playgroud)

-i input.m4v -i subtitle.srt 告诉 ffmpeg 使用这两个文件作为其输入。

-map 0 -map 1 告诉 ffmpeg 使用来自输入编号 0 和输入编号 1 的所有流。

它与此没有直接关系,但您可以选择单个流-map-map 0:v从输入 0 中选择所有视频流,-map 1:s从输入 1 中选择所有字幕流,从输入-map 0:00 中选择流 0(第一个流),-map 1:a:0将选择第一个输入 1 的音频流。

-c copy告诉FFmpeg所有流从而不重新编码输入进行复制,而具有-c:s mov_text -c copy,重新编码覆盖的字幕流复印设定它到表单MP4容器可以包含。


slh*_*hck 6

在 FFmpeg 0.9 中,该-newsubtitle选项已被删除。如果要将所有输入文件的视频/音频/字幕流添加到输出,请使用以下-map选项,例如:

ffmpeg -i movie_input.m4v -i subtitles.srt -c:v copy -c:a copy -c:s mov_text \
-map 0 -map 1 out.m4v
Run Code Online (Sandbox Code Playgroud)

这将复制视频和音频流,但将字幕编码为mov_text,这是 MP4 唯一官方支持的字幕格式。默认情况下 SRT 不起作用。

map此处的选项指定将复制第一个文件 ( 0) 和第二个文件 ( 1)中的所有流,因此即使您的原始文件有多个音频流,它也能正常工作。

有关如何使用该map选项的详细文章,请参阅 FFmpeg wiki

从变更日志中删除这些选项的原因:

-newvideo/-newaudio/-newsubtitle 选项被删除。它们不仅不规则且高度混乱,而且是多余的。在 avconv 中,-map 选项将在输出文件中创建新流并将输入流映射到它们。例如 avconv -i INPUT -map 0 OUTPUT 将为第一个输入文件中的每个流创建一个输出流。