我在使用 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
的所有流,因此即使您的原始文件有多个音频流,它也能工作。0
1
有关如何使用该map
选项的详细文章,请参阅 FFmpeg 维基。
删除这些选项的原因来自变更日志:
-newvideo/-newaudio/-newsubtitle 选项已被删除。它们不仅不规则且非常混乱,而且也是多余的。在 avconv 中,-map 选项将在输出文件中创建新的流并将输入流映射到它们。例如,avconv -i INPUT -map 0 OUTPUT 将为第一个输入文件中的每个流创建一个输出流。