ffmpeg - RTP/MJPEG 流的默认量化表是什么?

标签 ffmpeg video-streaming jpeg rtp mjpeg

我在从 ip-camera 解码 RTP/MJPEG 流时遇到了问题。

如 rfc2435 所述,量化表(对于 Q 值 1 <= Q <= 99)应根据这些默认表计算:

/*
* Table K.1 from JPEG spec.
*/
static const int jpeg_luma_quantizer[64] = {
    16, 11, 10, 16, 24, 40, 51, 61,
    12, 12, 14, 19, 26, 58, 60, 55,
    14, 13, 16, 24, 40, 57, 69, 56,
    14, 17, 22, 29, 51, 87, 80, 62,
    18, 22, 37, 56, 68, 109, 103, 77,
    24, 35, 55, 64, 81, 104, 113, 92,
    49, 64, 78, 87, 103, 121, 120, 101,
    72, 92, 95, 98, 112, 100, 103, 99
};

/*
 * Table K.2 from JPEG spec.
 */
static const int jpeg_chroma_quantizer[64] = {
    17, 18, 24, 47, 99, 99, 99, 99,
    18, 21, 26, 66, 99, 99, 99, 99,
    24, 26, 56, 99, 99, 99, 99, 99,
    47, 66, 99, 99, 99, 99, 99, 99,
    99, 99, 99, 99, 99, 99, 99, 99,
    99, 99, 99, 99, 99, 99, 99, 99,
    99, 99, 99, 99, 99, 99, 99, 99,
    99, 99, 99, 99, 99, 99, 99, 99
};

该算法导致画质不佳(vlc显示效果更好)。我查看了 ffmpeg 源代码,发现了类似的算法但表格不同:

static const uint8_t default_quantizers[128] = {
    /* luma table */
    16,  11,  12,  14,  12,  10,  16,  14,
    13,  14,  18,  17,  16,  19,  24,  40,
    26,  24,  22,  22,  24,  49,  35,  37,
    29,  40,  58,  51,  61,  60,  57,  51,
    56,  55,  64,  72,  92,  78,  64,  68,
    87,  69,  55,  56,  80,  109, 81,  87,
    95,  98,  103, 104, 103, 62,  77,  113,
    121, 112, 100, 120, 92,  101, 103, 99,

    /* chroma table */
    17,  18,  18,  24,  21,  24,  47,  26,
    26,  47,  99,  66,  56,  66,  99,  99,
    99,  99,  99,  99,  99,  99,  99,  99,
    99,  99,  99,  99,  99,  99,  99,  99,
    99,  99,  99,  99,  99,  99,  99,  99,
    99,  99,  99,  99,  99,  99,  99,  99,
    99,  99,  99,  99,  99,  99,  99,  99,
    99,  99,  99,  99,  99,  99,  99,  99
};

我已将表格更改为 ffmpeg 表格,现在图片看起来很完美。 那么,为什么这些表与 rfc2435 不同?我错过了什么?

最佳答案

不同的表格适合不同的内容。随着时间的推移,还会发现更好的表格。找到最好的表格实际上是使用人工判断质量的反复试验,然后根据您希望优化的内容类型进行权衡。 ffmpeg 也可能产生更大的文件。在最初编写 jpeg 规范时,可能无法接受更大的文件。

关于ffmpeg - RTP/MJPEG 流的默认量化表是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22356935/

相关文章:

video - 服务器端视频编辑

video - -b :v <target bitrate> and -b <target bitrate> FFmpeg flags? 有什么区别

c++ - 未找到 h264_cuvid 编解码器

ffmpeg - 使用 ffmpeg 从网络摄像头录制声音

ios - MPMoviePlayerViewController 不播放

image - 如何将 JPEG 转换为 EXIF 方向为 1 的 JPEG?

android - 如何修复 Android/Webrtc/PeerConnection/createOffer 中的 "m=video 9 UDP/TLS/RTP/SAVPF 0"issus

ios - AV播放器 : delay when status is ReadyToPlay and first frame appearing

python - 如何使用 Python 获取图像和视频的元数据

android - 有多少 Android 设备受益于 Libjpeg-turbo 优化?