16

我尝试使用谷歌搜索一种使用 ffmpeg 设置字幕流语言的方法,并找到了 -slang 选项。所以我尝试了以下命令,但立即收到错误:

ffmpeg -i input.avi -i subs.srt -c:a copy -c:s mov_text -slang eng -c:v libx264 -profile:v high -level:v 4.0 output.mp4
ffmpeg version 1.1 Copyright (c) 2000-2013 the FFmpeg developers
built on Jul 18 2013 23:00:53 with Apple clang version 4.0 (tags/Apple/clang-421.0.60) (based on LLVM 3.1svn)

libavutil 52. 13.100 / 52. 13.100

libavcodec 54. 86.100 / 54. 86.100

libavformat 54. 59.106 / 54. 59.106

libav 设备 54. 3.102 / 54. 3.102

libavfilter 3. 32.100 / 3. 32.100

libswscale 2. 1.103 / 2. 1.103

libswresample 0. 17.102 / 0. 17.102

libpostproc 52. 2.100 / 52. 2.100

无法识别的选项“俚语”。

拆分参数列表时出错:找不到选项

经过更多谷歌搜索后,我找到了另一种使用 -metadata 命令的方法:

ffmpeg -i input.mp4 -i subs.srt -c:a copy -c:v copy -c:s mov_text -metadata:s:s:0 language=eng output.mp4

这绝对没问题。但这在 ffmpeg 手册页中没有提到,而 -slang 是,这让我认为 -metadata 命令可能已经过时或者在其他方面不如 -slang。

  1. 使用上述两种方法(-slang vs -metadata)有什么区别?
  2. 为什么我的 -slang 命令会出错?我用错了吗?
4

2 回答 2

30

选项

-元数据:s:1语言=eng

将元数据语言设置eng为流 id 1(在典型情况下是第一个音频流)。而选项

-元数据:s:s:0 语言=eng

将元数据语言设置为eng第一个字幕流。

从 ffmpeg 手册页:

-metadata[:metadata_specifier] key=value (output,per-metadata)
设置元数据键/值对。

metadata_specifier可以给出一个选项来设置流或章节的元数据。有关详细信息,请参阅“-map_metadata”文档。

s[:stream_spec]
每个流元数据。stream_spec是流说明符一章中描述的流说明符。在输入元数据说明符中,复制第一个匹配流。在输出元数据说明符中,所有匹配的流都被复制到。

最后从流说明符一章中,我们看到

流说明符的可能形式有:
stream_index
将流与该索引匹配。例如“-threads:1 4”会将第二个流的线程数设置为 4。

stream_type[:stream_index]
stream_type是以下之一:“v”表示视频,“a”表示音频,“s”表示字幕,“d”表示数据,“t”表示附件。如果stream_index给出,则匹配stream_index此类型的流号。否则匹配此类型的所有流。

于 2014-01-11T07:32:37.837 回答
9

经过一番研究,找到了 -slang 不起作用的原因。事实上,您使用的是最新版本的 ffmpeg,这是一件好事,但如果文档仍然描述了该选项,您可以在ChangeLog中找到:

version 0.9:
...
 * -metadata can now be used to set metadata on streams and chapters, e.g.
      -metadata:s:1 language=eng sets the language of the first stream to 'eng'.
      This made -vlang/-alang/-slang options redundant, so they were removed.

当您找到命令行示例时,请检查使用的选项是否在您的 ffmpeg 版本中。

 ffmpeg --help >> ffmpeg-doc.txt

-slang选项不在。

但这也证明了关于 ffmpeg 的在线文档在代码更改方面有时是不正确的。

于 2013-07-30T14:36:50.860 回答