【问题标题】:Is it possible to apply h.264 compression to image?是否可以对图像应用 h.264 压缩?
【发布时间】:2021-07-21 14:10:45
【问题描述】:

目前,我正在对单个图像应用 h.264 压缩。
如下图所示,我想压缩基于 h.264 40 恒定量化的图像。

但是,任何地方都没有相关功能,例如基于 Python 的库(opencv、ffmpeg)。

另外,没有适用于单张图像和结构良好的 h.264 算法的 github。

那么,是否有任何 github 实现或库可以做到这一点?

提前致谢。

【问题讨论】:

  • 为什么? h.264“是一种面向块的基于运动补偿的视频压缩标准”。您的图像没有 h.264 压缩功能所需的运动(之前/之后的帧)...
  • @sorfiend。我知道了。 h.264 编解码器用于视频压缩而不是单个图像。
  • 所谓的webp still image format基本上是一个单帧VP8视频。

标签: image image-processing deep-learning h.264 data-augmentation


【解决方案1】:

在某些情况下(如学术目的)对单帧视频进行编码确实有意义。

存在一种名为HEIF 的现有图像格式,它基于 HEVC (H.265) 编解码器,但对于 H.264,您必须对视频文件进行编码。

您可以使用FFmpeg 命令行工具来创建单帧视频文件:

ffmpeg -i input.png -vcodec libx264 -qp 40 -pix_fmt yuv420p single_frame.mp4

(假设您的输入图像是input.png)。

-qp 40 参数应用常数量化 40。

qp (qp)
设置恒定量化率控制方法参数

见:libx264 documentation

注意:
由于是单帧,帧类型将是I-Frame


如果您更喜欢基本 H.264 流(没有 MP4 容器),您可以使用:

ffmpeg -i input.png -vcodec libx264 -qp 40 -pix_fmt yuv420p single_frame.264

FFmpeg 有 Python 绑定,例如 ffmpeg-python
您可以使用它来编码表示原始视频帧的 NumPy 数组。
您也可以使用 FFmpeg 子进程的管道作为 following 示例。


您可以在 GitHub 中找到 H.264 编码器的源代码(例如here)。
据我所知,源代码是用 C 实现的。

如果不查看来源,我认为您不会认为它们是“结构良好的”。

【讨论】:

  • 感谢专家。如果我的话听起来有点刺耳,我很抱歉:))
  • FWIW:qp 的较低值会生成更多编码数据(更大的压缩文件)。较高的值会生成具有更多伪像的图片。
猜你喜欢
  • 2015-11-21
  • 2011-06-28
  • 2016-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 2021-04-01
  • 1970-01-01
相关资源
最近更新 更多