微信聊天记录导出终极指南:wechat-dump 让你把整段回忆打包成网页
【免费下载链接】wechat-dumpAnalyzing your wechat message history from android项目地址: https://gitcode.com/gh_mirrors/we/wechat-dump
你有没有过这种时刻——换了新手机,几千条聊天记录跟着旧设备一起沉睡;想写点什么回忆录,却翻不动微信里那又长又乱的时间线;或者单纯想统计一下和某个人到底聊了多少句,却发现微信压根没给你留任何出口。
微信是目前国内用户量最大的即时通讯软件,但它从诞生起就把"导出聊天记录"这扇门焊死了。于是很多人选择放弃,觉得自己的数据注定被锁在那一台手机里。其实不然,一个开源工具 wechat-dump 就能完成微信聊天记录导出,它直接读取安卓端微信的数据库文件,把文字、图片、语音、表情全部解析出来,最后渲染成一个自包含的 HTML 网页,像浏览真实聊天界面一样回看过去。今天这篇指南,就从零开始带你把这件事完整跑通。
先弄明白:它到底替你做了什么
在动手之前,值得先花两分钟搞清楚这套工具的工作方式,免得走弯路。
微信的数据并不是一个黑箱。它在你手机里存了两样东西:一个是加密的数据库文件EnMicroMsg.db,里面是消息文本、联系人、时间戳等结构化信息;另一个是资源目录,包括avatar(头像)、image2(图片)、voice2(语音)、emoji(表情)、video(视频)等文件夹,存放实际的媒体文件。
wechat-dump 的思路非常朴素:把数据库里的消息条目和资源目录里的媒体文件"对上号",再套用模板渲染成 HTML。整个项目由几个模块分工完成——parser.py负责读数据库,render.py负责拼 HTML,res.py负责调度图片语音等资源,emoji.py负责表情的匹配与下载。
这里有个重要的前提必须说清楚:wechat-dump 不负责解密数据库。加密的EnMicroMsg.db需要你先用其他手段解成明文(比如用 SQLCipher),工具拿到的是解密后的文件。这也是它和许多"一键导出"商业工具最大的不同——它只做解析与渲染,把最敏感的解密环节留给你自己掌控,数据始终不经过第三方服务器。
出发前的行囊:环境与依赖清单
工欲善其事,必先利其器。我们先把需要的"装备"列清楚,缺一不可:
- 一台已 root 的安卓手机,且开启了 USB 调试。root 权限是硬性要求,因为微信的数据库存放在应用私有目录里,普通权限读不到。
- 一台 Linux 或 Mac 电脑,Windows 用户需要 WSL 之类的 Bash 环境,并装好adb。
- Python 3.8 及以上版本,装完依赖:
pip install -r requirements.txt。 - sox命令行工具,负责音频处理;语音解码还需要编译项目自带的 Silk 解码器,执行
./third-party/compile_silk.sh即可。 - ffmpeg(可选但强烈建议),稍后会讲到它和微信专有图片格式的关系。
安装部分也很简单,克隆仓库后进入目录装依赖就行:
git clone https://gitcode.com/gh_mirrors/we/wechat-dump cd wechat-dump pip install -r requirements.txt如果你只是想把聊天记录快速导出为 HTML,其实核心依赖就上面这些。接下来的步骤才是真正的重头戏。
第一关:从手机里取出"原料"
微信的所有数据都藏在/data/data/com.tencent.mm/MicroMsg/目录下。这里会有一个以 32 位十六进制字符命名的文件夹(比如2a3b...cdef),它就是你的微信账号专属目录,里面躺着数据库和全部媒体资源。
项目贴心地准备了一个自动脚本android-interact.sh,帮你完成两步搬运:
# 第一步:拉取数据库和头像索引 ./android-interact.sh db # 第二步:拉取头像、图片、语音、视频等资源到本地 resource 目录 ./android-interact.sh res脚本会自动在设备上寻找那个 32 位的用户名目录,然后通过 adb 把东西搬回来。如果你只想手动操作,也可以自己找到EnMicroMsg.db拷到电脑上,再把avatar、emoji、image2、sfs、video、voice2这几个子目录复制到项目的resource目录下。
这里有个实用小技巧:资源文件通常有几百 MB,直接adb pull又慢又容易失败。脚本内部其实会优先尝试用busybox tar打包成压缩流再传输,如果你在手机上不方便跑脚本,也可以自己在设备端先打个包:
adb shell "busybox tar -czf /sdcard/resources.tar.gz /data/data/com.tencent.mm/MicroMsg/${userid}/" adb pull /sdcard/resources.tar.gz .搬运完成后,记得确认本地resource目录下有avatar、image2、voice2等子目录——缺任何一个,对应类型的消息渲染时就会显示不出来。
第二关:搞定微信的专有图片格式 WXGF
数据库解了密、资源也搬回来了,但你可能还会遇到一个拦路虎:微信自某一版本起,图片和表情不再用标准的 JPEG/PNG 存储,而是换成了自家定义的WXGF/WXAM 格式。这种格式市面上几乎没有通用解码器,直接当成普通图片读必然失败。
好消息是 wechat-dump 给出了两条解码路线,你任选其一即可:
路线 A:让 ffmpeg 在家干活(推荐)如果电脑上装了 ffmpeg 和 ffprobe,工具会自动尝试本地解码。项目里wxgf.py这个模块专门负责把 WXGF 文件里的 HEVC 视频流抽取出来,再交给 ffmpeg 转成可显示的图片。这条路最简单,你什么都不用额外配置,装上 ffmpeg 即可。
路线 B:让手机当解码服务器如果你的环境里没有 ffmpeg,或者本地解码覆盖率不够,可以把安卓手机变成一个"解码服务器"——这就是项目里 WXGFDecoder 这个安卓应用存在的意义。它从微信 APK 里提取了原生解码库,手机上点几下就能开一个 WebSocket 服务,电脑端把待解码的图片字节流发过去,它把结果回传回来。
下图就是 WXGFDecoder 的运行界面,你能看到端口配置、启动按钮和实时的解码日志:
使用方式非常直接:手机上打开应用,点"Start Server",记录下地址(默认是ws://设备IP:8080),然后在导出命令里加一个参数就行。要注意手机和电脑必须处于同一局域网内,比如连同一个 Wi-Fi。
第三关:一条命令,把聊天记录变成完整网页
原料齐了,解码方案定了,接下来就是见证成果的时刻。假设你要导出和联系人"张三"的聊天记录,只需要一条命令:
./dump-html.py "张三"命令默认读取当前目录下的EnMicroMsg.db.decoded数据库和resource资源目录,执行完会在当前目录生成一个output.html文件,用浏览器打开即可。如果要用 WXGF 服务器解码,或者想调整输入输出路径,可以加上参数:
./dump-html.py "张三" \ --db 解密后的数据库路径 \ --res resource \ --output zhang_san.html \ --wxgf-server ws://192.168.1.100:8080生成的文件是自包含的——CSS、JS、图片、语音全部内嵌或随文件一起保存,拷到任何一台电脑、任何时间打开,都能完整还原当时的对话场景。看看下面这张真实导出效果的截图,你会立刻明白为什么这个工具值得折腾:
从截图里能看出几个细节:左侧是对应的头像和语音消息(带时长显示),右侧是绿色气泡包裹的文字和图片,时间戳把不同时段自然隔开,图片以接近原始质量嵌入页面。整个界面和微信本身的观感高度接近,浏览起来毫无陌生感。
如果你导出的消息量特别大,工具会自动把 HTML 拆分成多个分片文件(每片约 1500 条消息),文件名类似output00.html、output01.html,避免单个文件大到浏览器都打不开。另外它还支持--start参数指定起始时间,只导出某段时间之后的记录,比如"只保留最近半年的对话"。
第四关:把聊天数据玩出更多花样
HTML 只是最直观的一种输出形态,这个工具真正让人惊喜的是它把数据库解析成了通用接口,你可以借此做各种数据分析。
先看看自己到底有多少段对话:
./list-chats.py 解密后的数据库它会列出所有聊天对象的名字和对应的 ID,方便你确认联系人名称是否拼写正确。
把所有聊天批量导出成纯文本:
./dump-msg.py 解密后的数据库 output_dir这条命令会把每个联系人的消息单独存成一个.txt文件,适合做全文检索、写文章素材收集,或者干脆留一份纯文字的备份。
统计谁和你聊得最多:
./count-message.sh output_dir脚本会输出每个联系人的行数、字符数、词数排行——你可以用这个结果验证一下,自己回复最多的人到底是谁,结果往往出人意料。
绘制聊天活跃度曲线:
./plot-num-msg-by-time.py 解密后的数据库 "联系人名"它会生成一张消息数量随时间变化的直方图,一眼看出你们聊天的高峰期,是热恋期每天几百条,还是后来逐渐归于平淡。
单独导出语音消息为 MP3:
./dump-audio.py "联系人名"语音消息在微信里存储的是 SILK 编码格式,电脑播放器普遍不认。项目内置了从微信拆出来的 Silk 解码器,配合 sox 可以把每条语音转成通用的 MP3 文件,存到指定目录。这意味着你甚至可以永久保存某个重要的人的所有语音留言。
避坑指南:这些细节决定成败
走完整个流程你会发现,真正麻烦的不是工具本身,而是各种"环境差异"带来的小坑。我把自己踩过的和替大家排查过的问题整理成几条经验:
- 资源目录名字要对上。新版微信的资源在应用私有目录里,老版本则可能在
/mnt/sdcard/tencent/MicroMsg/下,路径不同,记得先确认再跑脚本。 - 语音转不出 MP3?先确认 Silk 解码器编译成功(
./third-party/compile_silk.sh是否正常结束),再检查 sox 是否已安装。 - 表情显示成占位符?部分表情在数据库里只有 md5 没有下载地址,工具无法自动补齐。可以预先下载官方提供的表情缓存包解压到项目根目录,能显著减少渲染时的网络下载量,大幅加快导出速度。
- 联系人名字对不上?用
list-chats.py先打印一遍所有昵称,微信的备注名和显示名可能和你记忆中的不完全一致,直接照抄工具输出的名字最稳妥。 - 本地 ffmpeg 解码失败?某些 WXGF 变体本地解不了,此时果断切换 WXGF Decoder 服务器方案,两条路线互补使用效果最佳。
如果你还要导出多个联系人,可以把上面的命令写成一个简单的循环脚本,一个周末的下午就能把整个微信档案全部搬进电脑。
把回忆握在自己手里
微信没有义务给你的数据开一扇门,但你有权利为自己留一把钥匙。wechat-dump 的价值正在于此:它让你不用再依赖任何云端服务,就能把散落在手机里的聊天记录完整地导出、归档、分析,成为真正属于你的数字资产。
如果你也想参与这个项目,可以从几个方向入手:试着在安卓设备上补充 WXGF 解码的覆盖场景;修一修那些罕见的消息类型(比如系统消息、撤回通知)的渲染问题;或者优化 HTML 模板,让它更符合现代审美。源码目录结构清晰,wechat/parser.py、wechat/render.py、wechat/res.py都是不错的阅读起点,仓库的 TODO 列表也一直向社区开放。
数据是你的,回忆是你的。现在就拿起手机,把第一段聊天记录变成网页,你会发现过去那些舍不得删的对话,原来还能以这么体面的方式继续存在。
【免费下载链接】wechat-dumpAnalyzing your wechat message history from android项目地址: https://gitcode.com/gh_mirrors/we/wechat-dump
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考