微信聊天记录导出全攻略:用 wechat-dump 把十年对话搬进浏览器
2026/9/7 3:06:40 网站建设 项目流程

微信聊天记录导出全攻略:用 wechat-dump 把十年对话搬进浏览器

【免费下载链接】wechat-dumpAnalyzing your wechat message history from android项目地址: https://gitcode.com/gh_mirrors/we/wechat-dump

换机那天,我才发现全家十年的微信聊天记录差点彻底蒸发——官方没有导出按钮,云备份只恢复最近 90 天,剩下的全是加密乱码。折腾了一整周,我最终靠开源工具 wechat-dump 完成了微信聊天记录导出:它直接从安卓设备读取微信数据库,把文字、图片、语音、表情原样还原成一份可永久保存、可离线浏览、可搜索的 HTML 档案。这篇攻略,就是我从踩坑到上手的完整实战记录。

动手之前:微信到底把聊天记录"藏"在哪里

很多人以为聊天记录就是一坨数据库文件,其实微信把数据拆成了两半:

  • 账本EnMicroMsg.db,一张加密的 SQLite 表,记录每条消息的时间、类型、发送者和正文。
  • 仓库:手机上的avataremojiimage2voice2videosfs等资源目录,存着头像、表情、原图和语音文件本体。

wechat-dump 干的事,就是"拿着账本去仓库取货":从messagercontactImgInfo2EmojiInfo这些表里解析出消息索引,再去资源目录里找到对应的图片语音,最后统一装进网页这个"展柜"。解析逻辑集中在wechat/parser.py,渲染逻辑在wechat/render.py,想深入了解运行原理的人可以直接翻源码。

前置条件:一台 root 手机和三条命令

工具的环境要求并不苛刻:一台已 root 的安卓手机、开启 USB 调试、电脑上装好 adb 和 Python 3.8+。依赖用一条命令装齐:

pip install -r requirements.txt

语音解码还需要sox和项目自带的 Silk 解码器(./third-party/compile_silk.sh编译一下即可)。装完之后,获取数据的两个动作都有现成脚本:

./android-interact.sh db # 自动定位 userid 目录,拉取加密数据库 ./android-interact.sh res # 拉取 avatar/emoji/image2 等全部资源目录

脚本会自动在/data/data/com.tencent.mm/MicroMsg下找出那个 32 位十六进制字符的 userid 目录——这是新手最容易卡住的地方,手动找的话经常翻错目录。资源体积大,脚本会优先用busybox tar打包后传输,比adb pull逐文件拷贝快得多。

第一个绕不开的坑:数据库要自己解密

android-interact.sh拉回来的是加密库,wechat-dump 明确不负责解密,需要自己用 SQLCipher 之类的工具解开,密钥通常和设备 IMEI、微信 UIN 相关。解密后得到一个EnMicroMsg.db.decoded,这才是工具能读懂的文件。

这块没有捷径,但别慌——解密只是整个流程里最费心的一步,后面就顺畅了。

核心操作:一条命令导出单个联系人的完整聊天记录

所有准备就绪后,导出单个联系人的聊天记录只需要一条命令:

./dump-html.py "联系人显示名称"

默认生成output.html,用浏览器打开就是一份完整的对话档案。常用参数也都给足了:

./dump-html.py "联系人" --db EnMicroMsg.db.decoded --res resource --output 我的聊天.html

--start参数可以只导出某个时间点之后的消息;对话太长时工具会自动按 1500 条或时间间隔切片成多个 HTML 文件,避免单文件过大卡死浏览器。上面那张截图就是真实导出的效果:左侧是语音气泡带时长,右侧是绿色文字气泡,图片按原始质量嵌入,时间戳自动分组,整个界面和微信几乎一模一样。

图片为什么是黑屏:认识 WXGF 这个专有格式

第一次导出时,我发现表情和图片全是黑块。查了半天才明白,微信用自研的WXGF/WXAM 格式(本质是 HEVC 视频流套了一层专有容器)存图片,浏览器根本不认识。wechat-dump 给了两条解码路线:

