FFMpeg - 将所有音频流从MKV转换为MP4



>我有MKV文件,其中包含:

Stream #0:0(eng): Video: h264 (High)
Stream #0:1(pol): Audio: ac3
Stream #0:2(eng): Audio: dts (DTS)
Stream #0:3(pol): Subtitle: subrip
Stream #0:4(eng): Subtitle:  hdmv_pgs_subtitle

我想省略字幕(-sn选项(,复制视频并将音频流编码为 AAC。

我尝试了几种不同的命令,输出文件总是相同的(2 个音频流,但来自第一个音频流的两个声音(。

以下是我的命令:

ffmpeg -i input.mkv -sn -map 0:a? -map 0:v -c:v copy -c:a? aac output.mp4 
ffmpeg -i input.mkv -sn -map 0 -c:v copy -c:a aac output.mp4 
ffmpeg -i input.mkv -sn -map 0:? -c:v copy -c:a aac output.mp4

一切几乎都可以正常工作,但在输出文件中,我有 2 个名称为 (pol( 和 (eng( 的音频流,但两者都是来自 (pol( stream0:1 的声音。

我应该使用什么命令来转换音频流以实现两个音频流,其中将是 pol 和 eng 声音(在它们中都不是 pol(。有时输入文件只有 1 个音频流,所以命令行应该是通用的,我想 ffmpeg 映射与?字符。

如果 MKV 文件中的流与 MP4 兼容

您可以使用流复制模式 ( -c copy ( 进行复用。这样可以避免重新编码。

ffmpeg -i input.mkv -map 0 -c copy output.mp4
  • -map 0input.mkv输入 #0 中选择所有流(请注意,ffmpeg从 0 开始计数(。否则,将使用默认流选择行为,该行为将为每个流类型选择一个流。

  • ffmpeg会告诉您流是否与输出容器格式不兼容,并显示错误消息:codec not currently supported in container .

  • 目前最典型的兼容格式是:H.264视频,H.265/HEVC视频和AAC音频。

排除不兼容的流

您可以使用负映射。包含除字幕以外的所有内容的示例:

ffmpeg -i input.mkv -map 0 -map -0:s -c copy output.mp4

有关详细信息,请参阅-map选项文档。

重新编码不兼容的流

此示例流复制除转换为 AAC 的音频之外的所有内容:

ffmpeg -i input.mkv -map 0 -c copy -c:a aac output.mp4

最新更新