ffmpeg 将 mov 转换为 mp4 而不降低比特率

con*_*449 6 compression video ffmpeg codec

我正在尝试将 mov 视频转换为 mp4,但我不希望发生任何压缩。我在 Mac 上用 Quicktime 录制了它,并以最高的未压缩质量录制。当我跑步时ffmpeg -i。我得到:

    Stream #0:0(und): Video: prores (apcn / 0x6E637061), yuv422p10le(bt709), 1280x720, 72073 kb/s, 30.09 fps, 30 tbr, 30k tbn, 30k tbc (default)

Run Code Online (Sandbox Code Playgroud)

请注意,kb/s 为 72,073。我想保留这个比特率。

我尝试了一些不同的转换命令,包括:

ffmpeg -i input.mov output.mp4
Run Code Online (Sandbox Code Playgroud)

和:

ffmpeg -i input.mov -qscale 0 output.mp4

Run Code Online (Sandbox Code Playgroud)

两者都有效,但都会导致比特率损失。查看有关两者结果的信息

    Stream #0:0(und): Video: h264 (High 4:2:2) (avc1 / 0x31637661), yuv422p, 1280x720, 4569 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
Run Code Online (Sandbox Code Playgroud)

如何转换为 mp4 并且仍然具有 ~72,000 kb/s?这可能吗?

llo*_*gan 17

您正在将苹果与橙子进行比较。ProRes和H.264是两种完全不同的格式,因此比较比特率没有意义。你真正想问的是...

如何在不损失质量的情况下将 ProRes 转换为 H.264 (MP4)?

只需使用 设定质量即可-crf。的值0是无损的,18看起来无损,但实际上并非如此。

视觉无损

ffmpeg -i input.mov -crf 18 output.mp4
Run Code Online (Sandbox Code Playgroud)

无损

输出文件将会很大,你的玩家可能不喜欢它。

ffmpeg -i input.mov -crf 0 output.mp4
Run Code Online (Sandbox Code Playgroud)

兼容性

如果您需要输出可在基于非 FFmpeg 的播放器中播放,请添加-vf format=yuv420p

ffmpeg -i input.mov -crf 18 -vf format=yuv420p output.mp4
Run Code Online (Sandbox Code Playgroud)
  • 您可能会注意到颜色保真度略有下降,但这是广泛兼容性所必需的。
  • -vf format=yuv420p如果您要上传到 YouTube,则可以省略。

流复制

ProRes 与 MP4 不兼容,因此您不能仅进行流复制(如复制和粘贴)。然而,对于那些发现这个问题的人,以及那些具有兼容格式,并且只想将容器从 MOV 更改为 MP4 的人:

ffmpeg -i input.mov -c copy output.mp4
Run Code Online (Sandbox Code Playgroud)

另请参阅