>我有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 0
从input.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