在安卓设备上批量导出 WeChat 语音消息并转成常见音频格式的完整实践指南

下面的文字先用一段总览阐明关键结论,再分节细述:在 Android 文件系统里,微信语音消息实际保存在 Tencent/MicroMsg/<32 位哈希>/voice2 目录下,文件扩展名常见为 .silk.aud。只要把这些文件复制到电脑端,再用 silk-v3-decoder 或者直接调用 ffmpeg 即可批量转成 wav/mp3。全程无需 root,但在 Android 11 及以上需要借助 adb pull 或微信 PC 端的“备份与恢复”功能。转换脚本可以用不到五十行的 Python 完成,并支持一次性扫描、重命名和格式转换,方便归档或后期声音分析。


文件到底藏在哪

  • 微信会把所有多媒体内容集中放进 sdcard/Tencent/MicroMsg₁,然后再用用户 Uin 的 MD5 哈希当子目录名。语音对应的具体路径是 voice2₂。

  • 早期版本路径固定;7.0.17 之后微信把同名目录移动到了应用专属沙盒,但通过 adb pull /sdcard/Android/data/com.tencent.mm/... 依然可访问₃。

  • 如果不想走 ADB,官方桌面版微信也能“备份聊天记录到电脑”,备份完成后在 PC 的 Documents\WeChat Files\<微信号>\Backup\<日期>\voice2 找到同样的 .aud/.silk 文件₄。

  • 每一段语音文件名形如 msg_18fd53c1b1a7c8f1.silk,时间戳包含在 SQLite 消息数据库里,所以需要后续脚本来把“文件→时间”对照补齐₅。

(Fireebok, My Assignment Help, XDA Forums, MobileTrans, GitHub)


