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

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

by | 347 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

347 Comments立即评论
Loading...
  1. LV1回复

    检查了,安装了GCC 是相同的文件 在第一台服务器上 测试没有问题
    [OK] Convert /usr/local/silkv3/g8at6vgggVf6I8ng68z6VN5gGj8FN1.silk To /usr/local/silkv3/g8at6vgggVf6I8ng68z6VN5gGj8FN1.wav Finish.

    1. MOD回复

      @小菜一枚: 直接
      /usr/local/silkv3/silk/decoder /home/web/hongbao/public_html/attachment/audios/2/2017/09/g8at6vgggVf6I8ng68z6VN5gGj8FN1.silk /home/web/hongbao/public_html/attachment/audios/2/2017/09/g8at6vgggVf6I8ng68z6VN5gGj8FN1.pcm
      输出结果怎么样?

      你在第二台机,也是git clone项目吗?还是从第一台机子复制过去的呢?最好在第二台机删除/usr/local/silkv3/,然后重新git clone。

  2. LV1回复

    [root@iZp7xdvev66p8eZ ~]# sudo /usr/local/silkv3/silk/decoder /home/web/hongbao/public_html/attachment/audios/2/2017/09/g8at6vgggVf6I8ng68z6VN5gGj8FN1.silk /home/web/hongbao/public_html/attachment/audios/2/2017/09/g8at6vgggVf6I8ng68z6VN5gGj8FN1.pcm
    ********** Silk Decoder (Fixed Point) v 1.0.9.6 ********************
    ********** Compiled for 64 bit cpu *******************************
    Input: /home/web/hongbao/public_html/attachment/audios/2/2017/09/g8at6vgggVf6I8ng68z6VN5gGj8FN1.silk
    Output: /home/web/hongbao/public_html/attachment/audios/2/2017/09/g8at6vgggVf6I8ng68z6VN5gGj8FN1.pcm
    Error: Wrong Header !AMR
    #!
    [root@iZp7xdvev66p8eZ ~]# sh /usr/local/silkv3/converter_beta.sh /usr/local/silkv3/g8at6vgggVf6I8ng68z6VN5gGj8FN1.silk wav
    [OK] Convert /usr/local/silkv3/g8at6vgggVf6I8ng68z6VN5gGj8FN1.silk to /usr/local/silkv3/g8at6vgggVf6I8ng68z6VN5gGj8FN1.wav success, but not a silk v3 encoded file.
    [root@iZp7xdvev66p8eZ ~]# sh /usr/local/silkv3/converter.sh /usr/local/silkv3/g8at6vgggVf6I8ng68z6VN5gGj8FN1.silk wav
    [OK] Convert /usr/local/silkv3/g8at6vgggVf6I8ng68z6VN5gGj8FN1.silk to /usr/local/silkv3/g8at6vgggVf6I8ng68z6VN5gGj8FN1.wav success, but not a silk v3 encoded file.

    1. MOD回复

      @小菜一枚: 你确定你两台服务器转换相同的文件,都是使用converter.sh?而且没使用过converter_beta.sh?
      错误原因很明显,源文件是非Silk v3编码文件,而是AMR的文件(起码头部是这样说的)
      至于为什么converter_beta.sh后,converter.sh也可以了,那是因为结果文件存在了,converter.sh只是判断文件来提示。
      你如果确定g8at6vgggVf6I8ng68z6VN5gGj8FN1.silk是源文件的话,那第一台不可能能转换成功。注意:converter_beta.sh是会修改源文件,他会为源文件添加AMR头来强制转换。如果你不确信文件是无头AMR,那么就不要用converter_beta.sh。converter_beta.sh只是提供一种方法,而不是让你去使用。

    2. MOD回复

      @小菜一枚: 简单来说,新的服务器,请重新git clone。
      待转换的文件,也最好是新的,最少也要保证源文件完整性。而且必须是silk v3编码的(不要通过后缀来看)。
      没有把握,不要用converter_beta.sh,错误的选择,只会导致源文件破坏,转换出的文件无法播放或是杂音。

    3. MOD回复

      @小菜一枚: 回复评论,请点回复按钮。别那么随意,一直创建新的回复。谢谢。

    4. LV1回复

      @kn007: 不好意思,没注意,我在努力试试,谢谢指导

    5. MOD回复

      @小菜一枚: 客气了。明天公司开会,我先睡了。晚安。祝你好运。

    6. LV1回复

      @kn007: 最后一个问题,现在可以转换了,在命令行可以,但是通过php命令执行,却报错 0 => '[33m[Warning][0;10m Convert /home/web/hongbao/public_html/attachment/audios/2/2017/09/lhC6vyYIkvZ7FfvM2iTmOvVIO7W17w.silk false, maybe ffmpeg no format handler for wav.',

      [root@iZp7xdvev66p8eZ ~]# sh /usr/local/silkv3/converter.sh /home/web/hongbao/public_html/attachment/audios/2/2017/09/lhC6vyYIkvZ7FfvM2iTmOvVIO7W17w.silk wav
      [OK] Convert /home/web/hongbao/public_html/attachment/audios/2/2017/09/lhC6vyYIkvZ7FfvM2iTmOvVIO7W17w.silk To /home/web/hongbao/public_html/attachment/audios/2/2017/09/lhC6vyYIkvZ7FfvM2iTmOvVIO7W17w.wav Finish.

    7. MOD回复

      @小菜一枚: ...ffmpeg给php权限调用。或者把ffmpeg,授权给php,并且给777权限
      不建议用php实现这个功能,小心被攻击。

    8. LV1回复

      @kn007: ffmpeg给php权限调用 这一步怎么做呢? :?:

    9. MOD回复

      @小菜一枚: linux权限授权,你可以自己搜索。
      还有ffmpeg用绝对路径。

    10. LV1回复

      @kn007: 老师,又遇到个问题,另一台服务器,php执行命令后,返回NULL,未能成功转换,命令行root转换没有问题

    11. MOD回复

      @小菜一枚: 检查一下权限问题,看下是不是php权限问题,还有写入目录也要记得授权。

    12. LV1回复

      @kn007: 1.写入目录权限排除:php可上传文件
      2.converter.sh目录给了777
      返回还是NULL

    13. MOD回复

      @小菜一枚: 这个你只能自己trace了,你自己加断点看返回。

  3. 回复

    您好我在服务器用sh执行转换就可以生成文件。在php中用exec执行却报错0;33m[Warning][0m Convert /home/wwwroot/xcx.sswan666.top/tp5/test.silk false, maybe not a silk v3 encoded file.

    1. MOD回复

      @legendnan: php调用权限问题,这种问题麻烦自己搜索一下

    2. MOD回复

      @legendnan: 商业目的,如果方便,请赞助一下,谢谢

    3. MOD回复

      @legendnan: 感谢赞助

  4. 回复

    大神微信小程序出来一个 语音识别体验 腾讯的!可以识别清楚!

    1. MOD回复

      @PHP-Li: 那挺好的啊。
      我没这方面需求,所以不关注。
      是腾讯官方的还是?
      不知是不是用我的源码(笑。

    2. 回复

      @kn007: 属于体验版 体验版 :o :o :o

    3. MOD回复

      @PHP-Li: 哦哦。

    4. LV1回复

      @PHP-Li: 在哪里看到小程序自己推出的语音识别

  5. 回复

    我用你的方法,成功将silk转换成pcm和mp3格式,播放也清楚,然后我将pcm运用到百度语音识别成文字,效果就不太好, 是怎么回事呢,用其他pcm识别就好使,但是这个用代码转的pcm就不行,但是mp3还清楚,怎么回事呢

    1. MOD回复

      @赵宏雷: 你要看百度支持的频率是多少。参数看程序自己调。

    2. 回复

      @kn007: 8000和16000两种 ,但是我生成pcm的时候,没有传递任何参数值的地方啊,是怎么写,我的代码是Utils.GetMapPath("../silk-v3-decoder-master/windows/silk_v3_decoder.exe") + " " + silkpath + " " + decoderpth;

    3. MOD回复

      @赵宏雷: -Fs_API 16000,在cmd下,自己看silk_v3_decoder.exe的参数。
      如果代码是你自己写的,那肯定就会加。我做的默认是输出24000。自己通过参数改下。

    4. 回复

      @kn007: ../silk-v3-decoder-master/windows/silk_v3_decoder.exe这个后面怎么写,怎么赞助?

    5. MOD回复

      @赵宏雷: silk_v3_decoder.exe in.silk out.pcm -Fs_API 16000
      赞助见这里: https://kn007.net/donate/

    6. 回复

      @kn007: 牛B,好使了

    7. MOD回复

      @赵宏雷: 另外商业目的,方便的话,请赞助,谢谢

    8. 回复

      @kn007: 赞助了8.8,别闲少,都打工的

    9. MOD回复

      @赵宏雷: 好使就行,兄弟。

      赞助我不嫌少,感谢兄弟赞助!

      已添加感谢列表: https://kn007.net/thank-you-list/

    10. 回复

      @kn007: 兄弟,我这识别成功了,但是用这个16000的pcm转mp3变声了,怎么回事

    11. MOD回复

      @赵宏雷: 因为所有软件统一标准都是24000,你改动后,ffmpeg你也要加参数,改变输入频率,这个你需要搜一下,我也忘记是哪个参数了

    12. 回复

      @kn007: 好的,谢谢你

    13. MOD回复

      @赵宏雷: https://github.com/kn007/silk-v3-decoder/blob/master/converter.sh
      里有
      ffmpeg -y -f s16le -ar 24000 -ac 1 -i in.pcm out.mp3
      你直接改ar后的数就行了

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