仅使用ffmpeg转换特定的视频和音频轨道


26

我有一个MKV文件(vidui.mkv),其中有6条音轨。

Track 1 - video - xvid - 1920x1080
Track 2 - video - xvid - 720x576
Track 3 - audio -  AAC - 1240kbps - English
Track 4 - audio -  AAC - 648kbps - Spanish
Track 5 - audio -  AAC - 648kbps - Commentary 1
Track 6 - audio -  AAC - 648kbps - Commentary 2

我想将以上文件转换为带有一个h264视频和一个AC3音频的mp4格式。我也想转换音轨1(视频)和音轨5(音频)。

如果我用

ffmpeg.exe -i vidui.mkv -f mp4 -vcodec libx264 -acodec ac3 -crf 20 -sn -n vidui.mp4

它会转换第一个视频轨道和第一个音频轨道,但是我要执行的是转换轨道1和轨道5。

Answers:


43

您可以使用-map选项完整文档)选择特定的输入流并将其映射到您的输出。

map您可以使用的最简单的语法是-map i:s,其中i是输入文件ID和s流ID,均以开头0。在您的情况下,这意味着我们选择track 04

ffmpeg -i vidui.mkv -c:v libx264 -c:a ac3 -crf 20 -map 0:0 -map 0:4 vidui.mp4

如果要专门选择视频,音频或字幕轨道,还可以使用流说明符

ffmpeg -i vidui.mkv -c:v libx264 -c:a ac3 -crf 20 -map 0:v:0 -map 0:a:1 vidui.mp4

在这里,0:v:0是第一视频流,0:a:1是第二音频流。


有没有办法动态地做到这一点?假设我只想对X语言的音轨执行此操作,而ffmpeg可以接听吗?
Freedo

@Freedo是的,请参阅文档。例如-map 0:m:language:eng
slhck
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.