我尝试使用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。
答案 0 :(得分:9)
选项
将元数据语言设置为引入流id 1(在典型情况下,是第一个音频) 流)。而选项-metadata:s:1 language = eng
-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的在线文档有时会对代码更改不正确。