【问题标题】:corrupted HEIC tile when converting to JPEG转换为 JPEG 时损坏的 HEIC 磁贴
【发布时间】:2018-01-11 03:24:40
【问题描述】:

我在将 .HEIC 图像转换为 jpeg 时遇到问题。 .HEIC 文件是使用运行最新 ios 公共测试版的 iphone 拍摄的图像。我正在使用library nokia provided 解析文件并从 .HEIC 文件中提取图像图块,将它们转换为 jpeg 并使用 ffmpeg/montage 将它们粘合在一起。

代码太多,无法将其全部粘贴到这个问题中,所以我将所有代码都放在了这个github repo 中。它非常不言自明,应该只需几个依赖项即可运行。它们在 repo 的 README 中进行了解释。顺便说一句,这都是在 osx 上完成的。

.HEIC 文件包含一个 8x6 网格的图像(图块),如果将它们放在一起,就可以得到完整的图像。只需将我输入的第 7 个图块的任何图像都损坏,如下所示,我真的不明白为什么。我已经向 nokia 提出了一个问题,但是 repo 似乎已经死了,我真的不希望那里有答案。

【问题讨论】:

  • 将您的项目编译为单个 c++ 可执行文件。也在调查。问题显然是 heif 阅读器或 ffmpeg hevc 解码器

标签: c++ ffmpeg heif


【解决方案1】:

第 7 个图块中的 VPS/SPS/PPS 参数集存在错误。我没有追查问题出在实际文件中还是在 HEIF 解析器中,但同时有一个简单的解决方法。

请参阅 HevcImageFileReader::getItemDataWithDecoderParameters 并观察它如何将参数集添加到每个图块的实际项目数据中。

您需要做的就是读取第一个图块的参数集,并将它们重复用于后续图块,而不是重新读取它们。这将解决来自第 7 个图块的损坏参数。这样做似乎很安全,因为这是一种网格格式,并且要求每个图块都相同。

【讨论】:

  • 这确实有效。改为 getDecoderParameterSets(contextId, 1, parameterSet);并且第 7 个图块不再损坏。
猜你喜欢
  • 2018-05-05
  • 2022-01-10
  • 2021-03-10
  • 2019-11-18
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多