如何从MKV文件中剥离音频流?


16

我一直在尝试从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

我似乎不太了解“地图”选项的工作原理。有人可以帮我解决吗?

Answers:


25

如果您要做的只是删除流,而不是重新编码,则可能要使用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和3而不是4,则可以使用。--atracks 2,3

mkvmerge还有很多其他选项可用于设置标题,增加音频同步延迟等,因此请查看手册页以获取详细信息。


5
看来--atracksoption不再存在,而是应该使用--audio-tracks--video-tracks
malat 2015年

0

尝试-f强制指定格式:

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

这奇怪地给了我错误:“必须指定至少一个输出文件”
StackedCrooked

尝试使用完整路径,即:C:\ path \ to \ output.mkv(我假设媒体播放器引用是您在Windows上)
John T

@John T:使用完整路径(带或不带引号)仍然会显示“至少必须指定一个输出文件”错误消息。
StackedCrooked

0

这里确实有两个独立的问题:

  1. 在第一个命令行中,参数的顺序可能不正确。我认为-newaudio切换必须在输出文件名之后放在末尾。

  2. 第二个命令行“删除字幕”,因为输入文件包含字幕,所以您需要使用-sn开关将其删除。否则,似乎FFmpeg希望在-map列表中至少指定一个。


0

在第一个命令中,您没有指定test.mkv是您的输出文件。看来您需要将该部分更改为... -c copy test.mkv或指定类似的编解码器... -c:s copy test.mkv

而且不确定那个-newsubtitle标志在做什么。但是,如果您有要添加的字幕文件,则应该能够执行另一个输入标记-i input.srt。看到这个链接

在您的第二个命令中,我认为您似乎正在尝试映射视频流并尝试复制它。因此,您可能想尝试删除该-vcodec copy指令,它应该可以正常工作。:)


1
没有l 流说明符
llogan 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.