FFmpeg。视频转图像

FFmpeg。视频转图像

我有视频以 USB 摄像头的 MJPEG(YUV 4:2:2)格式。

我可以从我的视频中获取所有帧这边走

ffmpeg -i inFile.yuvj422p output_%04d.jpg

视频大小为 545218B
所有 jpeg 文件大小为 313704B
为什么不等于?FFmpeg 更改质量? 我应该添加像“-q:v 2”这样的代码吗?

答案1

您正在使用的命令重新编码视频帧。
添加-c:v copy以避免重新编码。

用。。。来代替ffmpeg -f mjpeg -i input.yuvj422p output_%04d.jpg

ffmpeg -f mjpeg -i input.yuvj422p -c:v copy output_%04d.jpg

在上下文中,“重新编码”是指将每个视频帧解码为未压缩的视频帧,然后编码(压缩)为 JPEG 图像格式。JPEG
解码和编码(重新编码)的过程是“有损的”(质量会损失),输出图像与输入视频帧不同。

FFmpeg 默认行为应用重新编码(即使输入和输出都是 JPEG 格式)。
为了避免重新编码,我们可以添加-c:v copy参数,强制 FFmpeg 将输入流/帧按原样传递到输出(不进行解码和重新编码)。


测试:

构建合成 MJPEG 视频(用作测试输入):

ffmpeg -y -f lavfi -i testsrc=size=192x108:rate=1:duration=10 -vcodec mjpeg -pix_fmt yuvj422p -f mjpeg input.yuvj422p

input.yuvj422p的大小为51K。


将 MJPEG 转换为 JPEG 图像,无需-c:v copy

ffmpeg -f mjpeg -i input.yuvj422p output_%04d.jpg

10 张 JPEG 图像的总大小为 44K。


使用以下方法将 MJPEG 转换为 JPEG 图像-c:v copy

ffmpeg -f mjpeg -i input.yuvj422p -c:v copy output_%04d.jpg

10 张 JPEG 图像的总大小为 51K(与 input.yuvj422p 大小相同)。

相关内容