kn007的个人博客
♥ You are here: > > > Windows下批量转换Silk v3音频文件为MP3格式

Windows下批量转换Silk v3音频文件为MP3格式

by | 292 Comments

0ec17619ec44feb52e238b54c5718796前有《解码转换QQ微信的SILK v3编码音频为MP3或其他格式》和《[进阶]批量解码转换SILK V3编码音频为其他格式》这两篇文章,大概讲述了怎么批量转换Silk v3音频为其他格式,但都是Linux下可用的。

有几个陌生人问如何在Windows使用和转换,还有发邮件给我转换的。有时候不帮忙,又显得有点假清高。想想还是弄个Windows可用的转换程序,直接将Silk v3编码的音频输出为MP3。

正好也很久没用过Autoit写东西了,几个原因凑一起,就弄了个:Github传送门

求测试、求Star。Github地址拉到下面有中文说明。

因为是Autoit写的,或许有一些垃圾杀毒软件会报毒。

文件: silk2mp3.zip
大小: 840836 字节
MD5: 0535953EE7576FF7F63275B102E07F0E
SHA1: 025D9430D0E901A3CFC44305C1F682347CBB2719
CRC32: 02D80085

文件: silk2mp3-expansion.zip
大小: 14784832 字节
MD5: 932D310E92402645F6ADF9977D3656BD
SHA1: DE061D6F5AB03E629CF43DA49CEA550578F89528
CRC32: 260BFD95

文件: silk2mp3-full.zip
大小: 15303842 字节
MD5: 0095C65B83005318B500B8B66D07BFEB
SHA1: 6FBEFE9920ACDB192D2C54B8C704DA6FA43385EE
CRC32: 2370FC88

更新历史:
2017-06-28发布1.0.2.1版本:
支持拖拽文件进列表框替换待转换文件列表。

2017-05-28发布1.0.2.0版本:
1.“尝试强制AMR编码解码文件”变为可选项。
2.支持微信小程序语音转换(包括编码、解码)。
3.修复一些Bug。

2017-02-19发布1.0.1.2版本:
强制输出固定频率和最大化比特率(主要针对MP3)。

2016-11-03发布1.0.1.1版本:
1. 添加编码输出格式自定义。
2. 修复一些Bug。

2016-09-30发布1.0.1.0版本:
1. 修复缺失AMR头无法转换问题。(但也带来一定量的误转换)
2. 新增关于页。
3. 修复一些Bug。

2016-09-22发布1.0.0.6版本:
1.修复编码后,微信播放完,会有杂音。
2.新增输出格式自定义。(请勿随意修改,除非你确信是对的)
3.修复一些Bug。

2016-07-27发布1.0.0.5版本:
1.最小加载模式。(Silk V3 Encoder和FFmpeg,需要下载Expansion包)
2.当发现程序目录下存在FFmpeg时,启用专业模式。(优先使用FFmpeg,不存在时使用LAME)

2016-06-15发布1.0.0.4版本:
1.添加语言支持,新增繁体中文支持。
2.修复一些Bug。

2016-06-01发布1.0.0.3版本:
1.支持转换音频文件为Silk v3编码。
2.修复一些Bug。

2016-04-29发布1.0.0.2版本:
隐藏转换时弹出的命令行窗口。

2016-04-13发布1.0.0.1版本:
1.添加语言支持,新增英文支持。
2.Fix Some Bugs.

2016-04-12发布1.0.0.0版本:
第一个版本,由Autoit3编译而成。

压缩包内部文件一览:

文件: ffmpeg.exe
大小: 36203520 字节
MD5: 6C98BEB694AD6665E3DCD4D0F87D062C
SHA1: 8B56F7A546200F4B7251337BF8AB540DAF521A6F
CRC32: 7450826E

文件: lame.exe
大小: 653312 字节
文件版本: 3.99 release 5
MD5: 17728C0F48D30E3770ACF6F3FEA3B184
SHA1: 1848CDC71F583B34147AF2D1009F4F9CE19D77D3
CRC32: 3B8F45D9

文件: silk2mp3.exe
大小: 578048 字节
文件版本: 1.0.2.1
MD5: 0C09C7D31E3CA071721629C56C6B7679
SHA1: 34B6A2DD8601DFDA44CA770AF9696F25071283A2
CRC32: 815D7B58

文件: silk_v3_decoder.exe
大小: 179037 字节
MD5: BB0B72D969293E5D41A3DA6E25B62D1B
SHA1: 22DE4AF082C8AB57C611950264708668CD0815BE
CRC32: EF6BE0F4

