ffmpeg-无损压缩放大的视频

ffmpeg-无损压缩放大的视频

我似乎找不到一个好的答案。我有一个视频文件,h264,1280x720,251.2 MB。

然而,视频经过了放大,实际质量为 1024x576。而且不仅仅是数字不同,实际上像素更多,我知道这一点是因为我有该分辨率的相同视频,大约 70 MB,质量相同或可以说更好。我可以使用 ffmpeg 将视频压缩回 576p 和相同大小,而不会造成质量损失吗?换句话说,我可以在不损害好像素的情况下去除多余的像素吗?

我目前得到的最佳结果是这样的: ffmpeg -i video.mp4 -vcodec libx264 -crf 23 -acodec copy -vf "scale=1024:576" output.mp4,但质量略有损失。我可以完全无损地做到这一点吗?

编辑:也许我的措辞不清楚。当然,它不能神奇地知道要删除哪些像素,但这可以计算出来,不是吗?假设我有一个 4x4 图像,由 2x2 网格中的 4 种颜色组成。现在我可以轻松地将其压缩为 2x2 图像并且完全不会丢失任何内容,我可以取相同颜色的像素并将它们组合成一个,从而减少信息量。这个过程不能用于我的升级视频吗?(以及无损压缩每一帧)。我不介意输出编解码器不同。

简而言之,我想截取每一帧,通过降低像素数量来缩小它(这不会导致任何质量损失,因为视频被放大了),然后将结果压缩为无损编解码器。有损到无损不应该导致质量损失。我不明白这有什么不可能的。

答案1

简短的回答是:不可以,你无法完全无损地做到这一点。

当视频被缩放时,会使用上采样滤波器来修改全部像素。没有“好像素”和“额外像素”之类的东西。如果您知道使用了哪个上采样过滤器,理论上可以应用逆过滤器并精确地撤消上采样。

实际上,您可能不知道哪个过滤器用于上采样,并且您用于下采样的过滤器很可能不是完全相反的。此外,对上采样视频进行编码会引入一些失真,而下采样视频中也会存在这种失真。

但是为了论证的目的,我们假设您已经获得了您想要的分辨率的下采样视频。

下一步是重新编码。你可以ffmpeg使用可以无损地完成此操作-crf 0。如果您想要“类似 zip 的东西”,那么这就是答案。

但是,生成的文件会很大。传统的视频编解码器通过有损压缩实现效率,而要求无损压缩则禁止它使用大量通常会使用的技术。

如果您想要一个较小的文件,那么您将在“有损”模式下进行一些量化/速率控制。

也就是说,如果稍微上采样的文件比原始文件大得多(以字节为单位),则表明它是用非常低的 QP 值编码的,因此上下采样可能不会造成太大损失。

相关内容