Python silk 库 支持微信语音
GitHub 项目地址
python silk codec binding 支持微信语音编解码
pilk
python silk codec binding 支持微信语音编解码
pilk: python + silk
安装
pip install pilk
介绍与说明
SILK 是一种语音编码格式,由 Skype
公司研发,网上可找到的最新版本是 2012 发布的。
SILK 原始代码已上传到 v0.0.1 release , 包含规范文档
Tencent 系语音支持来自 silk-v3-decoder
v0.0.1 release
中也包含 silk-v3-decoder 重编译的 x64-win 版本
SILK 编码格式 和 Tencent 系语音的关系:
此处 Tencent 系语音,仅以微信语音为例
- 标准 SILK 文件以
b'#!SILK_V3'
开始,以b'\xFF\xFF'
结束,中间为语音数据 - 微信语音文件在标准 SILK 文件的开头插入了
b'\x02'
,去除了结尾的b'\xFF\xFF'
,中间不变
已下统称为语音文件
语音数据
语音数据分为很多个独立 frame,每个 frame 开头两字节存储剩余 frame 数据的大小,每个 frame 默认存储 20ms 的音频数据
据此可写出获取 语音文件 持续时间(duration) 的函数(此函数 pilk 中已包含)
def get_duration(silk_path: str, frame_ms: int = 20) -> int:"""获取 silk 文件持续时间,单位:ms"""with open(silk_path, 'rb') as silk:tencent = Falseif silk.read(1) == b'\x02':tencent = Truesilk.seek(0)if tencent:silk.seek(10)else:silk.seek(9)i = 0while True:size = silk.read(2)if len(size) != 2:breaksize = size[0] + size[1] << 8if not tencent and size == 0xffff:breaki += 1silk.seek(silk.tell() + size)return i * frame_ms
根据 SILK 格式规范,frame_ms 可为 20, 40, 60, 80, 100
快速入门
详情请在 IDE 中查看 API 文档注释
在使用 pilk 之前,你还需清楚 音频文件 mp3, aac, m4a, flac, wav, ...
与 语音文件 之间的转换是借助 PCM raw
data 完成的
具体转换关系:音频文件 ⇔ PCM ⇔ 语音文件
音(视)频文件 ➜ PCM
借助 ffmpeg,你当然需要先有 ffmpeg
ffmpeg -y -i <音(视)频输入文件> -vn -ar <采样率> -ac 1 -f s16le <PCM输出文件>
-y
: 可加可不加,表示 <PCM输出文件> 已存在时不询问,直接覆盖-i
: 没啥好说的,固定的,后接 <音(视)频输入文件>-vn
: 表示不处理视频数据,建议添加,虽然不加也不会处理视频数据(视频数据不存在转PCM的说法),但可能会打印警告-ar
: 设置采样率,可选的值是 [8000, 12000, 16000, 24000, 32000, 44100, 48000], 这里你可以直接理解为声音质量-ac
: 设置声道数,在这里必须为 1,这是由 SILK 决定的-f
: 表示强制转换为指定的格式,一般来说必须为 s16le, 表示16-bit short integer Little-Endian data
- example1:
ffmpeg -y -i mv.mp4 -vn -ar 44100 -ac 1 -f s16le mv.pcm
- example2:
ffmpeg -y -i music.mp3 -ar 44100 -ac 1 -f s16le music.pcm
PCM ➜ 音频文件
ffmpeg -y -f s16le -i <PCM输入文件> -ar <采样率> -ac <声道数> <音频输出文件>
-f
: 这里必须为s16le
, 同样也是由 SILK 决定的-ar
: 同上-ac
: 含义同上,值随意<音频输出文件>
: 扩展名要准确,没有指定格式时,ffmpeg 会根据给定的输出文件扩展名来判断需要输出的格式- example3:
ffmpeg -y -f s16le -i test.pcm test.mp3
ffmpeg 也可以使用 python ffmpeg binding 替换,推荐 PyAV 大家自行研究,这里不再啰嗦。
讲完了 音频文件 ⇔ PCM,接下来就是用 pilk 进行 PCM ⇔ 语音文件 互转
silk 编码
import pilk# pcm_rate 参数必须和 使用 ffmpeg 转 音频 到 PCM 文件时,使用的 `-ar` 参数一致
# pcm_rate 参数必须和 使用 ffmpeg 转 音频 到 PCM 文件时,使用的 `-ar` 参数一致
# pcm_rate 参数必须和 使用 ffmpeg 转 音频 到 PCM 文件时,使用的 `-ar` 参数一致
duration = pilk.encode("test.pcm", "test.silk", pcm_rate=44100, tencent=True)print("语音时间为:", duration)
silk 解码
import pilk# pcm_rate 参数必须和 使用 ffmpeg 转 音频 到 PCM 文件时,使用的 `-ar` 参数一致
duration = pilk.decode("test.silk", "test.pcm")print("语音时间为:", duration)
使用 Python 转任意媒体文件到 SILK
import os,pilk
from pydub import AudioSegmentdef convert_to_silk(media_path: str) -> str:"""将输入的媒体文件转出为 silk, 并返回silk路径"""media = AudioSegment.from_file(media_path)pcm_path = os.path.basename(media_path)pcm_path = os.path.splitext(pcm_path)[0]silk_path = pcm_path + '.silk'pcm_path += '.pcm'media.export(pcm_path, 's16le', parameters=['-ar', str(media.frame_rate), '-ac', '1']).close()pilk.encode(pcm_path, silk_path, pcm_rate=media.frame_rate, tencent=True)return silk_path
Python silk 库 支持微信语音相关推荐
- 微信公众号python_wechat: 微信 Python SDK,支持微信公众号以及企业号的上行消息及 OAuth 接口...
微信公众号Python-SDK 本SDK支持微信公众号以及企业号的上行消息及OAuth接口.本文档及SDK假设使用者已经具备微信公众号开发的基础知识,及有能力通过微信公众号.企业号的文档来查找相关的接 ...
- 【Python】轻松识别文字,这款Python OCR库支持超过80种语言
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达本文转自|Python大数据分析 什么是OCR? 有一款软件叫扫描全 ...
- 音频文件格式转化,librosa库支持的语音文件类型
语音文本格式转化及在librosa库的语音文本输入要求 闲话少说,直接上料! python的librosa库是语音模型进行语音特征提取的常见的库:但使用时请注意,librosa库仅支持wav格式的语音 ...
- python ocr 识别中文pdf_轻松识别文字,这款Python OCR库支持超过80种语言
OCR是什么? 有一款软件叫扫描全能王,想必一些小伙伴听过,这是一个OCR集成软件,可以将图像内容扫描成文字. 所以说,OCR作用是对文本资料的图像文件进行分析识别处理,获取文字及版面信息. OCR的 ...
- 轻松识别文字,这款Python OCR库支持超过80种语言
击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 江汉曾为客,相逢每醉还. OCR是什 ...
- python ocr识别库_轻松识别文字,这款Python OCR库支持超过80种语言
OCR是什么? 有一款软件叫扫描全能王,想必一些小伙伴听过,这是一个OCR集成软件,可以将图像内容扫描成文字. 所以说,OCR作用是对文本资料的图像文件进行分析识别处理,获取文字及版面信息. OCR的 ...
- 微信语音短消息amr文件转WAV
" 微信语音短消息amr文件转WAV." 在<SILK编码语音转WAV格式>中提到过,"腾讯系产品,包括QQ.微信.小程序,在语音相关的实现中,也大量使用到S ...
- 导出合并小文件_关于微信语音导出,这个方法强烈建议~
[阳阳效率工具类] 这是一篇微信语音导出工具分享文章. 背景: 1.前几天临时接到一个任务,需要把微信语音合成导出变成一个MP3格式转发,但微信却没有开放保存语音到本地及转发语音的功能. 2.上周在@ ...
- magicwatch2可以鸿蒙吗,荣耀手表2可以发微信吗?荣耀MagicWatch2支持微信消息回复吗...
近期,荣耀推出了荣耀Magic Watch 2的多款进化版本,荣耀Magic Watch 2 是一款非常智能便携的手表,它选用最佳材质打造绝美质感,让这款小设备在视觉上更加通透有质感.同时它全新的功能 ...
最新文章
- 使用CoreOS及Docker搭建简单的SaaS云平台
- [BZOJ 5074] 小B的数字
- 撸表情开发过程中使用腾讯云存储的接入实例分享
- python中常用的os模块
- JavaEE平台学习之 01开发第一个Servlet程序
- 181108每日一句
- 开放源代码机器人控制软件
- 平板电脑怎么使用计算机,平板电脑怎么用
- json转map几种方法
- SpringCloud整合LCN分布式事务模式
- 【C语言】扫雷游戏(递归实现展开一片)8000字详细教学
- 一条命令实现树莓派摄像头直播推流哔哩哔哩
- windows 命令 系统快捷方式
- 2020起重机司机(限桥式起重机)作业考试题库及起重机司机(限桥式起重机)实操考试视频
- HihoCoder——Trie树
- 如果你也被pyinstaller折磨,建议阅读,pyinstaller打包教程。
- 转载大神神作之识狗君:Server端实现补充
- 最全的Matlab经典教程免费下载
- 二进制空间权重矩阵_空间权重矩阵(SWM)
- HTML和JavaScript的D3文件放置位置和文件下载