Talk is Cheap
Show me Your Code
省流:按照以下步骤,从 tmap 中取出二进制元数据,之后解析。HEIF 和 AVIF 的容器格式是一样的,可以通用。
- 环境:准备
MP4Box。 - 找到
tmap,并取出。 - 按 ISO 21496-1 解析。
# 1. 安装 MP4Box,用 brew 或其他包管理器
brew install gpac
# 2. 找到 `tmap`
MP4Box -info example.heic
# 3. 上一句的输出里,找到 `tmap` 的 ID
MP4Box -dump-item [ID] example.heic
# 4. 用 Python 或别的办法解析
uv run parse_binary_payload.py
这个脚本,可以从 GitHub 获得,需要在 main 中替换一下路径。
测试了以下几个例子:
- iPhone 拍的 HEIC
- iPhone 的 HDR HEIC 屏幕截图
libavif制作的 AVIF Gainmap- Lightroom 导出的 AVIF Gainmap(导出时选最大兼容)
Show me Your Prompt
思路来自 ISO 21496-1 中 C.3 六连问的第四个:
(d) How is the gain map metadata binary payload stored?
意思就是不管什么格式的图像,都需要存储二进制的 gainmap metadata。
于是向 AI 提问如下(感觉放标准文件的原文不太好,请读者自行查找标准文件)。
[ISO 21496-1 的附录 C.2, C.3]
调研 HEIC,AVIF 这两种图像格式是如何存储 C.3 中所述的信息的。
与 AI 共舞
到这里,你已经看完了和标题有关系的部分,接下来是如何与 AI 协作的部分,随便记录一下说不定什么时候就会被淘汰掉的思路。
综述和搜索
如果你像我一样对 HEIF 和 AVIF 的内部结构几乎一无所知,第一步是让 AI 去搜集一下信息,充当以前搜索引擎的工作,这里用到了以下模型。
- Gemini 3.1 Pro(网页对话)
- Grok 4.2 Beta (API)
- Qwen DeepResearch(网页对话)
- GPT 5.4 Pro(网页对话)
这一步我习惯派出很多个 AI 去做,搜索结果更全一些,而且放着不用岂不是亏了。这几个模型里除了 Gemini 3.1 Pro 没什么多轮能力,主要利用其自身的世界知识,剩下几个都带有搜索和多步执行。Grok 的 API 似乎有问题,问个 Hello 扣了我 16w token 的钱,GPT 5.4 Pro 非常非常慢,回答的语气很令人讨厌,Qwen 主要是看搜索后的参考文献,不过太新的东西他一般搜不出什么。
方案制定
上面这些信息回来之后,就已经大致解决了,几个模型都返回了从 tmap 里找等类似的答案。把各种信息都丢给 Gemini,让它出了一个清单,如何一步步的解析出想要的东西,每一步执行什么终端命令等。
执行
方案定好之后,找个 Codex 等 CLI 类的,能执行命令的工具,把上一步的清单执行一下,理想情况下,就能获得最终结果了,这一步用的是 GLM-5。
在这里有个小插曲,tmap 里不光有二进制的元数据,除了哈苏实现的 HEIF 以外,别的都在最开头的地方有一个额外的版本号,占用一个字节,而且我给它的示例图片里的 gainmapmax 数值上等于 alt headroom,gainmapmin 等于 base headroom,导致里面能解析出一些相同的数,GLM-5 没能意识到这两点,一直在尝试切片和不同的顺序来解码,等我发现的时候已经消耗了 300w token 了,早知道用个聪明点的模型。
审核与再次搜索
由于 GLM-5 上一步执行的不太成功,把它的一些输出又丢给别的模型进行第二轮搜索,这里用的是 Grok 4.2 beta(网页对话)。Grok 从 libheif 的一个 PR 里发现了这个额外的版本号字节问题。
整理代码
到这里就做完了,让 Copilot 整理了一下代码,多找几个测试图看看能不能顺利解析。用 Copilot 是因为他不要钱,而且最近砍掉了模型选择,只能用自动模型,所以基本只能干点这种杂活。
力大砖飞 大道至简
上面叽里咕噜说了一大堆,说不定下次有哪个能联网的 AI 产品被问到相似的问题时,就直接搜到这里来给出回答了。
从 Cloudflare 提供的数据来看,每天访问本博客的机器人远远多于人类,其中大部分都是各种大模型公司的爬虫,比搜索引擎的爬虫多十倍不止。
再畅想一下,再过个半年一年的,等把这些东西都塞进训练数据里,基础模型直接就能解决这样的问题了吧。