从MJPEG(YUV 4:2:2)格式视频提取帧时原视频与提取后JPG总大小不一致的原因及参数疑问
从MJPEG(YUV 4:2:2)格式视频提取帧时原视频与提取后JPG总大小不一致的原因及参数疑问
嗨,我来帮你理清楚这个问题~
首先咱们拆解下大小不一致的核心原因,再说说-q:v 2这个参数的作用:
为什么原文件和提取的JPG总大小不一样?
这里分两种常见场景来看:
- 如果你的输入文件是无压缩的YUV422P原始像素数据:
你用的inFile.yuvj422p是无压缩的原始像素格式,所有像素的颜色信息都是直接存储的,没有经过任何压缩,文件大小就是实打实的像素数据总和。而JPG本身是有损压缩格式,它会通过丢弃人眼不敏感的图像细节来减小体积——哪怕用最高质量的JPG,也存在压缩过程,所以提取后的JPG总大小必然比原始无压缩的YUV文件小,这是完全正常的。 - 如果你的输入文件是MJPEG编码的视频(已经经过JPEG压缩):
要是USB摄像头输出的是已经用MJPEG压缩过的视频,那你当前的命令ffmpeg -i inFile.yuvj422p output_%04d.jpg会让ffmpeg重新对每一帧进行JPG编码(用默认质量参数),相当于把已经压缩过的帧再压缩一次,大小肯定会变化,还可能损失画质。这种情况你应该加-c:v copy参数,直接复制原始MJPEG帧,避免重新编码。
要不要加-q:v 2?
当然可以加!在ffmpeg里,JPG的-q:v参数控制压缩质量,数值范围是2-31,数值越小,质量越高,文件体积越大。-q:v 2是libjpeg编码器支持的最高质量等级之一,能最大程度保留原始图像细节。
不过要注意:哪怕加了-q:v 2,输出的JPG总大小也不会和原始YUV文件完全相等——毕竟YUV是无压缩的原始数据,而JPG无论质量多高都是有损压缩格式,两者的存储逻辑完全不同。
备注:内容来源于stack exchange,提问作者Андрей Тернити
相关产品推荐
相关产品推荐

