用ffmpeg把mkv转为mp4后体积缩小是什么原因

用ffmpeg把mkv转为mp4后体积缩小是什么原因

我将一大批 mkv 转换为 mp4(使用命令行:

for i in $(ls *.mkv); do ffmpeg -i $i ${i/mkv/mp4}; done

但也有一些

ffmpeg -i video.mkv video.mp4

结果与输入的大小不同,但我看不出任何区别(在我的视频播放器中),并且 MediInfo 确认,apsect/ratio 和编解码器相同,只有比特率较小。在大多数情况下,文件要小得多。

原因是什么?ffmpeg 是否可以在没有任何信息的情况下消除多余的比特率?

(抱歉,我的假设很幼稚)

答案1

任何时候你告诉 ffmpeg 转换没有选项的文件将要质量正在下降。

较大的差异表明 ffmpeg 选择的“标准”默认质量设置与原始设置有显著不同。它可能可能是因为 ffmpeg 使用了更好的压缩方法,以较低的比特率实现了类似的质量,但也可能意味着它只是丢弃了大量精细的细节,如果您比较源和目标的单个帧中的每个像素,您可能会看到这些细节。

即使 ffmpeg 使用质量更好的编码器选项,也至少会丢失一些“质量”或数据。

你的肉眼可能无法察觉到差异,但转码总会丢失一些数据。您正在完全解码一帧视频数据,然后重新编码。编码过程将总是由于编码器使用的近似值,会丢弃一些细节。每次重新编码文件时,都会丢弃一些数据并做出贡献代损失。

如果你想要做的只是将视频的容器从 mkv 更改为 mp4 并保留原始文件中的所有数据,那么你需要一个命令

ffmpeg -i input.mkv -vcodec copy -acodec copy output.mp4

它将完全按照原始存储的方式复制视频和音频数据,并仅更改周围的容器数据。无需重新编码,也不会丢失任何数据,只需重新排列数据以适应 mp4 格式即可。

答案2

好的,谢谢。我刚刚用几个 GOP1 编码的 mp4 做了进一步测试,结果确实被压缩了,而且传输也更困难。不过,我还是想知道这些默认压缩是什么。我不得不说,这种压缩选择还不错。

相关内容