文件: silk_v3_encoder.exe
大小: 318514 字节
MD5: 4F253BC1185DA46A18D0CC5EAA146E35
SHA1: AD6250C5CA6ED0A1CB805D1A6F53F421F67A2ED7
CRC32: 6444593C

其中lame.exe是一款不错的MP3编码器,主程序就是通过它将RAW音频编码为MP3;
而ffmpeg.exe是一款更强大的编码解码器,一些LAME做不到的事情,可以交由FFmpeg来做;
silk_v3_decoder.exe是我用MinGW编译Skype Silk Codec而成的,可解码Silk v3音频为RAW;
silk_v3_encoder.exe是我用MinGW编译Skype Silk Codec而成的,可编码RAW音频为Silk v3;
silk2mp3.exe是我用Autoit3写的主程序,负责调用silk_v3_decoder.exe、silk_v3_encoder.exe和lame.exe来批量转换文件。

程序在Windows XP/7/10测试通过,可正常使用。

另外求个赞助

最后丢几张图:
20160413145612
20160413145643


MinGW下使用gcc.exe编译出来的可执行文件,跨系统运行可能会报dll丢失。比如提示

无法启动此程序,因为计算机中丢失libgcc_s_dw2-1.dll。尝试重新安装该程序已解决此问题。

或者什么

无法启动此程序,因为计算机中丢失libstdc++-6.dll。尝试重新安装该程序已解决此问题。

等等等等。。。

可以给CFLAGS加个“-static”参数,或者在直接运行gcc.exe编译时,后面带上“-static”参数,来解决这个问题。小坑记录一下。

转载请注明转自:kn007的个人博客的《Windows下批量转换Silk v3音频文件为MP3格式

donate
有所帮助?

