为什么 ffmpeg 会增加文件大小?

为什么 ffmpeg 会增加文件大小?

我尝试以相同的格式对视频进行相同的质量编码,但输出文件比输入文件大几倍。为什么会发生这种情况?我想修复编码错误,但如果不损失质量或增加文件大小,我就无法做到这一点。如何在 Linux 终端中对 mp4 视频进行编码而不损失质量和增加大小?

我想使用该视频在我的网站上在线播放。我正在使用下面的 ffmpeg 调用

ffmpeg input.mp4 -c:v libx264 -preset placebo -crf 0 -c:a aac -movflags faststart output.mp4

PS 我将在这里添加一个错误示例。即使我到达这里,我也想了解为什么 ffmpeg 会增加我的文件。我经常遇到这种情况。这是主要问题。

[h264 @ 0x56524c25dea0] Invalid NAL unit 0, skipping.
[h264 @ 0x56524c25dea0] error while decoding MB 32 2, bytestream -7
[h264 @ 0x56524c216260] Invalid NAL unit 0, skipping.
[h264 @ 0x56524c216260] error while decoding MB 46 16, bytestream -5
[h264 @ 0x56524c25dea0] Invalid NAL unit 8, skipping.
[h264 @ 0x56524c25dea0] error while decoding MB 36 1, bytestream -13
[aac @ 0x56524c1e6ea0] Number of bands (57) exceeds limit (44).
Error while decoding stream #0:1: Invalid data found when processing input
[aac @ 0x56524c1e6ea0] channel element 3.10 is not allocated
Error while decoding stream #0:1: Invalid data found when processing input
...
[aac @ 0x56524c1e6ea0] Number of bands (48) exceeds limit (44).
Error while decoding stream #0:1: Invalid data found when processing input
[aac @ 0x56524c1e6ea0] Error decoding AAC frame header.
Error while decoding stream #0:1: Error number -50531338 occurred
[aac @ 0x56524c1e6ea0] Input buffer exhausted before END element found
Error while decoding stream #0:1: Invalid data found when processing input
[aac @ 0x56524c1e6ea0] decode_pce: Input buffer exhausted before END element found
Error while decoding stream #0:1: Invalid data found when processing input
[null @ 0x56524c1e7d20] Application provided invalid, non monotonically increasing dts to muxer in stream 1: 12351488 >= 12350464
[null @ 0x56524c1e7d20] Application provided invalid, non monotonically increasing dts to muxer in stream 1: 12351488 >= 12351488

答案1

为什么重新编码的视频比输入文件大几倍?

您正在强制编码器使用无损视频质量设置-crf 0。这会导致输出视频比输入视频大得多(假设输入视频是使用有损设置编码的)。

无损设置会极大地限制编码器的压缩能力。简而言之:大多数视频编解码器(如 x264)实现的高压缩性能都是通过有损视频编码实现的,这种编码试图保留“感知”质量,同时去除感知上无关紧要的数据。

如何对 mp4 视频进行编码而不损失质量和增加文件大小?

由于有损编码的工作方式,除非您使用无损设置,否则几乎不可能对以前有损编码的视频进行重新编码而不会造成任何质量损失,而无损设置正如您所遇到的,会增加文件大小。

相反,您可以尝试使用不同的-crf值来查看输出视频的质量/文件大小。对于有损编码,质量和文件大小之间总是存在权衡。您可以阅读编码比特率控制这里

相关内容