transform audio file to silk
Project description
Graiax-silkcoder
现在版本:
这,是一个Python的silk转码器
通过将kn007/silk-v3-decoder通过简单的封装制成
安装
从 PyPI
# 如果需要转换非wav的音频文件,则需要自行安装ffmpeg
pip install graiax-silkcoder
# 也可以通过下面的方式使用imageio-ffmpeg中的ffmpeg
pip install graiax-silkcoder[ffmpeg]
# 在 0.3.0 后,可以通过以下方式使用libsndfile来解析音频
pip install graiax-silkcoder[libsndfile]
注: 假设你是Windows用户,安装时出现了error: Microsoft Visual C++ 14.0 is required:
请安装Microsoft C++ Build Tools
从 conda-forge
conda install graiax-silkcoder -c conda-forge
# 如果需要 ffmpeg,可以一并从 conda-forge 安装
conda install ffmpeg -c conda-forge
Q&A
ImportError:DLL load failed while importing _silkv3:找不到指定的模块
相关issue: #23
现在本库已经通过 Github Actions
来预编译 whl 了,出现这种问题一般不是说没有编译。
如果遇到这种问题,请在这里下载最新版本的 C++ Redistributable
IOS 音频问题
IOS 的音频解码器因为某些特性,只支持解码 25kbps 以下 的音频。
所以在 0.2.6 中,我们新增了一个 ios_adaptive
参数(默认为 False)。
当为 True 时,将把自适应最高码率限制在 24kbps 以下(一般是限制在 100kbps 以下)
ffmpeg 转换成 aac
格式的问题
因为 graiax-silkcoder
全程采用 PIPE 的形式跟 ffmpeg 传输,
所以假设你想要将 silk 转码成 aac 的时候,就会出现一些问题。
解决方法如下
await silkcoder.async_decode("a.silk", "a.m4a", audio_format="adts")
注:ADTS 是 AAC 音频的传输流格式
自定义ffmpeg_path
可能有一些用户会想要自定义ffmpeg的路径 你可以使用以下方法解决:
from graiax import silkcoder
silkcoder.set_ffmpeg_path("./ffmpeg")
CLI(0.2.0新增)
使用办法
# 其他参数与encode / decode 保持一致
python -m graiax.silkcoder encode -i "a.wav" "a.silk"
python -m graiax.silkcoder decode -i "a.silk" "a.wav"
是 ffmpeg
还是 libsndfile
在该项目最开始的时候,就有人吐槽过:为了简简单单的音频转换去下载一个大的离谱的 ffmpeg,这也太麻了吧。 (注:虽然说 ffmpeg 可以通过 disable 一大堆不必要视频/滤镜库来达到减小体积的目的,但是这需要自己编译,对小白挺不友好的)
所以,从 0.3.0 开始,开始增加了通过 libsndfile 来使用解析音频。
libsndfile 是一款广泛用于读写音频文件的C语言库, 他支持包括 flac, ogg, opus, mp3[1]等多种格式。
因为
使用方法
Tips:
因为同步和异步的区别只有前面是否有一个 async_
所以下面我们就只拿同步方法距离了
编码
你可以传入 pathlike、str、bytes 作为你的输入
from io import BytesIO
from pathlib import Path
from graiax import silkcoder
data: bytes = silkcoder.encode("a.wav")
data: bytes = silkcoder.encode(Path("a.wav"))
data: bytes = silkcoder.encode(Path("a.wav").read_bytes())
data: bytes = silkcoder.encode(BytesIO(Path("a.wav").read_bytes()))
它也能输出到 filelike、bytes
from io import BytesIO
from pathlib import Path
from graiax import silkcoder
data: bytes = silkcoder.encode("a.wav")
silkcoder.encode("a.wav", "a.silk")
silkcoder.encode("a.wav", Path("a.silk"))
silkcoder.encode("a.wav", BytesIO())
它能做到截取一部分来编码
from graiax import silkcoder
#从最开始截取 5s
silkcoder.encode("a.wav", "a.silk", t=5)
#从第 10s 开始截取 5s
silkcoder.encode("a.wav", "a.silk", ss=10, t=5)
你可以指定你的编码器
from graiax import silkcoder
from graiax.silkcoder import Method
silkcoder.encode("a.mp3", "a.silk", codec = Method.libsndfile)
silkcoder.encode("a.mp3", "a.silk", codec = Method.ffmpeg)
在 ffmpeg 模式下,你甚至可以直接传入 ffmpeg 参数
from graiax import silkcoder
# 虽然 -vn 是可有可无,但我想不出其他例子了
silkcoder.encode("a.mp4", "a.silk", codec = Method.ffmpeg,
ffmpeg_para = ["-vn"])
你还可以指定输出 silk 的码率大小
from graiax import silkcoder
# 默认状态下将会将尝试将目标语音大小限制在980kb上下
silkcoder.encode("a.wav", "a.silk", rate = 70000)
解码
跟编码一样,你的输入和输出都支持 pathlike、str、bytes
在非 wave 模式下,你可以写 metadata
from graiax import silkcoder
from graiax.silkcoder import Method
metadata = {"title": "xx群",
"artist": "xx网友"}
# Tips: 如果你硬是选了 wave,他会忽略 metadata 参数而不是报错
silkcoder.decode("a.silk", "a.flac",
codec = Method.libsndfile,
metadata = metadata)
在 ffmpeg 模式下,你可以选择输出的码率(仅对于有损格式)
在 libsndfile 模式下,你可以选择输出的质量(vbr)(仅对于有损格式)
from graiax import silkcoder
from graiax.silkcoder import Method
#ffmpeg 转换成 128kbps 的 mp3
silkcoder.decode("a.silk", "a.mp3",
codec = Method.ffmpeg,
rate = 128000)
#libsndfile 转换为 压缩率最大 的 flac (注,quality 参数只能在 0~ 1 )
silkcoder.decode("a.silk", "a.flac",
codec = Method.libsndfile,
quality = 1)
你甚至可以在 ffmpeg 模式下输入 ffmpeg 参数
from graiax import silkcoder
silkcoder.decode("a.silk", "a.mp3", ffmpeg_para = ["-ar", "44100"])
注
graiax-silkcoder
对libsndfile
的支持来源于第三方库soundfile
,而该库在 1.1.0 之前并不支持mp3、opus
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Hashes for graiax_silkcoder-0.3.0-cp310-cp310-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2a283e35bea606898c3644d2db1ab5e9f1dbc2de66aac85dcab722d8919ecb9a |
|
MD5 | beb588bbeb2f9147bedea0b8eebbea70 |
|
BLAKE2b-256 | 4a1079bf39dc08b93ca7c76c5554a456d1e1eaf156a3ab3208aff65d5603fda6 |
Hashes for graiax_silkcoder-0.3.0-cp310-cp310-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a64549a59bfb53c2ae3b5b04e116291469ce89d13a67ed18f2f22cf3c8265c4e |
|
MD5 | 3dd58ee857a4f1950c7e7cc453eb1e45 |
|
BLAKE2b-256 | 55fcdb999da2e3e372eb904967b69aae610a20ce7fee386e3cd45cc56db7953f |
Hashes for graiax_silkcoder-0.3.0-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 26ef859fbaef0cff9ab07ccb8e252450bdbc1bc14d8291b97e5454a2d900369e |
|
MD5 | 0da890d416d11c7e21f34b1b87a6eb2c |
|
BLAKE2b-256 | 1cd7e73ce482c77a47d25ae7235ecd962b37dbcd2c2e796b6b6536193c184fcb |
Hashes for graiax_silkcoder-0.3.0-cp310-cp310-musllinux_1_1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 11d591b080332879c76654a9424dde88681e3820a7f2715c87f2add0b83f5dd6 |
|
MD5 | a62af619868e22c7f097c7d8d01cdf42 |
|
BLAKE2b-256 | 26a70b2a076259d908f2a0c1c4d462f978e97570dcc80de6b4d212083eff0245 |
Hashes for graiax_silkcoder-0.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1553941c9d8a546a29c7b7b905defb88cf0214f9b7acc3b65d4991a45989f771 |
|
MD5 | b56ad5b9299bc90ff3a74ffd5eed7efd |
|
BLAKE2b-256 | fb6dc35f98e85515479a2d2c796b0425fbe1b52ec343418cc8c894ee7fe42dd4 |
Hashes for graiax_silkcoder-0.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 633ec928d5685de8ae8bdce666472b0b7099ade6850afbc58f0d579bc38a080c |
|
MD5 | 2df84bcd5c2ee38300f3259922beb475 |
|
BLAKE2b-256 | f6157590a42274d8fca05ed7fb748997a50c1e541065eb604e77d5fdd831a705 |
Hashes for graiax_silkcoder-0.3.0-cp39-cp39-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1ad42b72300be92e2b3f611ee0f1fc501ed64dddf11b470c1024cf921f0afa87 |
|
MD5 | d791e67cc2b7c580b0b36897980e8139 |
|
BLAKE2b-256 | 9695e330fb86309159499f491bc3a647cf1fcf1700ae69e38b23bc77d2d4400b |
Hashes for graiax_silkcoder-0.3.0-cp39-cp39-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2c724cd73394572ecf7e76d5cf92efb8558b41adcfdb33fd58fde098c2617459 |
|
MD5 | e81efe82f475f070d8f32af32fc35897 |
|
BLAKE2b-256 | ecdcd0d6609643033da3fc12173a987b8eb3638cfe95582ed1d8ece6daa19fc3 |
Hashes for graiax_silkcoder-0.3.0-cp39-cp39-musllinux_1_1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3f6ad82093c68a662eb012c4f388ce956da103f8109d8175801f679da12cc209 |
|
MD5 | 3f0cda5c71caa9df4df35b5e4fd8032b |
|
BLAKE2b-256 | 6ec6093c73c2b9355641d6584738cdce3c56200a0ded8f88e48c2b7f83df1f6c |
Hashes for graiax_silkcoder-0.3.0-cp39-cp39-musllinux_1_1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 109b0db86e14015e87feea113527d9cf5510d999121bee5dfb6dab61028864a0 |
|
MD5 | 0e83cd1e4ef1f435fad7c7ddbf9034c8 |
|
BLAKE2b-256 | 02bf4ff91d1ebdd1d0871094d04732888a05416ba233ae0de17e618e00be993a |
Hashes for graiax_silkcoder-0.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 500b764c005ab105bcc34e89f93a17531e92c659ab93835254a8e89a69c0a78b |
|
MD5 | d19a1581db0676043e513711eaca50c4 |
|
BLAKE2b-256 | f61156b663411e5fed379cedafa953b534ee6cb2be6f9c86033077f99359210f |
Hashes for graiax_silkcoder-0.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 26fff7bdb6373c78087da08a1de40725b960502fc5aa5885ace849c4acd99cf2 |
|
MD5 | 9e292eaf823d6d9b32825d2f6746774a |
|
BLAKE2b-256 | c67a200a2381d6b7e1674a0b164cb9c942b40bce89df027b98a7175a759a21c2 |
Hashes for graiax_silkcoder-0.3.0-cp38-cp38-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 01366c83a0d4b9fff2f19070358a6eeaaa3073fefbad56553c37492ad99d8b24 |
|
MD5 | 72197898d69b6c73161ed97d4cbfa7de |
|
BLAKE2b-256 | af0c1fc3381088f40df251e69840ae474e15d5636f3f5e6b8878ae18310afa05 |
Hashes for graiax_silkcoder-0.3.0-cp38-cp38-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d8794e3f2d5c92817c67e22000c97faef2c21bb252ec5b8794bfa64b7e7098d5 |
|
MD5 | 3244f732c28c7aaf37ef241d8d0ab3c8 |
|
BLAKE2b-256 | 0069ef63d7b7c0fa1d7fedc0d87333753f154ebdc03f6d0d55c2e0ddbf0c01b2 |
Hashes for graiax_silkcoder-0.3.0-cp38-cp38-musllinux_1_1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 081c7fdb811670aa23a086f070ed7d5442d60ae01243c18555af2843a050d4f9 |
|
MD5 | c86d64a5e3676471aa05bbb175481989 |
|
BLAKE2b-256 | ddcd562b6aa1373600f1d6960d32f4fabedd05eba3f4ac7a4b6a392b6ef9febf |
Hashes for graiax_silkcoder-0.3.0-cp38-cp38-musllinux_1_1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8d682b5d5585c84e171fd72bc5cd93b542667c95966fd8600f36d3e796ceaf09 |
|
MD5 | 4e1eaf21ccbc670bce62350b2e55dca6 |
|
BLAKE2b-256 | 082ebf751e6cc563c1182ce12659da834f2f86847125b2814fddcd88d8a12891 |
Hashes for graiax_silkcoder-0.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 015f21a206002ab3bf823249b6b48c43be5ded7136286c44d635920cc8c68c56 |
|
MD5 | 42705562d7c6f4b7aeab23d56e28c25a |
|
BLAKE2b-256 | fd01f96ae5688335094fc77e44cdd737b92d577adc121f850cdf17649b9c1cc5 |
Hashes for graiax_silkcoder-0.3.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7c2e9ded04d253b7f085e09ec541a0a3a3fa3d0116eca406fa9f9cf8ff5315cc |
|
MD5 | f6f4e995a659caea7c011bdc9c6eaa7b |
|
BLAKE2b-256 | 6eb0a9d8e362c892d55a22255f0ed36bcb6bf37ea6f86187a52e65d7cc3898ec |