ffmpeg 为 MJPEG 编码生成更高质量的图像

Posted

技术标签:

【中文标题】ffmpeg 为 MJPEG 编码生成更高质量的图像【英文标题】:ffmpeg generate higher quality images for MJPEG encoding 【发布时间】:2015-11-15 20:10:13 【问题描述】:

我有一堆 mov / H.264 文件,我想将它们编码成 mov/MJPEG。但是,我得到的输出质量非常低。这是我尝试过的:

ffmpeg -i a.mov -an -crf 11 -preset slower -pix_fmt yuv420p -vcodec mjpeg -f mov -y b.mov

对于 H.264 编码,-crf-preset 标志会产生更高的质量。但这似乎不适用于 MJPEG。

【问题讨论】:

mjpeg 只是一种帧内压缩方案。它查看一帧,使用 jpeg 规范对其进行压缩,然后移动到下一帧。拥有 -crf 是没有意义的。 -crf 是帧间压缩方案的协议,该算法通过跨帧查找压缩数据速率的方法来尝试节省磁盘空间。我建议向 video.stackexchange.com 询问 ffmpeg 问题,既不是 SO 也不是 SU。 【参考方案1】:

使用-q:v 控制 (M)JPEG 质量

有效范围为2-31的线性刻度,数值越小输出质量越高。

示例

在 MOV 容器中制作 MJPEG 视频:

ffmpeg -i input.mov -c:v mjpeg -q:v 3 -an output.mov

输出一系列JPG图片:

ffmpeg -i input.mov -q:v 2 images_%04d.jpg

文件将命名为 images_0001.jpgimages_0002.jpgimages_0003.jpg 等。


私人选项

对于 H.264 编码,-crf-preset 标志会产生更高的质量。但这似乎不适用于 MJPEG。

MJPEG 编码器不使用-crf-preset;这些是 "private" options 用于某些编码器,例如 libx264、libx265 和 libvpx。你可以看到这样的私人选项:ffmpeg -h encoder=mjpeg

【讨论】:

以上是关于ffmpeg 为 MJPEG 编码生成更高质量的图像的主要内容,如果未能解决你的问题,请参考以下文章

是否可以直接在 android 上录制 MJPEG?

使用 ffmpeg 编码高质量视频 [关闭]

ffmpeg 将 rtsp 重新流式传输到 mjpeg

ffmpeg实现mjpeg摄像头的采集-预览-拍照

H264编码系列之ffmpeg和x264码率控制分析

Android开发之《ffmpeg解码mjpeg视频流》