【问题标题】:Why FFMPEG PNG image compression output file bigger than input file?为什么FFMPEG PNG图像压缩输出文件比输入文件大?
【发布时间】:2018-06-15 07:11:30
【问题描述】:

我已经针对压缩代码后的几个图像测试了 ffmpeg。

C:\ffmpeg\bin\ffmpeg -y -i .\ff.png .\ff_out.png

对于 jpg 图像,它会减小文件大小,但对于某些 png 图像,它会提供比输入文件更大的输出文件。我只为位深度 = 8 的图像获得了较小的输出文件。

【问题讨论】:

  • 试试ffmpeg -y -i .\ff.png -pred mixed .\ff_out.png
  • ffmpeg -y -i .\ff.png -pred mixed .\ff_out.png 适用于大多数 PNG 图像
  • @Mulvya 如果你能解释一下“-pred”和“混合”选项是什么意思,真的很有帮助
  • @Mulvya 您的代码不适用于透明 PNG 图像。输出大于输入。
  • 这取决于输入。您可以添加-compression_level 9 以获得最大的比特流压缩。

标签: ffmpeg


【解决方案1】:

PNG 规范允许过滤字节流以实现更大的压缩。有关说明,请参阅 http://www.libpng.org/pub/png/book/chapter09.html

FFmpeg 的 PNG 编码器默认没有过滤。通过添加-pred mixed,FFmpeg 将应用所有过滤算法并选择产生最佳压缩的算法。

【讨论】:

  • 根据您的链接,它说“PNG 的二维隔行扫描方案会对压缩产生重大的负面影响”。我运行 'ffmpeg -y -i .\ff.png -compression_level 9 -pred mixed .\ff_out.png' ,对于某些图像,它提供比输入文件更大的输出文件大小。但是我运行 'C:\ffmpeg\bin\ffmpeg -y -i .\ff.png .\ff_out.png' 它为相同的输入文件提供了更小的压缩文件大小。
  • 适用于隔行输出。默认情况下,这是关闭的。添加-flags +ildct 开启并查看。我只想指出以下说法:对于每个样本 8 位或更多位的灰度和真彩色图像,无论有无 Alpha 通道,动态过滤几乎总是有益的。 所以,不是 100% 的时间但通常。
  • 我发现了两个适用于 png 图像的代码。 'ffmpeg -y -i .\wall.png -vframes 1 -r 1 -compression_level 9 -flags -ildct .\wall_out.png ' 和 'ffmpeg -y -i .\alpha2.png -vframes 1 -r 1 -deinterlace -compression_level 9 -flags -ildct -pred mixed .\alpha2_out.png ' .. 但我需要一个有效的代码
猜你喜欢
  • 2015-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多