Dav*_*log 5 audio video metadata ffmpeg
我的磁盘上有一堆 avi 格式的电影。但是,它们不包含任何元数据,如标题等。
我找到了一个可以为我做的命令:
ffmpeg -i input.avi -metadata title="Moonshine" -metadata author="Moonshine" -metadata copyright="2009" -metadata comment="foo" -acodec copy -vcodec copy output.avi
Run Code Online (Sandbox Code Playgroud)
这工作正常,但它只会复制一个音轨。我的文件包含多个音轨。我希望 ffmpeg 复制所有内容并只给文件一个标题。
另外,有没有办法给音轨一个语言名称?例如,一个文件包含 2 个音轨。第一个是英语,第二个是俄语。如何正确命名它们,以便当我使用视频播放器时,它会在语言菜单中显示第一个是英语,第二个是俄语?
默认流选择行为是为每个输入选择一种流类型。例如,在您的输入中,如果它包含两个音频流,则只会选择通道数最多的流。
您可以ffmpeg
使用该-map
选项告诉包含所有流。
由于该-map
选项从 开始计数0
,因此0
本示例中的 指的是第一个输入(input.avi
在这种情况下是您唯一的输入)。如果您有其他输入,-map 1
则将参考第二个输入。
要设置第一个和第二个音频流的语言,请使用-metadata
带有流说明符的选项:
ffmpeg -i input.avi -map 0 -codec copy -metadata:s:a:0 language=eng -metadata:s:a:1 language=rus output.avi
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅文档。
小智 5
我花了很长时间才弄清楚这一点。我在这里发布它,因为即使在 3 年后这个线程也是谷歌搜索中的第一个热门话题之一:AVI(更具体地说:RIFF)确实支持语言名称,但与 mkv 相反,元数据没有存储在流中,但是在标头中使用标签 IAS1-9 最多可用于 9 个不同的音频流。
ffmpeg -i input.avi -map 0 -codec copy -metadata IAS1=eng -metadata IAS2=ger output.avi
Run Code Online (Sandbox Code Playgroud)
VLC 非常宽容。如果您输入 ISO 代码“ger”,VLC 会将其转换为“Deutsch”,如果您输入“MyLang”,VLC 将显示“MyLang”。Kodi 等其他软件需要正确的 ISO 代码。它只会读取“MyL”,然后将语言显示为未知。
但是,请注意 ffmpeg 不仅会添加语言,还会更改其他元数据。例如,output.avi 中的音频交错和预加载数据是不同的,不知道这是否好或可能导致音频不同步。请与 MediaInfo 或类似机构核对。
归档时间: |
|
查看次数: |
11889 次 |
最近记录: |