如何将 MKV 转换为 MP4(尽可能不重新编码)
MKV 和 MP4 之间到底有什么不同?
让我们澄清一下:MKV(Matroska Video)和 MP4 都只是容器格式。把它们想象成数字盒子,就像一个压缩文件,里面装着视频流、音频流、字幕和章节标记。这些盒子里的视频和音频数据通常是相同的。你在线找到的典型 MKV 文件可能包含 H.264 或 H.265 视频和 AAC 或 AC3 音频。猜猜标准的 MP4 文件用什么?就是这些完全相同的编解码器。 这就是为什么“将 MKV 转换为 MP4”这个说法通常是不准确的。对于许多文件来说,你并没有在转换任何东西;你是在混流。混流是将流从 MKV 容器中取出,然后放入新的 MP4 容器,而不触及实际编码数据的过程。这意味着视频质量逐比特完全相同,并且这个过程快如闪电。它只需几秒钟,而不是几分钟,因为你的 CPU 不需要被迫重新编码数千兆字节的视频。 当然,事情并非总是那么简单。当 MKV 包含 MP4 不原生支持的音频格式时,比如 TrueHD、DTS-HD MA 或 FLAC,这个过程就会变得复杂。在这种情况下,音频轨道必须重新编码,通常转换为广泛兼容的 AAC 或 AC3 格式。视频流本身仍然可以无损混流,而只有音频被转码。只有在视频编解码器本身不兼容的极少数情况下,才需要进行完整且耗时的视频重新编码。
转换前检查你的 MKV 文件
不要盲目地开始转换。花 30 秒时间识别你的 MKV 文件里有什么。这个检查会告诉你到底需要哪种转换,并帮助你避免在失败的尝试上浪费时间。 在 Windows 上,右键点击文件查看“属性”可以获得时长和文件大小等基本信息,但没有关键的编解码器详情。为此,你需要一个合适的工具。我推荐 MediaInfo(它是免费开源的)。用 MediaInfo 打开你的 MKV 文件,然后切换到“树状视图”。你会看到清晰的细目分类,例如:视频 — 格式:AVC (H.264),配置文件:High@L4.1,比特率:8 500 kb/s。音频 — 格式:AC-3,声道:6,比特率:640 kb/s。 这个例子是快速混流的完美候选者。H.264 视频和 AC3 音频都可以直接放入 MP4 容器,无需任何重新编码。与此形成对比的是,如果一个文件显示:音频 — 格式:MLP FBA (TrueHD),声道:8。由于 MP4 容器不支持 TrueHD,你立刻就知道音频轨道将需要转码。 另外,还要密切关注字幕。MKV 格式灵活,支持基于图像的字幕(PGS/VOBSUB)和基于文本的字幕(ASS/SRT)。然而,MP4 的支持要有限得多(TX3G/SRT)。如果你的 MKV 使用 PGS 字幕,它们无法转移到 MP4 容器中。它们要么被丢弃,要么你必须将它们永久烧录到视频中,这需要进行完整重新编码。提前了解这一点可以避免在 20 分钟转换后遇到不愉快的意外。
使用 CocoConvert 进行快速的浏览器内转换
如果你的 MKV 文件是标准的 H.264/H.265 视频和 AAC/AC3 音频,那么 CocoConvert 的 [MKV 到 MP4 转换器](/convert/mkv-to-mp4) 是最省力的方法。只需上传你的文件,然后选择 MP4 作为输出格式。该服务足够智能,能够检测到流何时兼容,并将执行快速混流而不是缓慢转码。一个 4 GB 的文件可以在一分钟内准备好,主要取决于你的上传速度。 当文件包含不兼容的音频(如 FLAC、DTS 或 TrueHD)时,CocoConvert 会优雅地处理它。它会自动将音频轨道重新编码为兼容的 AAC 格式——通常立体声为 192 kb/s,5.1 环绕声为 384 kb/s——同时保持视频流不变。这些是适用于几乎所有播放场景(从智能电视到视频分享平台)的可靠默认设置。 当然也有一些实际限制。CocoConvert 的免费套餐有 2 GB 的文件大小上限,而付费套餐则高达 8 GB。这不适用于 50 GB 的蓝光混流,后者需要像我们接下来要介绍的本地工具。此外,该服务目前会丢弃 PGS 字幕轨道,而不是将其烧录进去,因为烧录会强制进行完整的视频重新编码,并极大地拖慢速度。如果你需要这些字幕,请务必在删除原始 MKV 之前检查你的输出文件。 对于大多数日常文件——一集电视剧、一部小于 8 GB 的电影,或者别人发给你的片段——基于浏览器的方案是获得普遍可播放 MP4 的最快方式,无需安装任何软件。
使用 FFmpeg 在本地完成(免费,无文件大小限制)
FFmpeg 是为无数视频应用提供动力的引擎,直接使用它可以让你获得终极控制。不要让命令行吓到你;对于这项具体任务,命令简短、强大且易于记忆。说实话,它通常比点击十几个图形界面窗口更快。 对于纯粹、无损的混流,不重新编码任何内容,神奇的命令是: `ffmpeg -i input.mkv -c copy output.mp4` 其中的 `-c copy` 部分告诉 FFmpeg 复制所有流——视频、音频、字幕——而不进行任何修改。在任何现代计算机上,这几乎是瞬间完成的。唯一的缺点是,如果你的音频格式是 MP4 无法处理的(比如 TrueHD 或 FLAC),FFmpeg 会报错并停止。如果发生这种情况,你只需要告诉它只重新编码音频: `ffmpeg -i input.mkv -c:v copy -c:a aac -b:a 384k output.mp4` 这里,`-c:v copy` 无损混流视频,而 `-c:a aac -b:a 384k` 将音频重新编码为高品质 AAC,比特率为 384 kb/s,这非常适合 5.1 环绕声。对于立体声,192k 就足够了。 如果你有多个音轨,并且只想要第一个,在输出文件名之前添加 `-map 0:v:0 -map 0:a:0`。如果要保留所有音轨,使用 `-map 0:v -map 0:a`。对于字幕,基于文本的 SRT 可以通过 `-c:s mov_text` 包含进去。然而,基于图像的 PGS 字幕无法放入 MP4 中;你必须使用 `-map -0:s` 排除它们以防止报错。 FFmpeg 无处不在。在 macOS 上,用 Homebrew 安装它:`brew install ffmpeg`。在 Windows 上,从 ffmpeg.org 下载静态构建版本并将其添加到你的 PATH 中。在一台不错的笔记本电脑上,使用 `-c copy` 进行 10 GB 的混流应该不到 30 秒。
何时需要重新编码(以及预期结果)
我们要明确一点:尽可能避免完整的视频重新编码。但在少数情况下,这是不可避免的:视频编解码器老旧或不受支持(例如来自 DVD 的 MPEG-2),你绝对必须减小文件大小,或者你正在针对一个挑剔的设备。例如,一些旧款三星电视对 H.265 配置文件级别就非常挑剔。 重新编码总是意味着质量、文件大小和时间之间的权衡。一部 2 小时的 H.264 电影以较低比特率重新编码为 H.264,看起来会比原版稍微模糊一些;具体差多少取决于你对压缩的激进程度。使用更新的 H.265 编解码器可以以 H.264 大约一半的文件大小提供相似的视觉质量,但编码过程要漫长得多。我们说的是在标准 CPU 上需要 3–8 倍的实时时间,这意味着一部 2 小时的电影可能会占用你的机器 6–16 小时。GPU 编码(NVENC、VideoToolbox)要快得多,但在给定比特率下,通常会产生略低的质量。 在 FFmpeg 中,一个可靠的 H.264 重新编码命令如下: `ffmpeg -i input.mkv -c:v libx264 -crf 18 -preset slow -c:a aac -b:a 192k output.mp4` 对于 `-crf` 值,18 在视觉上几乎与源文件相同。默认值是 23,这是一个很好的平衡,并且文件明显更小。如果提高到 28,就会出现明显的模糊。`-preset slow` 标志告诉 FFmpeg 更努力地提高压缩效率,但会牺牲时间。对于归档,`veryslow` 甚至更好。 但是,如果你的唯一目标是在不支持 MKV 的设备上播放文件,那么重新编码通常是错误的第一个步骤。只需在该设备上安装 VLC 或 Infuse 即可。它更快、更容易,并且保留了原始质量。
常见问题及解决方法
任何做过几次这种事的人都知道事情可能会出错。以下是将 MKV 转换为 MP4 时最常见的问题以及它们的解决方法。 **音频不同步漂移:** 这是一个经典问题,音频开始时同步,但逐渐与视频不同步。这通常发生在混流使用可变帧率(VFR)的 MKV 文件时,这在屏幕录制中很常见。解决方法是向你的 FFmpeg 命令添加 `-vsync cfr` 以强制恒定帧率,尽管这确实涉及对视频时间进行轻微的重新编码。CocoConvert 中的混流引擎在检测到 VFR 内容时会自动应用同步校正。 **转换后音频丢失:** 你的新 MP4 有视频但完全静音。这几乎总是因为原始音频编解码器不受 MP4 容器支持而被简单地丢弃了。重新运行你的转换,但这次明确地使用 `-c:a aac -b:a 192k` 编码音频。 **文件无法在 iPhone 或 iPad 上播放:** 苹果设备要求严格。它们需要 H.264 Baseline/Main/High profile up to Level 5.1,或 H.265 Main profile。使用 MediaInfo 检查视频配置文件。如果你的文件是 High@L5.2 或更高,或者它是 H.265 Main 10(HDR 内容常见),你可能需要重新编码以使其兼容。HDR 到 SDR 的转换是完全不同的难题,需要色调映射。 **输出文件比输入文件大:** 经过简单的混流后,文件大小应该与原始文件相差 1-2% 以内。如果它大幅度增大,你几乎可以肯定是不小心重新编码了某些内容。仔细检查你是否对视频使用了 `-c copy`。 **章节和元数据消失:** FFmpeg 的 `-c copy` 命令非常擅长保留章节,但许多在线工具会将其删除。如果章节标记很重要,请使用 VLC 的“播放 > 章节”菜单在你的输出文件中验证它们。
根据你的情况选择正确的方法
那么,哪种方法最好呢?这确实归结为你的文件和你的需求。 **对于最快、最简单的转换:** 如果你的文件小于 8 GB 并且具有标准视频/音频轨道(H.264/H.265 视频和 AAC/AC3 音频),请使用 CocoConvert 的 [MKV 到 MP4 工具](/convert/mkv-to-mp4)。你上传文件,服务会进行快速混流,然后你下载一个完美的 MP4。无需软件,无需命令,省心省力。输出质量将与源文件相同。 **对于高级用户和大型文件:** 如果你的文件超过 8 GB,你正在转换一整季的节目,或者你需要对轨道进行精确控制,那么带 `-c copy` 的 FFmpeg 是你最好的朋友。它是免费的,没有文件大小限制,而且混流命令非常简单,你可以轻松地在脚本中自动化它们。 **当你必须重新编码时:** 对于真正不兼容的源材料(例如旧 DVD 翻录)或者当你绝对需要缩小文件时,你必须计划进行重新编码。为此,我推荐 HandBrake。它为 FFmpeg 的强大功能提供了图形界面。只需打开你的 MKV,在“摘要”标签页上选择 MP4 容器,然后选择一个质量预设,例如 `H.264 MKV 2160p60`(根据你的分辨率进行调整),并调整质量滑块。HandBrake 还可以轻松管理音轨和烧录字幕。 最后一条建议,源于经验:始终保留你的原始 MKV 文件,直到你仔细检查了输出的 MP4 文件。混流快速且无损,但如果出现问题——例如音轨丢失、同步问题——你会很高兴拥有源文件,可以尝试使用不同的设置重新来过。硬盘空间便宜;你的时间宝贵。