如何使用ffmpeg从视频文件容器(.vob或.mkv)中仅删除一个轨道(不是全部)?
我知道我可以将视频(-c:v copy -an
)和特定音轨从容器复制到两个独立的文件中然后加入它们。
但有更简单的方法吗?我可以从容器中删除特定的音轨吗? ffmpeg命令?
答案 0 :(得分:29)
最有效的方法是在-map
选项中使用negative mapping排除特定流,同时保留所有其他流。
ffmpeg -i input -map 0 -map -0:a:2 -c copy output
-map 0
从输入中选择所有流。-map -0:a:2
然后取消选择音频流3.流索引从0开始计数,因此音频流10将为0:a:9
。ffmpeg -i input -map 0 -map -0:a -c copy output
-map 0
从输入中选择所有流。-map -0:a
然后从输入中取消选择所有音频流。如果要删除其他流类型,可以使用相应的stream specifier。
v
- 视频,例如-map -0:v
a
- 音频,例如-map -0:a
(如上所示)s
- 字幕,例如-map -0:s
d
- 数据,例如-map -0:d
答案 1 :(得分:3)
您正在寻找-map
。
我已更改为使用avconv
,但它应该大致相同。
我们假设您有一个名为" input.vob"一个视频和两个音轨;你想拥有" output.vob"视频和最后一个音频。
你会这样做:
avconv -i input.vob -map 0:0 -c:v copy -map 0:2 -c:a copy output.vob
你应该注意到:
-map 0:1
-an
,因为有音轨。但是,如果根本没有音轨,则可能需要使用这样的属性。您无法处理文件"就位",您需要保存到其他文件中。
P.S。您可能希望下次video.stackexchange.com询问此类问题。
答案 2 :(得分:0)
您刚刚解决了我的av1混合问题,该问题要求-map 0包含original-video.mkv中的字幕字体。
ffmpeg.exe -i original-video.mkv -i svt-av1.ivf -map 0 -map -0:v:0 -map 1:v:0 -c copy output.mkv
-map 0
选择所有内容,包括错误输入文件流中的字幕字体。 -map -0:v:0
删除所有视频。 -map 1:v:0
从第二个输入重新添加视频,它是original-video.mkv的重新编码的AV1。