2016-12-02 54 views
1

我这样使用的命令,比如有很多有多个音频和字幕语言文件,然而轨迹号不一致(英文音频流并不总是在前):映射流通过语言的FFmpeg

ffmpeg -i "input.mkv" -map 0 -map -0:a:1 -c:v copy -c:a copy "output.mkv" 

不会产生预期的结果。周围搜索后,我发现这是可能基于与此命令语言映射流:

ffmpeg -i "input.mkv" -map 0 -map -0:m:language:eng -c:v copy -c:a copy "output.mkv" 

然而-map -0:m:language:eng将删除所有曲目与英文标记。要保留字幕轨道,您可以使用-map 0:s,但这是一个很好的解决方案,但我想知道是否可以仅基于语言映射音频流。

回答

0

更新据我可以告诉这是消除英语音频,同时保留所有其他流的最佳方式而不使用流标识,我发现它比语言标志更不一致。通常人们使用正确的语言标志,但音频语言不太可能保持相同的ID。

ffmpeg -i "in.mkv" -map a -map -m:language:eng -map v -map s -map d? -map t -c:v copy -c:a copy "out.mkv"

命令将映射每个音频流然后取出音频与English语言标志。它会映射所有视频,字幕和附件流。如果需要,您可以添加-disposition:a:0 default以为第一个音频流提供[默认]标志。注意:仅当您删除已具有默认标志的音频时才使用。如果您想将其他音轨设置为默认值,请将-disposition:a:0更改为-disposition:a:1等等。

+0

该命令将复制视频流*和非英文字幕流。 *除非视频标记为英语,通常不会。我的解决方法避免了这一点。 – Mulvya

+0

嗯,你的解决方案不会映射附件,但你怎么做,而不使用-map 0或给每个附件流的ID?你发布的第一个解决方案是制作一个临时文件,这个过程需要更长的时间。另外,如果在删除英文流后不使用'-map 0:v',那么如果视频有英文标志,视频会不会被删除? ? – ffmpeg123

+0

保留数据和附件流的修改解决方法。你的原始目的,IIRC,是只删除英文音频流。我的解决方法可以做到这一点,并让所有其他事情都可以完成 – Mulvya

2

编辑:忽略初始回复。目前不可能。顶部使用解决方法。

ffmpeg -i "in.mkv" -map 0:a -map -0:m:language:eng -map 0:v -map 0:s -map 0:d? -map 0:t? -c copy "out.mkv" 

由于ffmpeg以给定的顺序实现了地图选项,因此达到了预期的效果。


您需要后缀的元数据选择的流类型选择即

ffmpeg.exe -i "%f" -map 0 -map -0:a:m:language:eng -c:v copy -c:a copy "../%f" 
+0

这似乎起初工作,但我遇到一些问题。我的视频有两个音轨#0英语#1日语音频是ogg vorbis,他们必须纠正语言标志。运行上面的命令只会输出带有英文音频的文件。即使我尝试改变-0:a:m:language:eng到-0:a:m:language:jpn我也会得到相同的结果。无论我做什么,它似乎只是删除第二首歌曲。 – ffmpeg123

+0

这可以工作,但不是很简单:ffmpeg -i“input,mkv”-map 0:v -map 0:s -map 0:a:m:language:jpn -c:v copy -c:副本“ output.mkv“我不明白为什么”-map 0 -map -0:a:m:language:eng“在”-map 0 -map -0:m:language:eng“时不起作用。 – ffmpeg123

+0

Acutally,我的答案和解决方法都无效。你的解决方法“有效”,因为ffmpeg正在评估'-map 0:a:m:language:jpn'为'-map 0:a:1',这在你的情况下恰好是jpn音频。目前,这不是直接可能的,但我已经用解决方法替换了我的答案。 – Mulvya

0

-0:m:language:eng将删除英文音轨并保留所有其他音轨。

只保留英文音轨并删除所有其他文件,删除开头处的短划线:0:m:language:eng 短划线开头创建一个负映射,它告诉ffmpeg“匹配此“

我知道这是8个月后,但我认为这将有助于那些最终在这里谷歌搜索像我一样。