使用ffmpeg设置字幕语言

时间:2013-07-29 15:35:32

标签: ffmpeg subtitle

我尝试使用gofling方法设置字幕流的语言,使用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

     

libavdevice 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. 之间有什么区别?
  3. 为什么我的-slang命令会出错?我使用不正确吗?

2 个答案:

答案 0 :(得分:9)

选项

  

-metadata:s:1 language = eng

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

-metadata:s:s:0 language = eng
将元数据语言设置为eng 第一个字幕流。

来自ffmpeg手册页:

-metadata [:metadata_specifier] key = value(输出,每元数据)            设置元数据键/值对。  可以给出可选的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            number此类型的stream_index。否则匹配此类型的所有流。

答案 1 :(得分:4)

经过一番研究,发现-slang无效的原因。事实上你使用的是ffmpeg的最新版本,这是一件好事,但如果the documentation仍然描述该选项,你可以在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的在线文档有时会对代码更改不正确。