kn007的个人博客
♥ You are here: > > > 解码转换QQ微信的SILK v3编码音频为MP3或其他格式

解码转换QQ微信的SILK v3编码音频为MP3或其他格式

by | 210 Comments

skype-silk-v3

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或其他格式

donate
有所帮助?
Tags: , , ,

Comments

210 Comments立即评论
Loading...
  1. 回复

    非常感激大侠的分享,目前使用文件进行转码没有问题了!
    但是我是希望在服务器端架设一个转码工具,然后调用语音API进行语音识别。最好的方式是,输入输出都是使用buffer数据,但我不知道怎么操作。我用的是nodejs,研究了半天子进程child_process.spawn,可以使用文件名进行转码,如:child_process.spawn('./silk/decoder', ['./0.silk', './newnew.pcm']);
    但如何使用buffer数据,就不知道如何操作了? silk/decoder中,默认是文件名输入,是不是不支持buffer或者stream,如何进行修改呢?

    1. MOD回复

      @匡匡: 说实在的,我不大懂流这块,而且nodejs仅限简单的一些。。可能帮不到你。
      你可以参考下源码,看下如何转成node版。

      利用node直接读包,获取到的数据就是你所说buffer,然后看下识别API有无node版,进行识别。

      但如果你只想达到功能性,就还是先利用node调用系统执行转换,然后node读取文件后,给API识别

  2. 回复

    你好,我linux下silk转wav可以转,转mp3提示Convert 2017061918495.silk false, maybe ffmpeg no format handler for mp3.不太懂这个,请问还需要怎么调整才能转成MP3 :cry: :cry:

    1. MOD回复

      @ybblue: 英文不是很清楚么。。。你的ffmpeg不支持mp3转换,你更新个版本或者自己编译ffmpeg

    2. 回复

      @kn007: ;-) ;-) 解决了。少装了mp3转码的,谢谢大神

    3. 回复

      @ybblue: 你最后怎么转成功的,求教

  3. 你好,我linux下silk转wav可以转,转mp3提示Convert 2017061918495.silk false, maybe ffmpeg no format handler for mp3.。
    我直接下载github的zip包,解压进服务器,然后调用相关命令
    sh converter.sh 33921FF3774A773BB193B6FD4AD7C33E.slk mp3

    1. @小程序开发: 要怎么安装ffmpeg??安装在哪

    2. MOD回复

      @小程序开发: 请自行搜索

    3. MOD回复

      @小程序开发: 。。。你这个昵称白取的吗?

    4. @kn007: 玩攻击是吧 ??草泥马的

    5. MOD回复

      @小程序开发: 呵呵,你用别人的东西,这么不客气的?有种别用啊。
      ffmpeg怎么装,每个系统都不一样,你啥都没说,你不会自己搜索一下吗?
      难道要我全部帮你列出来?

    6. @kn007: 你是狗吧,请教你,还嘲笑别人。

    7. MOD回复

      @小程序开发: 你一开发的,居然连搜索,连安装运行环境都不会,脾气还这么爆,动不动就口头攻击,恐怕连产品经理都不会这样。
      我怎么嘲笑你了?
      我只是觉得一开发的,居然不会自己搜一下,很无语。
      倒是你这种,越是什么不会的,名头还大,脾气还差。走好不送。

    8. @kn007: 老子就是经理以上,你BB什么,像你这种,就会嘲笑别人的狗

    9. MOD回复

      @小程序开发: 可以啊,经理亲自干活,还干成这逼样

    10. MOD回复

      @小程序开发: 你的词汇量真低,还有你这最多算保安经理,估计还排不上

    11. 回复

      @小程序开发: @小程序开发: 你是真的傻逼

    12. MOD回复

      @小程序开发: 还有一点请你注意,我并没有收你一分钱,也没求着你用我的东西。
      回不回答是我的自由,而且你所说的嘲笑,也只是建立在你自己主观想法。
      那么多人问我,你自己可以看看,我是不是都做了评论。
      像你这种问题都不知道回答几次,你自己不查看以前的评论,不搜索,直接伸手要,还要怪别人不好好回答你?
      程序与源码你爱用不用,反正我已经分享了。

  4. 回复

    你好,博主,我是用这个插件也一样提示 false, maybe ffmpeg no format handler for mp3.
    ffmpeg是编译安装的,在任何目录都能 使用 ffmpeg -执行命令。
    请帮忙解决一下,解决后回赞助的,谢谢

    1. MOD回复

      @涂夜: 你需要看看ffmpeg有没有mp3转换支持

    2. MOD回复

      @涂夜: 你的邮件收到了,我现在回去的路上,到时答复你

    3. @kn007: 别信他

    4. MOD回复

      @小程序开发: 大哥,你是弱智吗?
      at人都不会。。
      人家会跟你一样不会明辨是非,跟个刚出来的似的? :twisted:

      我已经屏蔽你了,免得大家看到你,难受。

    5. 回复
    6. MOD回复

      @涂夜: 看到了,你的ffmpeg是编译安装的,里面没有mp3模块(libmp3lame),CentOS7可以直接使用epel源通过yum install ffmpeg安装,无需编译,编译反而缺少很多组件(如果你没有配置进去的话),我给你看看我的ffmpeg:
      84a8ca224a7121fcd91e308878bc540e.png

    7. 回复

      @kn007: 谢谢

    8. MOD回复

      @涂夜: 不客气

    9. 回复

      @kn007: 博主,你好,使用这个插件能将小程序的silk格式转换成mp3,在网页播放没问题,但调用小程序的音频播放API,发现这个转换的mp3文件只能播放5秒,然后自动结束,播放网上的mp歌曲是没有问题的,转换后的mp3文件只能播放5秒钟

    10. MOD回复

      @涂夜: 这个我帮不了你,我不做小程序开发,你可以发个工单问问

  5. 回复

    大侠,您好,求救啊!一段amr格式的音频想转mp3,但妹子真心看不懂那些代码!谢谢帮忙! :cry: :cry: :cry:

    1. MOD回复

      @赵四喜: 你可以下载我的工具:https://kn007.net/topics/batch-convert-silk-v3-audio-files-to-mp3-in-windows/
      windows下就可以转换,如果你想偷个懒并且信任我,可以将语音发送到kn007@126.com,转换后,我发回你。

  6. 回复

    你好,前几天一切都ok,今日上午突然无法转换来自小程序的语音文件,非silk,解base64.我用您的工具也试过,windows下那个,前几天都是ok的,现在可以convert但是0kb,您有空可以试试给一下反馈吗?

    1. MOD回复

      @rains: 我不开发小程序,所以没什么研究。
      可以的话,你可以发个语音文件给我 kn007@126.com。我到时试一下。

      不过说实在的,我可能不一定会再完善了,比较忙

    2. MOD回复

      @rains: 你可以先发过来看看,如果不复杂,好解决,我会帮忙

    3. 回复

      @kn007: 嗯,多谢,能够帮忙定位一下问题就最好了。

    4. MOD回复

      @rains: 好的,我回头帮你看下

    5. MOD回复

      @rains: 刚刚试了下,不能识别文件格式,我拿给chrome,也播放不出来,按道理webm,chrome是一定能播放的。
      这个文件可能并非webm,但是识别不出来,我试了几种流媒体,都不行 :sad:

      你要不发个工单问问, :oops:

      我今晚回到家再试试看其他办法能不能解。

    6. MOD回复

      @rains: 帮不上你,试了很多,都不行。 :grin:

    7. 回复

      @kn007: 最新版的微信,小程序录音的文件silk,base64解密后的webm确实无法播放,莫非微信又做了什么手脚 :o 源文件是这个:http://7sbmf5.com1.z0.glb.clouddn.com/tmp_54507975o6zAJs-QMdFxbFBoLOXFB5FbfzaY3fafbaa0e38bd15375044596825e71df.silk 麻烦大神有空看下

    8. MOD回复

      @eric: 之前也有人发过这种,但是我分析不出来,如果你愿意问下小程序官方最好了,如果能把结果告诉我就更好了。

    9. MOD回复

      @eric: 而且说实在的,这些文件无一例外都特别大。。。

    10. 回复

      @kn007: 早上发邮件给微信官方了,看能不能得到答复,如果能解决我把结果同步给你~

    11. MOD回复

      @eric: 好的,非常感谢

    12. 回复

      @kn007: 我也是遇到这个问题。

    13. 回复

      @eric: 那个小程序 silk转码 mp3的你弄出来了吗

    14. MOD回复

      @eric: hey,兄弟,官方有回复吗?
      我看又有很多人在问,谢谢。

  7. 回复

    我用你的 converter_beta.sh 可以将微信小程序的转码成功,但是转码后全是噪音,该这么解决?

    1. MOD回复

      @阿亮: 小程序不是silk v3编码,是webm,肯定转不了。
      你要转用silk2mp3

    2. 回复

      @kn007: 服务器是linux的,silk2MP3是 windows版本的,可以通过修改shell脚本支持小程序转码吗?看其他程序员的评论,base64解码,然后ffmpeg,好像也不行!!谢谢大神,回复!! :oops:

    3. MOD回复

      @阿亮: 可以啊,自己改一下就行了。
      就是base64解码,然后用最新ffmpeg,或者最新webm库解码就行

    4. 回复

      @kn007: 我不怎么会写shell脚本,大神能帮忙修改下吗?

    5. MOD回复

      @阿亮: 没时间最近。不好意思

  8. 回复

    虽然看了很多,还是看不懂,却看到博主人很好,哈哈哈,欣赏你 :mrgreen:

    1. 回复

      @孙尐: 你整出来了吗?

  9. 回复

    我发现用这个encoder转换成mp3以后再用decoder转换此mp3得到的silk文件与源文件不同
    这使得微信小程序无法播放该文件
    已经在您的github留言,请问能否帮忙看下原因

    1. MOD回复

      @daisyli: 因为微信小程序更改过协议,而且小程序语音本身并非silk v3编码,我对小程序并无研究。
      样本太少,而且它是非标文件,我分析不出。
      如果知道加解密方式,我可以找时间帮忙看看。

    2. 回复

      @kn007: 我觉得特别奇怪的是,小程序的silk文件是可以转换到正常mp3的,所以我在想会不会是encode和decode过程中有某些不一致导致的。
      如果有加密情况存在的话 那第一步silk->mp3就应该是不是会有问题。
      您有什么推荐的方向吗?我可以自己再研究下

    3. MOD回复

      @daisyli: 推荐方向就是研究VP8/VP9 Codec、WebM Parser

    4. 回复

      @kn007: 此外 您的第三种encode方式是webm->base64->添加文件头的方式这个我理解,然而1、2种encoding方式的结果却和源文件不一致,能否告诉我一下您encode和decode中实际使用的命令?

    5. MOD回复

      @daisyli: 可以明确的说,silk v3编码的话,腾讯系与标准是有差异的。只不过他的协议很简单所以直接就可以转。你可以看下silk v3的源码,我已经公开了编解码方式。
      现在小程序语音能解码,只是因为说你还比较幸运,因为现在小程序语音有两种不同编码方式,其中一种可以正常解码,另外一种不行。而编码小程序语音,现在则完全没有头绪。
      可以问官方的事,麻烦你问下官方,问完你答复我一声也可以。
      我本身不参与小程序开发,所以不大清楚。

icon_wink.gificon_neutral.gificon_mad.gificon_twisted.gificon_smile.gificon_eek.gificon_sad.gificon_rolleyes.gificon_razz.gificon_redface.gificon_surprised.gificon_mrgreen.gificon_lol.gificon_idea.gificon_biggrin.gificon_evil.gificon_cry.gificon_cool.gificon_arrow.gificon_confused.gificon_question.gificon_exclaim.gif