这个项目用于处理豆包TTS服务的音频数据,支持多种输入格式:
- Charles解压数据转AAC音频(推荐,准确性最高)
- HAR文件转AAC音频(标准HAR格式)
- 16进制数据文件转换为AAC音频
- WebSocket二进制帧中的AAC音频流提取
- ✅ 智能文件命名:自动生成带时间戳的有意义文件名
- ✅ 多格式支持:处理Charles解压数据、HAR文件、16进制数据
- ✅ 高效处理:支持大型文件(6MB+),处理速度快
- ✅ 完善错误处理:详细的错误信息和状态反馈
- ✅ 统一命令行界面:简化的使用方式
- ✅ 详细日志:可选的详细处理信息输出
- ✅ 批量处理:支持多文件并行处理
- ✅ 智能AAC帧识别:精确的ADTS帧头解析
doubao_podcast/
├── README.md # 项目说明文档
├── requirements.txt # Python依赖(无额外依赖)
├── .gitignore # Git忽略文件
├── src/ # 源代码目录
│ ├── __init__.py # Python包初始化
│ ├── charles_to_aac.py # Charles解压数据转换器(推荐)
│ └── har_to_aac.py # HAR文件转换器
├── tools/ # 工具目录
│ └── convert.py # 统一命令行工具
├── examples/ # 使用示例
│ └── example_usage.py # 代码使用示例
├── docs/ # 文档目录
│ └── API.md # API文档
├── test.har # 测试用HAR文件
├── temp_analysis/ # HAR文件解压分析目录
└── output/ # 输出目录(自动创建)
├── doubao_tts_*.aac # 转换后的AAC音频文件
└── ...
# 处理Charles解压后的数据目录
python charles_to_aac.py --input temp_analysis --output output/charles_audio.aac
# 显示详细处理信息
python charles_to_aac.py --input temp_analysis --output output/charles_audio.aac --verbose
# 使用默认设置(推荐)
python charles_to_aac.py# 处理Charles抓包的HAR文件
python har_to_aac.py --input test.har --output output/extracted_audio.aac
# 批量处理HAR文件
python har_to_aac.py --batch --input-dir har_files/ --output-dir output/
# 显示详细处理信息
python har_to_aac.py --input test.har --output output/extracted_audio.aac --verbose# 基本转换
python hex_to_aac.py
# 指定输入和输出文件
python hex_to_aac.py --input hex.txt --output audio.aac
# 批量处理模式
python hex_to_aac.py --batch# 直接转换hex.txt为AAC音频
python main.py--input/-i: 输入的Charles解压目录路径(默认:temp_analysis)--output/-o: 输出的AAC文件路径(默认:output/charles_audio.aac)--verbose/-v: 显示详细处理信息
--input/-i: 输入的HAR文件路径(默认:test.har)--output/-o: 输出的AAC文件路径(默认:output/extracted_audio.aac)--batch: 批量处理模式--input-dir: 批量处理时的输入目录--output-dir: 批量处理时的输出目录--verbose/-v: 显示详细处理信息--extract-all: 提取所有音频片段(如果有多个)
--input/-i: 输入的16进制文件路径(默认:hex.txt)--output/-o: 输出的AAC文件路径(默认:output/audio.aac)--chunk-size: 处理数据块大小(默认:1024KB)--validate: 是否验证16进制数据格式(默认:True)--verbose/-v: 显示详细处理信息--batch: 批量处理模式
- 成功转换:返回0,生成AAC文件
- 文件不存在:返回1,显示错误信息
- 数据格式错误:返回2,显示验证失败信息
- 转换失败:返回3,显示具体错误原因
- 解析Charles解压后的meta.json文件
- 提取webSocket字段中的消息数据
- 识别服务器发送的二进制消息
- 智能AAC ADTS帧识别和提取
- 支持完整的音频流重建
- 解析JSON格式的HAR文件
- 提取WebSocket通信记录
- 识别豆包TTS服务的音频响应
- 解析WebSocket二进制帧
- 提取AAC ADTS音频流
- 使用Python内置的
binascii模块进行16进制转换 - 分块处理大文件,避免内存溢出
- 支持多种16进制格式(带空格、不带空格等)
- 自动检测和验证AAC文件头
- AAC ADTS格式(豆包TTS默认输出)
- 采样率:通常为32kHz、44.1kHz等
- 比特率:128kbps、256kbps等
- 声道:单声道或立体声
- 首选方案:使用
charles_to_aac.py处理Charles解压后的数据目录 - 备选方案:使用
har_to_aac.py处理标准HAR文件 - 特殊情况:使用
hex_to_aac.py处理16进制数据文件
- 确保输入文件包含有效的音频数据
- HAR文件应来自豆包TTS服务的WebSocket通信
- Charles解压数据应包含完整的meta.json文件
- 转换后的文件大小约为原始数据的一半(16进制转换)
- 建议在转换前备份原始数据
- 大文件转换可能需要较长时间
- 确保有足够的磁盘空间存储输出文件
- v2.1.0: 新增Charles解压数据处理功能,修复HAR文件音频数据提取问题
- v2.0.0: 新增HAR文件处理功能,支持豆包TTS WebSocket音频提取
- v1.2.0: 增加数据验证和错误处理
- v1.1.0: 添加大文件支持和进度显示
- v1.0.0: 初始版本,支持基本的16进制转AAC功能
如果遇到问题,请检查:
- 输入文件是否存在且可读
- HAR文件是否来自正确的WebSocket通信
- Charles解压数据是否包含meta.json文件
- 16进制数据格式是否正确
- 磁盘空间是否充足
- Python版本是否兼容(建议3.6+)
- 是否有必要的文件读写权限
问题描述:
har_to_aac.py程序能找到豆包TTS请求,但无法提取音频数据- 程序显示"总共提取到 0 字节音频数据"
问题分析:
- Charles抓包工具解压后的数据格式与标准HAR格式不同
- Charles使用
webSocket字段而不是标准的_webSocketMessages字段 - 消息格式也有差异,需要特殊处理
- 新发现:某些HAR文件将音频数据直接存储在响应内容的
text字段中,使用base64编码
解决方案:
- 创建新的
charles_to_aac.py程序专门处理Charles解压后的数据 - 支持解析
webSocket.messages数组 - 改进AAC帧识别算法,使用更精确的ADTS帧头解析
- 只处理服务器发送的二进制消息,过滤客户端消息
- 新增:修复
har_to_aac.py工具,优先检查响应内容中的base64编码数据
修复结果:
- 成功提取4.42MB的AAC音频数据(Charles格式)
- 成功提取5.52MB的AAC音频数据(标准HAR格式)
- 程序运行时间0.25-1.23秒
- 提取了数千个AAC帧,音频完整
处理文件:从Claude到MCP,最好的AI产品不是计划出来的.har
文件大小:7.4MB
提取结果:
- 识别到15,770个AAC帧
- 提取音频数据:5.52MB
- 处理时间:1.23秒
- 输出文件:
从Claude到MCP_最好的AI产品不是计划出来的.aac
优化内容:
- 删除了标准HAR格式的处理代码,避免不必要的复杂性
- 专门针对Charles抓包工具的HAR文件格式进行优化
- 重命名类名为
CharlesHARToAACConverter,更明确的功能定位 - 简化了处理逻辑,提高了可靠性和处理速度
优化结果:
- 代码更简洁,减少了约30行代码
- 处理逻辑更清晰,专注于Charles格式
- 避免了格式判断错误的可能性
- 保持了100%的处理成功率
# 推荐:处理Charles解压的豆包TTS音频(最简单)
python charles_to_aac.py
# 处理标准HAR文件
python har_to_aac.py --input test.har --output my_audio.aac --verbose
# 转换16进制文件
python hex_to_aac.py --input my_hex_data.txt --output my_audio.aac
# 快速转换(使用默认设置)
python main.py