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

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

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

我正在使用这个命令:

ffmpeg -i movie_input.m4v -newsubtitle subtitles.srt -acodec copy -vcodec copy movie_output.m4v

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

Unrecognized option 'newsubtitle'

关于如何使用 ffmpeg 添加字幕有什么线索吗?

谢谢!

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

答案1

-newsubtitle是旧版本 ffmpeg 的一个过时选项;在更现代的版本中,该命令将如下所示:

ffmpeg -i input.m4v -i subtitle.srt -map 0 -map 1 -c copy -c:s mov_text output.m4v

-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:0将从输入 0 中选择流 0(第一个流),-map 1:a:0将从输入 1 中选择第一个音频流。

-c copy告诉 ffmpeg 从输入中复制所有流而不重新编码,同时-c:s mov_text 覆盖-c copy字幕流的复制设置,将其重新编码为 MP4 容器可以包含的形式。

答案2

从 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

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

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

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

删除这些选项的原因来自变更日志

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

相关内容