提醒:本文最后更新于 1811 天前,文中所描述的信息可能已发生改变,请仔细核实。
SILK v3编码是Skype向第三方开发人员和硬件制造商提供免版税认证(RF)的Silk宽带音频编码器,Skype后来将其开源。具体可见Wikipedia。
但是现在很难找齐源码,或者说懒得找。
一年前寻找的时候,很少看到。今年过年正好要转换QQ的语音信息(去年又是微信的语言信息),就找了下,顺便做成Shell脚本,具体可见Github项目地址:https://github.com/kn007/silk-v3-decoder。
需要gcc和ffmpeg。gcc是拿来编译silk v3 decoder源码,ffmpeg是拿来转换格式的。
调用很简单,只需一句命令:
sh convert.sh 33921FF3774A773BB193B6FD4AD7C33E.slk mp3
其中:“33921FF3774A773BB193B6FD4AD7C33E.slk”是你要转换的源文件(QQ常见为slk,微信常见为amr);后面的“mp3”是你要输出的格式。
首次使用会编译silk v3 decoder,第二次以后就不用了。
其他的没什么。略微改下,利用nginx+lua或直接用python都可以做成在线版本,暂时没什么时间,就先不搞了。反正本地能用就达到目的了。
注:如果你使用了该代码于商业目的,希望你能赞助我,谢谢!
彩蛋,33921FF3774A773BB193B6FD4AD7C33E.slk.mp3,调试时唱的歌(掩面,太难听。。。
那些忽悠帮你们写功能开发,然后不给钱的,已经好几起了。只想说这样搞,我是不会再更新了。
转载请注明转自: kn007的个人博客 的《解码转换QQ微信的SILK v3编码音频为MP3或其他格式》


@神一样的男子: 可以啊,已经开源了。
github编译下silk encoder,如果你是win,直接在win里面下silk_encoder.exe,然后自己看下命令行参数。就可以将wma弄成silk了。
@神一样的男子: 你如果真的有心,就请赞助页面赞助。
https://kn007.net/donate/
请教下silk_encoder.exe test.silk test.pcm 的命令行的扩张参数都有哪些。比如我想指定采样率怎么设置?例如:ffmpeg 可以用-ar 16000 指定16k采样率。期待回答。
@esiang: 命令行看参数
@kn007: 参数就是采样率,怎么设置?
请教下,同样是碰到了maybe not a silk v3 encoded file.的 warning ,但是issue上的方法试了下都没成功
测试文件: 微信的.amr音频文件
现象:mac上 测试amr文件和converter.sh 在同级目录 本地使用 sh converter.sh 文件全路径.amr mp3可以finish 但是使用 sh converter.sh 文件名 mp3 就 maybe not a silk v3 encoded file.
然后按照文件使用全路径名的方式放到了服务器,但是服务器尝试无论使用全路径还是别的,都是报maybe not a silk v3 encoded file.
按照issue上看到的可能是ffmpeg版本过老,从4.0.2 升级到了 4.2.1还是一样报maybe not a silk v3 encoded file.
@zmo: 看不懂提示么。。不是silk v3格式的文件。
你看下是不是普通base64加密的。
windows下 mp3特殊编码成silk 替换到微信可以播放,,用cmd命令silk_v3_encoder 1.mp3 1.silk 转换的 替换后不能正常播放。 命令对吗
@gta: 仔细看说明
@kn007: C:\Users\Administrator\Desktop\silk-v3-decoder-master>silk_v3_encoder 4.mp3 4.s
lk
********** Silk Encoder (Fixed Point) v 1.0.9.6 ********************
********** Compiled for 32 bit cpu *******************************
Input: 4.mp3
Output: 4.silk
API sampling rate: 24000 Hz
Maximum internal sampling rate: 24000 Hz
Packet interval: 20 ms
Inband FEC used: 0
DTX used: 0
Complexity: 2
Target bitrate: 25000 bps
Packets encoded: 149
File length: 2.980 s
Time for encoding: 0.061 s (2.052% of realtime)
Average bitrate: 26.062 kbps
Active bitrate: 26.062 kbps
想问下哪个参数是特殊编码 支持微信qq的
@gta: 看说明
@kn007: 只有sh 用的解码的说明 编码的在哪
楼主,用了你开源的代码,很好用。非常感谢,这里想另外请教一个问题。就是 silk转换为pcm数据,除了采样率还有其他属性可以怎么获取到吗。比如是否有 单双声道,比特率,采样精度等属性。好像文件头没有保存这些信息。看到还望回复。谢谢。
很好用,非常感谢,不过如果没有点过收藏,就不会生成silk后缀的语音文件,原先的文件转换不了。请教怎么破?
感谢楼主的工具!github上下载的程序windows版的exe会被360当成病毒删掉,所以不能用GUI程序。跟我有类似问题的网友可以用下面的windows命令批量的转换silk格式文件到wav格式。
C:\silk-v3-decoder-master\windows>for %f in ("C:\temp\*.silk") do silk_v3_decoder.exe "%f" "c:/temp/%~nf.pcm"
C:\silk-v3-decoder-master\windows>for %f in ("c:\temp\*.pcm") do ffmpeg.exe -y -f s16le -ar 24000 -ac 1 -i "c:\temp\%~nf.pcm" "c:\temp\%~nf.wav"
已赞足9.99亿,愿全宇宙的金钱都追你而来
@ken: 谢谢支持
我说三个事:
1.这代码解决了不少问题,如果程序能赚钱,一定回来打赏;
2.2021年快到了,祝大家新年快乐;
3.听到歌声我还以为是我唱的......
@jy: 谢谢~也提前祝你新年快乐
楼主你好,请问我想用encoder进行编码silk,会报以下错误
ot@iZj6c956trgtqzz59cpq16Z test]# make Encoder
cc Encoder.o -o Encoder
Encoder.o: In function `main':
Encoder.c:(.text+0x6a2): undefined reference to `SKP_Silk_SDK_get_version'
Encoder.c:(.text+0x86a): undefined reference to `SKP_Silk_SDK_Get_Encoder_Size'
Encoder.c:(.text+0x8bb): undefined reference to `SKP_Silk_SDK_InitEncoder'
Encoder.c:(.text+0xaad): undefined reference to `SKP_Silk_SDK_Encode'
collect2: error: ld returned 1 exit status
make: *** [Encoder] Error 1
[root@iZj6c956trgtqzz59cpq16Z test]#