如何从MKV文件中删除音频流?

Modified on: Fri, 15 Mar 2019 12:20:02 +0800

我一直在尝试从MKV(Matroska)文件中删除不需要的音频流。我想这样做的原因是为了避免在Windows Media Player中手动选择所需的流。

输入文件提供以下ffmpeg信息:

Stream #0.0: Video: mpeg4, yuv420p, 704x396 [PAR 1:1 DAR 16:9], 29.98 tbr, 1k tbn, 29.98 tbc
Stream #0.1(eng): Audio: aac, 24000 Hz, 5.1, s16
Stream #0.2(jpn): Audio: aac, 24000 Hz, 5.1, s16
Stream #0.3(eng): Subtitle: 0x0000
Stream #0.4(eng): Subtitle: 0x0000
Stream #0.5: Attachment: 0x0000
Stream #0.6: Attachment: 0x0000

由于我想要流0,1和3(子),我的ffmpeg命令如下所示:

ffmpeg -i input.mkv -map 0:0 -map 0:1 -map 0:3 -vcodec copy -acodec libmp3lame -newsubtitle test.mkv

奇怪地给出了错误:

At least one output file must be specified

删除字幕:

ffmpeg -i input.mkv -map 0:0 -map 0:1 -vcodec copy -acodec libmp3lame test.mkv

给了我这个:

Number of stream maps must match number of output streams

我似乎并不真正了解“地图”选项的工作原理。有人会帮我搞清楚吗?

最佳答案

如果您要做的只是删除流而不是重新编码,您可能希望使用MKVtoolnix软件包(参见videohelp.com的页面)。

有几个GUI可以帮助你(查看videohelp链接)。我不确定mkvmerge命令行的确切含义,但我认为这样的方法可行:

# first, get audio track info so we know which one to keep
mkvmerge -i input.mkv
File 'input.mkv': container: Matroska
Track ID 1: video (V_MPEG4/ISO/AVC)
Track ID 2: audio (A_AAC)
Track ID 3: audio (A_AAC)        <----------- for example, let's keep this one
Track ID 4: audio (A_AAC)

mkvmerge -o output.mkv --atracks 3 input.mkv

那个应该做的伎俩(我没有方便测试的文件,对不起)。 --atracks选项告诉mkvmerge仅将列出的音轨复制到新文件中。如果你想保持2&amp; 3但不是4,你可以使用--atracks 2,3

mkvmerge还有很多其他选项可用于设置标题,添加延迟同步音频等,所以查看联构帮助页以获取详细信息。


相关问答

添加新评论