我一直在尝试从 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
Run Code Online (Sandbox Code Playgroud)
由于我想要流 0、1 和 3(子),因此我的 ffmpeg 命令如下所示:
ffmpeg -i input.mkv -map 0:0 -map 0:1 -map 0:3 -vcodec copy -acodec libmp3lame -newsubtitle test.mkv
Run Code Online (Sandbox Code Playgroud)
这奇怪地给出了错误:
At least one output file must be specified
Run Code Online (Sandbox Code Playgroud)
去除字幕:
ffmpeg -i input.mkv -map 0:0 -map 0:1 -vcodec copy -acodec libmp3lame test.mkv
Run Code Online (Sandbox Code Playgroud)
给我这个:
Number of stream maps must match number of output streams
Run Code Online (Sandbox Code Playgroud)
我似乎不太明白“地图”选项是如何工作的。有人会帮我弄清楚吗?
qua*_*ote 32
如果您只想删除流,而不是重新编码,您可能想使用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 --audio-tracks 3 input.mkv
Run Code Online (Sandbox Code Playgroud)
这应该可以解决问题(抱歉,我没有方便的文件进行测试)。该--audio-tracks选项告诉仅将列出的音轨mkvmerge复制到新文件中。如果您想保留 2 & 3 而不是 4,则可以使用.--audio-tracks 2,3
mkvmerge有很多其他选项用于设置标题,添加延迟同步音频等,因此请查看联机帮助页了解详细信息。
| 归档时间: |
|
| 查看次数: |
36955 次 |
| 最近记录: |