路线一:本地 ffmpeg 解码。电脑装了 ffmpeg/ffprobe 后,wechat/wxgf.py会自动从 WXGF 文件里提取 Annex-B HEVC 比特流,单帧转 PNG、多帧转 GIF,全程本地完成,最省事。

路线二:安卓端 WXGF Decoder 服务器。没有 ffmpeg 的环境,可以在安卓设备上装WXGFDecoder这个配套应用,点一下START SERVER,把地址以--wxgf-server ws://设备IP:端口传给导出命令,手机就变成了一个解码服务器,电脑把图片数据发过去、收回来的是标准格式。下面就是它运行时的界面:

两条路都失败时,工具会回退显示占位符,至少不会让整个页面崩掉。

语音、表情、视频:这些"硬骨头"是怎么啃下来的

文字和图片搞定后,剩下的三类消息才是真正体现工具功底的地方:

  • 语音:微信把语音存成 Silk 编码,电脑没法直接播。wechat-dump 内置了完整的 Silk 解码器源码(third-party/silk/),配合 sox 转成 mp3 嵌进网页,时长、播放按钮都保留。
  • 表情包EmojiInfo表里只存表情的 md5 和 CDN 地址。工具会先在本地emoji目录里找,找不到再按需从网络拉取;拉回来的表情还会写进本地缓存,下次导出直接命中,不用重复下载。
  • 视频:消息表里的视频索引会对应到video目录,同时生成缩略图,网页里点开即看。

从"存档"升级到"分析":把聊天记录变成数据

导出 HTML 只是第一步,wechat-dump 真正的隐藏价值在于它把数据交给了你。配套的几个脚本能立刻把对话变成统计报表:

./list-chats.py decoded.db # 列出所有聊天对象 ./dump-msg.py decoded.db output_dir # 全量导出纯文本消息 ./count-message.sh output_dir # 统计每个人的消息数量 ./plot-num-msg-by-time.py # 按时间画消息分布曲线

朋友最近就在用这套脚本做"我和女朋友谁话多"的年度复盘,几秒钟出结果,数据都来自原始数据库,比截图统计靠谱得多。想验证工具是否适配你的微信版本,跑一次list-chats.py就是最直接的体检。

避坑清单:半年实测攒下的血泪经验

  • emoji 缓存包提前下:首次导出如果表情很多,联网下载会很慢。可以先把官方发布的 emoji 缓存压缩包解压到项目根目录,导出时直接命中本地,速度翻倍。
  • 资源传输优先用 tar:大量小文件用adb pull会慢到怀疑人生,脚本里的busybox tar方案强烈建议保留。
  • 旧版微信的坑:老版本微信的头像索引叫avatar.index,要用--avt参数指定;新版已经不需要。
  • 极少数消息类型会跳过:项目 TODO 里明确标注,类型大于 10000 和小于 0 的消息可能无法处理,遇到别慌,属于已知边界。

为什么不推荐截图和云备份:横向对比一下

和"手动截图""第三方云备份""破解版导出器"相比,wechat-dump 的差异化优势很明显:它直接处理原始数据库,不经过任何中转服务,数据完整性有保障,且全程离线;截图只能留画面,丢时间戳丢上下文;云备份受时效和账号限制;而它导出的是一份结构完整的网页,文字、图片、语音、时间线全在,还能被统计脚本二次分析。唯一的门槛就是需要 root 手机和手动解密,适合愿意为数据主权花两小时的人。

想再进一步?从这三处源码开始改造

  • wechat/static/下是一整套 HTML 模板,TP_MSG.htmlTP_IMG.htmlwx.css改一改就能换风格。
  • wechat/msgslice.py控制消息切片逻辑,觉得 1500 条一页不合适,改阈值就行。
  • 项目里散落着不少TODO标注,运行grep 'TODO' wechat -R就能看到官方求助清单——修掉一个就是现成的贡献机会。

看完这篇,最值得你现在就做的事是:翻出旧手机,root 后跑一遍./android-interact.sh db,先确认数据库能不能正常解析,再决定要不要走完整导出流程。备份这件事,永远是"趁数据还在时做",而不是"等手机坏了再后悔"。

【免费下载链接】wechat-dumpAnalyzing your wechat message history from android项目地址: https://gitcode.com/gh_mirrors/we/wechat-dump

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询