如何在 Windows 上将 MKV 视频转换为与 iOS 设备兼容的无损 MP4 视频?

如何在 Windows 上将 MKV 视频转换为与 iOS 设备兼容的无损 MP4 视频?

我是 FFmpeg(Windows)的新手,需要一些帮助。

我想将我的 MKV 转换为 MP4,同时尽可能减少质量损失。MKV 是用 MakeMKV 制作的,其中包括 DTS 音轨。它们是无损的。我想转换的原因是,我计划将其流式传输到 iPad 和 Apple TV。iPad 不支持 DTS 和 MKV。MKV 既是 DVD 也是蓝光。MKV 包含视频、音轨和字幕。

我尝试过这个,但由于 DTS 音轨而没有声音:

ffmpeg -i input.mkv -c:v copy -c:a copy output.mp4

有谁能够帮助我?

我应该使用什么编解码器?MP4 最适合 Apple?

答案1

MP4 确实是 Apple 设备和软件的最佳格式。DTS 也确实不受支持,许多 MP4 视频文件包含两个音轨,一个 DTS 和一个 AAC。

有多个编码器可用,它们都记录在ffmpeg 维基. 哪个编解码器可用取决于 ffmpeg 的编译方式。libfdk_aac将会给你最好的结果,但由于这个编解码器是非免费的,所以它并不总是可用的。

你可以尝试的东西(我按照我认为的质量排序,最好的排在第一位)

ffmpeg -i input.mkv -c:v copy -c:a libfdk_aac -b:a 128k output.mp4
ffmpeg -i input.mkv -strict experimental -c:v copy -c:a aac -b:a 192k output.mp4
ffmpeg -i input.mkv -c:v copy -c:a libfaac -b:a 192k output.mp4

如果您还想保留 DTS 音轨,请使用-map旗帜。

不直接用于 OP,但用于 OS X 程序苏伯勒使得这个过程变得非常容易。

编辑:评论 tl;dr?OP 使用以下命令解决了问题

ffmpeg -i input.mkv -strict experimental -map 0:0 -map 0:1 -map 0:2 -map 0:3 -c:v copy -c:a aac -b:a 384 -c:s copy output.mp4

提示:如果-c:s copy字幕不起作用,请尝试-c:s mov_text
多次拯救了我。

答案2

我知道这是一个老问题 - 而且已经有答案了 - 但我想分享一些我在 macOS 上使用 FFmpeg 的命令。

来自 MKV 的 x264 视频编码 MP4 和 AAC 音频

对包含 MP4 的 MKV 进行基本转换,但将音频转换为 128k 的 AAC。请注意映射:-map 0:0表示0来自源输入 ( 0) 的第一个 ( ) 音轨,表示来自相同源输入 ( ) 的-map 0:1第二个 ( ) 音轨。我喜欢在有多个音轨的情况下这样做,这样我就可以执行诸如选择之类的操作来获取第三个音轨。10-map 0:3

ffmpeg -i input.mkv \
       -c:v copy \
       -c:a aac -b:a 128k \
       -map 0:0 -map 0:1 \
       output.mp4 \
       ;

来自 MKV 的 HEVC/x265 视频编码 MP4 和 AAC 音频

这类似于上面的 x264 命令,但使用 HEVC/x265 来获得更小的文件大小,同时保持与源 MKV 相同的(如果不是更好的)视频质量。请注意,使用 HEVC/x265 时,我更喜欢将 iOS 视频缩放到 720;在我的 MacBook、iPad 和 iPhone 上,播放质量很好,没有太多噪音。只需确保您的硬件和操作系统支持 HEVC/x265 播放。并提前警告:HEVC/x265 非常耗费 CPU,因此如果您的机器没有很多 CPU 能力,则可能需要一天左右的时间才能编码 90 分钟的视频。

ffmpeg -i input.mkv \
       -vf scale=-1:720 \
       -c:v libx265 -crf 20 \
       -c:a aac -b:a 128k \
       -threads 4 \
       -tag:v hvc1 \
       -map 0:0 -map 0:1 \
       output.mp4 \
       ;

以下是除输入和输出文件之外的每个核心参数的细目分类。

  • -vf scale=-1:720:将视频缩放至 720 高度并自动计算宽度。请注意,FFmpeg 可能会阻塞一些由于我不是 100% 清楚的原因,MKV 必须明确设置宽度,如下所示:-vf scale=1280:720。试验一下,看看哪种方法适合您。
  • -c:v libx265 -crf 20libx265是视频编码编解码器。-crf 20CRF(恒定速率因子)。如果您不指定,默认 CRF 为 28,但 — 截至目前 — 发现质量相当……嗯。我更喜欢 20,因为它在质量和文件大小之间实现了非常好的平衡。
  • -threads 4:我喜欢指定线程数。我的系统现在可以处理 4 个线程,但有时我会将其降低到 2 个或 3 个。如果您有足够的 CPU 来处理,则数字越大速度越快。
  • -tag:v hvc1:为 iOS 设备正确播放 HEVC/x265 视频而设置的神奇元数据。

就是这样!

相关内容