提醒:本文最后更新于 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或其他格式》


我现在需要使用silk_v3_encoder.exe,将pcm转换成silk格式,可是我现在没法生成前面的pcm文件,使用ffmpeg -i input.mp3 -f s16le -ar 44100 -acodec pcm_s16le output.pcm 生成的pcm,转换成silk格式存在问题,还望得到楼主的回复,谢谢。
@裸奔的蜗牛: 已在issue回复你了,频率错了,是24000。
程序说明有说到24000。
你好,想问下这个程序只能在Windows下转换是么?
@瑞仔: 看源码,其他平台编译后可用
@kn007: 谢谢
@瑞哥: 不客气
Windows下 可以用dos命令来处理 吗 ?

@宝: 可以的,自己看下命令行参数
@kn007: 找到了 ! 谢谢

小程序 录音 的*.silk 文件 执行命令 false, maybe not a silk v3 encoded file. 直接用软件转化也是显示不是 silk v3 格式的。。。微信又进化了。。。
@宝: 我现在也遇到了这个问题,请问你解决了么?
@瑞仔: 没 ,,如果真是微信换 编码格式了 我这样的弱鸡 肯定搞不定 只能等待大神
@宝: 我碰到跟你一样的问题了,windows下用软件转化单个文件时报指定文件不是silk v3格式
@宝: 小程序的silk文件用base64加密了,需要解码
744600969可以交流下,注名 silk
@宝: 遇到同样的问题,将 base64解码后,再用converter 出错,你们后面解决了吗
@Sam: 。。我都说了,人家已经不是silk v3编码了。
base64后,直接用ffmpeg转。
我的是在Windows上用软件转换是可以成功的,在linux上转换就会显示[Warning] Convert ../58b6704b4bbc7.silk false, maybe not a silk v3 encoded file.
@瑞仔: win转换后,能播放吗?
可以的话,不难解决啊。
@kn007: 能播放,因为是linux小白,所以不是很懂,现在在看converte.sh里的代码,想问下if [ ! -r "$cur_dir/silk/decoder" ]; then里的decoder是自动生成的文件夹么?
@瑞仔: 不是。请再仔细看。。
@kn007: 嗯,我再看看~不懂还会问,有劳大神~
我又来了,
在centos转换成功了,但是只有最初那个文件可以转换,其他的在同个目录下,相同权限转换都不成功,大神,是什么情况哇?我是用单个转换的形式~
@瑞仔: 检查命令。这个没什么道理说有个文件行,其他文件不行。
当然,你可以关闭selinux试试
@kn007: selinux就是关闭的状态,所以还是命令有问题么?我以为一个可以,其他的应该都可以
@瑞仔: 你看下你的命令是否有错,还有命令行报什么错误
@kn007: 转换成pcm的时候不成功,我再看看代码,感觉还是没理清,楼主人真好,即问即答~真的非常感谢~
@瑞仔: 没,希望能帮上你
@kn007: 这个程序本来就帮了我大忙了~
@kn007: 您好,我用您的工具转换一个小程序的文件始终报错,我把文件发您126的邮箱了,有空您帮看看,谢谢
@灯管: 看了,回复了。
@瑞仔: 兄弟你之前的那个显示不是 silk v3 格式是怎么处理的,我看你之前也碰到这个问题后来说windows下能解析了
@灯管: 我Windows下一直都可以解析的~
我又来了,
刚开始我以为centos下有一个转换成功,其他不能转换成功应该是我的问题,后来发现cmd下,phpstudy,exe也是只有那一个可以转换成功,其他就不行,不能生成pcm文件
@瑞仔: 说明其他文件不是silk v3编码的。这个没法,你可以用其他软件尝试转换。
@kn007: 好的哇~介个微信真的是~
@瑞仔: 怎么转换成功的,我也是在windows下可以,在我的 linux服务器上运行sh converter.sh voice/voice.silk mp3就报错:Convert voice.silk false, maybe ffmpeg no format handler for mp3.
大神,微信小程序里的silk文件开头是这样的:data:audio/webm;base64,GkXfo59ChoEBQveBAULygQRC84EIQoKEd2VibUKHgQJChYECGFOAZwH//
是表示webm格式,base64编码的意思么?
@瑞仔: 意思是需要base64解码,用程序解,不要用在线那种网页解,不然二进制编码会丢失。
解码后,用webm解码,就可以了。
@kn007: 我发现在后端存储的时候用base64_decode解码以后又编程正经的silk v3编码的silk文件了
哭死
@瑞仔: 好了,我也看不懂了~
好像不是这样的
@瑞仔: 已经转化成功,感谢作者!!!我之前是从客户端上传云服务器的,现在客户端得先到我的服务器上然后处理完了给云上,一来回好费时间啊.我转wav是为了转文字的, 另外做小程序的几位留个联系方式吧,讨论下相关问题,qq号:36806187, 微信号 dengguan_3366 ;加的时候注明一下 silk 转换之类
大神,我也是在windows环境下运行程序是正常的,但是在我自己服务器的Linux环境上就报错,Convert /Transcoding/voice/voice.silk false, maybe ffmpeg no format handler for mp3.
请问是什么原因,命令是 sh converter.sh voice/voice.silk wav
@hannaseyes: 因为脚本没更新,linux上的。
而且我源码都放出来了,可以自己改下的。
或者等我晚点有时间更新下。
@kn007: 能提示一下吗,或发我个邮箱569797587@qq.com非常感谢,完成后必有重谢