我尝试搜索一种使用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)利巴武汀5213.100 / 52。13.100 libavcodec 5486.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 样本0。17.102 / 0。17.102 libpostproc 522.100 / 52。2.100 未被认可的选项‘俚语’。 分裂参数列表时出错:选项未找到
在进行了更多的googling搜索之后,我找到了另一种使用-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那么好。
发布于 2013-07-30 14:36:50
经过一些研究,找到了-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的在线文档在代码更改方面有时是不正确的。
发布于 2014-01-11 07:32:37
选择
-metadata:s:1 language=eng
在流id 1上将元数据语言设置为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_index。否则,将匹配此类型的所有流。
https://stackoverflow.com/questions/17928192
复制相似问题