如何使用ffmpeg从视频文件中删除一个曲目?

时间:2016-07-02 15:28:45

标签: video ffmpeg

如何使用ffmpeg从视频文件容器(.vob或.mkv)中仅删除一个轨道(不是全部)?

我知道我可以将视频(-c:v copy -an)和特定音轨从容器复制到两个独立的文件中然后加入它们。

但有更简单的方法吗?我可以从容器中删除特定的音轨吗? ffmpeg命令?

3 个答案:

答案 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

你应该注意到:

  1. 我没有复制-map 0:1
  2. 我不需要-an,因为有音轨。但是,如果根本没有音轨,则可能需要使用这样的属性。
  3. 有时,流没有以我所描述的方式编号,例如音频可以在视频之前出现。
  4. 如果那里有字幕流,你需要弄清楚如何处理它们。
  5. 您无法处理文件"就位",您需要保存到其他文件中。

    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。