为什么不能直接播放

  • .silk.aud 都是基于 Skype Silk v3 的语音编码格式,体积小、延迟低,但系统播放器没有对应解码器₆。

  • 少数 .aud 其实是裁掉 AMR 文件头 (#!AMR\n) 的宽带 AMR,只要在文件头补回 6 字节即可直接播放₇。

  • 更通用的方法是用开源 silk-v3-decoder 将 Silk 转成 PCM,再交给 ffmpegsox 封装为 wav/mp3₈。

(Forensic Focus, GitHub, Stack Overflow)


把语音拷出来:三种途径

1. USB 大容量存储或文件管理器

把手机连到电脑,允许 MTP;在手机存储器“内部共享存储”里按上一节的路径直接复制。简单直观,但 Android 11 开始微信目录被 SAF 隐藏,需要借助电脑端“文件管理”应用才能看到。

2. ADB 命令行

开发者模式下执行

adb shell "ls /sdcard/Android/data/com.tencent.mm/MicroMsg"
adb pull  /sdcard/Android/data/com.tencent.mm/MicroMsg/<hash>/voice2  ./wechat_voice

这种方式不受系统版本限制;复制速度也最快₉。

3. PC 端备份聊天记录

微信 Windows/Mac 客户端 → 三条横线 → 备份与恢复备份聊天记录到电脑,结束后在备份目录拿到语音文件₄。

(GitHub, MobileTrans, Reddit)


批量转换脚本(Python 版本)

下面脚本示例兼顾三件事:

  1. 遍历 voice2 目录找出所有 .silk/.aud

  2. 通过 hashed 文件名关联 SQLite 消息数据库,把语音重命名为“聊天对象_时间戳.wav”。

  3. 调用 silk-v3-decoder+ffmpeg 输出 wav

运行准备

  • 安装 Python 3.x、ffmpeg₁₀,并把 silk-v3-decoder 编译好的 decoder 放到 PATH。

  • 复制 MM.sqlite(微信消息数据库)到同一目录;或者去掉与数据库有关的几行,让脚本只做格式转换。

#!/usr/bin/env python3
import subprocess, sqlite3, pathlib, re, shutil, datetime

SRC_DIR   = pathlib.Path('wechat_voice')        # voice2 源目录
OUT_DIR   = pathlib.Path('exported_voice')      # 导出目录
DB_PATH   = pathlib.Path('MM.sqlite')           # 消息数据库

OUT_DIR.mkdir(exist_ok=True)
conn = sqlite3.connect(DB_PATH)                 # 读取消息记录
cur  = conn.cursor()

def silk_to_wav(src: pathlib.Path, dst: pathlib.Path):
    tmp = src.with_suffix('.pcm')
    subprocess.run(['decoder', src, tmp], check=True)           # Silk→PCM
    subprocess.run(['ffmpeg', '-y', '-f', 's16le', '-ar', '24000',
                    '-ac', '1', '-i', tmp, dst], check=True)    # PCM→WAV
    tmp.unlink()

for f in SRC_DIR.rglob('*.silk'):
    # 通过文件名里的 md5 查找聊天对象 & 时间
    md5 = f.stem.split('_')[1]
    row = cur.execute("SELECT talker, createTime FROM message WHERE msgSvrId=?",
                      (md5,)).fetchone()
    if row:
        peer, ts = row
        ts_str = datetime.datetime.fromtimestamp(ts/1000).strftime('%Y%m%d_%H%M%S')
        target = OUT_DIR / f"{peer}_{ts_str}.wav"
    else:
        target = OUT_DIR / f"{f.stem}.wav"
    silk_to_wav(f, target)

print('全部完成!')

需要跨平台?把 ffmpeg 的调用改成 pydub.AudioSegment.from_file 也行,只是速度会慢一些。

(GitHub, FFmpeg, Ask Ubuntu)


批量转换的命令行一键式方案

如果你更习惯 Bash:

find ./voice2 -type f -name '*.silk' -print0 | \
  while IFS= read -r -d '' f; do
      b=$(basename "$f" .silk)
      decoder "$f" "$b.pcm"
      ffmpeg -y -f s16le -ar 24000 -ac 1 -i "$b.pcm" "out/${b}.wav"
      rm "$b.pcm"
  done

  • 上面假设 decoderffmpeg 已经加入 PATH。

  • 如果遇到 .aud 文件,把 find 的匹配后缀改为 -name '*.aud',并在循环顶部 mv "$f" "$f.silk" 把后缀先统一₇。

(Stack Overflow, forensenellanebbia.blogspot.com)


转换质量与格式选择

  • Silk 原始采样率 24 kHz,位深 16 bit 单声道。ffmpeg 默认为 pcm_s16le,可以保留原品质直接封装成 wav,体积 ~200 KB/s₁₁。

  • 若需更小体积,例如发送邮件,可追加 -codec:a libmp3lame -qscale:a 5 得到每分钟不到 100 KB 的 mp3

  • 长期归档推荐保留无损 flacffmpeg -i in.wav -c:a flac out.flac₁₂。

(FFmpeg, Super User)


隐私、合规与后续处理建议

  • 导出聊天语音一定要征得所有对话参与者同意,尤其在个人信息保护法实施地区。

  • 若打算做后期降噪或语音识别,转换为 16 kHz/16 bit PCM 可直接喂给常见 ASR 模型。

  • 重要纪念语音可再用 iTunes、云盘双重备份,并定期校验 MD5。


参考文献与资源索引

  1. Fireebok 教程展示路径 Tencent/MicroMsg/.../voice2 (Fireebok)

  2. Forensic 论文对 WeChat 媒体文件夹的描述 (My Assignment Help)

  3. XDA 讨论 Android 7.0.17 之后路径变化 (XDA Forums)

  4. Wondershare MobileTrans 讲解微信桌面备份功能 (MobileTrans)

  5. wechat-dump 项目说明如何从 SQLite 映射文件名 (GitHub)

  6. StackOverflow: Silk → AMR 转码需求 (Stack Overflow)

  7. ForensicFocus 通过补 AMR 头即可播放 (Forensic Focus)

  8. silk-v3-decoder 仓库与用法示例 (GitHub)

  9. Reddit 经历备份/复制语音经验分享 (Reddit)

  10. ffmpeg 官方文档示例命令 (FFmpeg)

  11. AskUbuntu 对 pcm_s16le 默认输出的说明 (Ask Ubuntu)

  12. SuperUser 讨论如何无损提取音频 (Super User)


这篇指南覆盖了路径定位、文件复制、格式解码与批量脚本自动化等关键环节,并特别强调了隐私与合规注意事项。按文中步骤操作,即可把安卓微信里的所有语音消息安全、高效地导出为通用 wav/mp3 文件。祝顺利。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汪子熙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值