Comments

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

    您好,我在编译后,转换微信小程序的语音文件时,一直提示:
    [Warning] Convert ios.silk false, maybe not a silk v3 encoded file.

    1. MOD回复

      @tby: 。。。你们不会搜索一下吗?
      不是silk v3,自然就转换不了啊。
      小程序语音,直接base64解码后,然后ffmpeg转码就行了。

    2. 回复

      @kn007: 我ios.silk文件记事本打开是这个头:#!SILK_V3 ?t,文件类型是:application/octet-stream,这是用IOS版微信小程序录音的,安卓的一样;
      但微信开发工具的录音文件是:data:audio/webm;base64,直接解码,是可以播放和转码的;

    3. MOD回复

      @tby: 难道微信又变了?
      麻烦你发一份到 kn007@126.com
      我晚点解析一下,周五以后,最近出差。

    4. 回复

      @kn007: 已发邮件,感谢;

    5. MOD回复

      @tby: 来信收到,晚点回复你。

    6. MOD回复

      @tby: 2e0afd82bc3a6ef718166a401ccdaa51.png

      没问题哦,兄弟,你GCC版本是不是过低了?

    7. MOD回复

      @tby: 播放了下,一直念叨着123。。。

    8. @kn007: 能详细说说么,还不是不能理解呀,base64转码出现乱码中文,我的还一直报错invalid data found when processing input

    9. MOD回复

      @刘某人: 我不明白你想表达不能理解指什么。
      base64只是解码,你看到的乱码很正常啊。解码后是webm,你还需要将其转为其它格式。
      webm需要带webm组件的ffmpeg才能转换。

    10. MOD回复

      @tby: 兄弟,你这个问题,我至少回答20次了。。

      解码小程序语音很简单的,就我刚才说的那个方法。

    11. @kn007: invalid data found when processing input用ffmpeg转码cm指令就会报这个错误,webm组件调用是通过类似于webm.dll来实现的么?

    12. MOD回复

      @刘某人: ffmpeg是编译进主程序,没有动态库这一说法。

    13. @kn007: ffmpeg怎么装上webm组件,我在官网的扩展也没找到这个组件

    14. MOD回复

      @刘某人: 通过编译。
      事实上ffmpeg官方文档有点迷。。。
      你如果是win的,你可以下载我这个完整版主程序,直接就可以转换了,如果你不喜欢用我的,你可以在下载完整版后,把ffmpeg.exe拿去用。
      如果你是linux的,你可以搜索一下,有很多人讲解怎么编译。我照搬这些老生常谈的东西,太占文字。

    15. @kn007: 你这个版本不是说不能直接转微信小程序上的语音文件么 :|

    16. MOD回复

      @刘某人: 哪里说了? :sad:
      你该不会看了之前的评论吧。。。 :!:
      那是因为之前版本没更新啊,你可以看看更新记录。 :?:
      没办法,太多人吵我,我迫于无奈,也得做出来啊。。。 :oops:
      做出来就冷清了,没人搭理我了 :x

    17. @kn007: 超级佩服你,编译这个还没碰过 ;-) ;-) ;-)

  2. 回复

    kn007大神:
    有个问题想求教一下为什么silk转MP3在liunx系统中使用命令可以直接转MP3,但是使用php exec(/bin/sh /opt/app/silk2mp3/converter.sh ./Public/uploads/user_3/music/7550620170616145649.silk mp3)始终不成功

    1. MOD回复

      @悠悠: 加上引号

    2. 回复

      @kn007: 执行中是加引号的exec("/bin/sh /opt/app/silk2mp3/converter.sh ./Public/uploads/user_3/music/7550620170616145649.silk mp3"),但是始终不成功。

    3. MOD回复

      @悠悠: 用绝对路径,看下php报什么错。
      说实在,用exec很容易被攻击。
      另外我收到你私人邮件了,小程序语音,非silk v3编码的,会无法转换。

  3. 我下载了完整版,我先base64解码,再用转码工具还是失败 :o ;后面用里面的ffmpeg.exe命令行转换也失败了 :o ;文件头格式是data:audio/webm;base64这个 :cry:

    1. MOD回复

      @刘某人: 用我的软件无需先解base64。

      ffmpeg直接进和出,进之前需要base64解码,然后无需指定编码参数。

  4. 指令行是这个:ffmpeg -i C:\inetpub\wwwroot/Uploads/voice/2017-07-03/1499046736.silk -f wav C:\inetpub\wwwroot/Uploads/voice/2017-07-03/1467510736.wav会提示invalid data错误;直接用你的软件那个完整版的也解不开那个base64编码的

    1. MOD回复

      @刘某人: 。。。源文件有问题莫非?
      你base64解码后,浏览器能播放吗?chrome这些,或者你下个原生的webm播放器看看。

    2. @kn007: chrome能以txt显示没解码前的silk文件,不能打开解码后的文件 :x

    3. @刘某人: 文件开头代码是这个 data:audio/webm;base64,后面一堆英文代码

    4. MOD回复

      @刘某人: 按正常来说,无论base64解码前后,chrome都能播放。

    5. MOD回复

      @刘某人: 用audio标签能播放吗?

    6. @kn007: 不能播放,我在服务器上用silk_v3_decoder.exe转码未解压的文件会提示我文件头data:audio错误

    7. MOD回复

      @刘某人: 这是webm,不是silk v3肯定报错啊。

    8. @kn007: 我用silk_v3_encoder.exe转成silk v3,再转mp3成功了,但是文件缩小了 :sad: 什么鬼?

    9. @刘某人: 能强制转为silk v3,但是内容都没有了,0字节了 :smile:

    10. MOD回复

      @刘某人: 。。错误方法,肯定是不能得到结果的。

      最简单的,去下个webm播放器,然后把文件base64解码后给播放器播放看看。

    11. @kn007: 我用的射手播放器 :o 都能打开,没报错

    12. MOD回复

      @刘某人: 你说base64解码后,射手能正常播放出声是吧?

    13. @kn007: 能打开,不能出声 :cry:

    14. MOD回复

      @刘某人: 不能出声。。。你说什么。。。。。。
      播放器傻,不懂拒绝。。。
      下个webm解码器,上google搜一下

    15. @kn007: 要不我邮件发你,你看下... :roll:

    16. MOD回复

      @刘某人: 可以,不过可能要下个星期了。
      kn007@126.com
      比较忙

    17. @kn007: 嗯,好,谢谢大神

    18. MOD回复

      @刘某人: 客气了。

    19. MOD回复

      @刘某人: 回复你了,你下载最新版完整版silk2MP3,拿那个ffmpeg去用就行饿了。
      之前那个版本的webm组件版本有点老,你那个语音是新版组件编码,所以解不了

    20. @kn007: 嗯,谢谢大神 ;-) 非常感谢你细心的回答 ;-)

    21. MOD回复

      @刘某人: 客气了。
      如果项目有盈利,欢迎赞助我,谢谢

    22. @kn007: ffmpeg转码还是有问题,不管是base64解码前解码后,一直报文件名:invalid data found when processing input,输入无效的文件,格式还是不支持 :o

    23. @刘某人: 我下的是昨天晚上7点版本 :cry:

    24. MOD回复

      @刘某人: 那还不够新

    25. MOD回复

      @刘某人: 你昨晚那个语音,用新版的挺正常的啊

    26. @kn007: 最新版的有传送门么,你github和blog都看过,没找到,还望大神给个传送门 :razz:

    27. MOD回复
    28. @kn007: 这最新版的是7月2号19:30的吧,我用windows服务器上跑,还是显示invalid data found when processing input :o

    29. MOD回复

      @刘某人: 要7月3号20点后的吧,你对过md5了么。。莫非运营商缓存了?
      你上github,把windows/ffmpeg.zip下下来,覆盖就行了

    30. MOD回复

      @刘某人: 哦,没错,ffmpeg是7月2号19点多的。
      还不行吗?你把语音发过来看看

    31. MOD回复

      @刘某人: 不行,我就把github那个换回旧版的,新版不支持XP了 :x
      很无奈,为了小程序改变,有点不值当

    32. @kn007: :o :o :o 还是那天那两个音频,cmd指令没base64解码一直报错invalid data found when processing input,结了码的报failed to read frame size:could not seek to 9231,干脆转linux做这个算了

    33. MOD回复

      @刘某人: 那天那个我可以解啊,没问题,很正常。
      ffmpeg必须读取base64解码后的

    34. @kn007: ffmpeg -i path/1498897940.silk -f wav path/1498897940.wav这样子写的转码么

    35. MOD回复

      @刘某人: ffmpeg -i base64解码后的文件 output.wav

      你怎么base64解码的?是不是你解码得有问题

    36. @kn007: 先读取文件内容,base64解码后,存在另一个silk文件(新建的)里,对这个文件转wav格式

    37. MOD回复

      @刘某人: 你怎么base64解码?我想问。。。如果你用动态库的,可能该更新了,x86和x64的请求可是不一样。

    38. @kn007: 用的是php函数附带的,服务器的windows应该是x64的

    39. MOD回复

      @刘某人: ...php,没试过在win下使用php解码。
      但是我调用kernel32.dll,VirtualAlloc ulong_ptr在不同位数不一样的

    40. @kn007: dll这些组件是×64×84系统自带的么

    41. MOD回复

      @刘某人: 这是系统动态库啊啊,但是调用方式看程序啊。程序对位数做判断,就没问题。没做就出问题。
      动态库调用方式都是一样的,但是参数传递的有少许区别。

    42. MOD回复

      @刘某人: 看你并不是很懂底层这块,建议怎么省时间怎么来。。。

    43. @kn007: 等下我在试试,实在不行只能放着了,可惜了 :razz:

    44. MOD回复

      @刘某人: 。。。哪有你这么操作的,你这样就相当于本来衣服就放在背包里,你想拿衣服。然后你非要把背包塞到行李箱。。没有意义啊。你现在相当于多套了层壳

  5. 回复

    不明觉历啊。

    1. MOD回复

      @wu先生: 没有啦

  6. 回复

    @kn007 string inputFile = @"D:\nihao2.silk";
    string outputFile = @"D:\3.wav";

    process.StartInfo.FileName = @"D:\工作空间\server\工具和小版本\TPosPay\MyMvc\silk-v3-decoder-master\windows\ffmpeg.exe"; // 这里也可以指定ffmpeg的绝对路径
    process.StartInfo.Arguments = @" -i " + inputFile + " " + outputFile;
    process.StartInfo.UseShellExecute = false;
    process.StartInfo.CreateNoWindow = true;
    process.StartInfo.RedirectStandardOutput = true;
    process.StartInfo.RedirectStandardInput = true;
    process.StartInfo.RedirectStandardError = true;
    process.ErrorDataReceived += new DataReceivedEventHandler(Output); // 捕捉ffmpeg.exe的错误信息

    DateTime beginTime = DateTime.Now;

    process.Start();
    process.BeginErrorReadLine(); // 开始异步读取

    win10 C# silk转pcm或者wav 失败
    silk64解码也试过了
    silk文件前缀 data:audio/webm;base64,GkXfo59ChoEBQveBAULygQRC84EIQoKEd2VibUKHgQJChYECGFOAZwH/////////
    能帮我看看吗,不会写命令参数

    1. MOD回复

      @mm: 小程序不是silk v3编码。你自己可以看到文件是audio/webm,那么这个文件是webm格式,你先base64解码后给最新版ffmpeg转换就好了。

    2. MOD回复

      @mm: 已回复邮件

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