项目简介
本项目名为pilk-nogil
,是一个基于Python的微信语音编解码工具。它是foyoux/pilk
项目的改进版本,在编解码过程中释放了全局解释器锁(GIL),更适合多线程处理,适用于需要处理大量语音数据的场景。
项目的主要特性和功能
- 多线程支持:释放GIL,提升多线程环境下的编解码效率。
- 微信语音支持:针对微信语音格式优化,支持标准SILK格式和微信特有的语音格式。
- 音频文件转换:可将MP3、AAC、M4A等音频文件转换为PCM格式,再转为SILK格式。
- 快速入门:提供简单API接口,方便用户快速进行语音编解码操作。
- 依赖管理:依赖
ffmpeg
进行音频文件与PCM格式转换,推荐用PyAV
或pydub
进行Python层面的音频处理。
安装使用步骤
1. 安装依赖
确保已安装ffmpeg
,然后通过pip安装pilk-nogil
:
bash
pip install pilk-nogil
2. 使用示例
2.1 音频文件转PCM
使用ffmpeg
将音频文件转换为PCM格式:
bash
ffmpeg -y -i input.mp3 -vn -ar 44100 -ac 1 -f s16le output.pcm
2.2 PCM转SILK
使用pilk-nogil
将PCM文件编码为SILK格式:
```python
import pilk_nogil
duration = pilk_nogil.encode("output.pcm", "output.silk", pcm_rate=44100, tencent=True) print("语音时间为:", duration) ```
2.3 SILK转PCM
使用pilk-nogil
将SILK文件解码为PCM格式:
```python
import pilk_nogil
duration = pilk_nogil.decode("output.silk", "output.pcm") print("语音时间为:", duration) ```
3. 高级用法
3.1 使用pydub
进行音频转换
```python import os from pydub import AudioSegment import pilk_nogil
def convert_to_silk(media_path: str) -> str: media = AudioSegment.from_file(media_path) pcm_path = os.path.splitext(media_path)[0] + '.pcm' silk_path = os.path.splitext(media_path)[0] + '.silk' media.export(pcm_path, 's16le', parameters=['-ar', str(media.frame_rate), '-ac', '1']).close() pilk_nogil.encode(pcm_path, silk_path, pcm_rate=media.frame_rate, tencent=True) return silk_path ```
3.2 使用PyAV
进行音频转换
```python import os import av import pilk_nogil
def to_pcm(in_path: str) -> tuple[str, int]: out_path = os.path.splitext(in_path)[0] + '.pcm' with av.open(in_path) as in_container: in_stream = in_container.streams.audio[0] sample_rate = in_stream.codec_context.sample_rate with av.open(out_path, 'w', 's16le') as out_container: out_stream = out_container.add_stream('pcm_s16le', rate=sample_rate, layout='mono') try: for frame in in_container.decode(in_stream): frame.pts = None for packet in out_stream.encode(frame): out_container.mux(packet) except: pass return out_path, sample_rate
def convert_to_silk(media_path: str) -> str: pcm_path, sample_rate = to_pcm(media_path) silk_path = os.path.splitext(pcm_path)[0] + '.silk' pilk_nogil.encode(pcm_path, silk_path, pcm_rate=sample_rate, tencent=True) os.remove(pcm_path) return silk_path ```
通过以上步骤,可轻松将音频文件转换为微信语音格式,并进行相应的编解码操作。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】