我有一个 4k mp4 视频文件,我的目标是提取单个帧。不幸的是,视频很大~10GB,并且无法无损存储所有帧(例如使用 png,每帧 12MB)。因此,我尝试直接保存 JPEG 图像。对我来说,质量比 1MB 左右的小文件大小更重要。为此,我使用了 FFMPEG,如下所示:
ffmpeg -ss 00:04:52 -i video.MP4 -qscale:v $quality -frames:v 1 output-$quality.jpg
我尝试了从 2 到 31 的整个范围的 $quality,并在图中获得了蓝色曲线(PSNR 与文件大小)
此外,我提取了帧并将其保存为 PNG,然后使用 ImageMagick 的转换功能压缩 PNG 文件,如下所示:
convert -quality $quality% frame.png output-$quality.jpg
我再次尝试了从 10 到 100 的 $quality 的全部范围,并在图中获得了橙色线(最高质量为 50dB,但使用 6MB,因此我只显示高达 2MB 的结果)。
现在,我的问题如下。为什么 ffmpeg 的质量比使用 ImageMagick 时差那么多?是否可以直接使用 ffmpeg 来提高 JPEG 帧的质量,还是我需要先通过 PNG,然后再转到 JPEG。后一种方法在某种程度上不是最优的,因为它需要存储 png,而且速度会慢得多。有什么建议吗?我猜 ffmpeg 在质量和速度之间做出取舍……
PSNR 与文件大小图