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

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

by | 515 Comments

提醒:本文最后更新于 2282 天前,文中所描述的信息可能已发生改变,请仔细核实。

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

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

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

kn007/silk-v3-decoder[Skype Silk Codec SDK]Decode silk v3 audio files (like wechat amr, aud files, qq slk files) and convert to other format (like mp3). Batch conversion support.

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

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

终止维护声明:

鉴于很多人总是反映说杀毒软件报毒,我已经不想过多解释了,不相信可以不用。

杀毒软件用好点的牌子,像卡巴斯基等这种,能会报毒么?非要相信那些小厂的误报。

既然你没什么判断能力,还是不要用的好,免得万一发生什么,还要怪到我这。

求你们别用,好吧。

文件下载地址:

文件: silk2mp3.zip
大小: 922254 字节
修改时间: 2020年1月23日, 10:02:56
MD5: 9A156B8D81B87926580D3C7EF1C02DC3
SHA1: ED672C2C231773547AE9CCECCF043819304CFE44
CRC32: E20CD19F

文件: silk2mp3-expansion.zip
大小: 14900840 字节
修改时间: 2019年2月14日, 23:34:07
MD5: 61E3970456682947D0A57B9505161790
SHA1: 37D98991301811564C5871A208E7F3E8D5F4B231
CRC32: 7A40E4AB

文件: silk2mp3-full.zip
大小: 15501268 字节
修改时间: 2020年1月23日, 10:03:58
MD5: 903FB6779BE5F6C821591520B1594E52
SHA1: 607C269B4CD6C9802F063926478825A71C319F44
CRC32: 225F412E

更新历史:
2020-01-23发布1.0.3.3版本:
修复上一版本打包方式导致的win10以下系统不可用问题。

2020-01-04发布1.0.3.2版本:
重新打包程序。

2019-06-17发布1.0.3.1版本:
重新打包程序。

2019-06-17发布1.0.3.0版本:
迫于微软MSE压力,重新打包程序。

2019-05-24发布1.0.2.9版本:
迫于Google压力,重新打包程序。

2019-03-30发布1.0.2.8版本:
重新打包程序。

2019-02-19发布1.0.2.7版本:
修复上一版本一大失误(列表无法显示)。

2019-02-14发布1.0.2.6版本:
重新打包程序。

2017-09-01发布1.0.2.5版本:
优化代码。

2017-08-22发布1.0.2.4版本:
修复一些Bug。

2017-08-22发布1.0.2.3版本:
1.修复一些Bug。
2.去掉拖拽功能。

2017-08-19发布1.0.2.2版本:
修复一些Bug。

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
大小: 36560896 字节
MD5: 170913E96730ED552392D9C06023515D
SHA1: 41B42AB46A83FBD82B62233CF9F52C950F0C05FD
CRC32: 05C8F349

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

文件: silk2mp3.exe
大小: 660008 字节
文件版本: 1.0.3.3
MD5: 5956F1AD437FD25F81BD31665F8FA1B6
SHA1: A17C48766B71667D9EB9795EAC11E245D69665BC
CRC32: 7D42B4D1

文件: 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

515 Comments立即评论
  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. LV2回复

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

    9. MOD回复

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

    10. MOD回复

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

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

    11. LV2回复

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

    12. MOD回复

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

    13. LV2回复

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

    14. MOD回复

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

    15. LV2回复

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

    16. MOD回复

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

    17. LV2回复

      @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编码的,会无法转换。

    4. 回复

      @悠悠: 你好 我也是php遇到这问题 请问你解决了吗? 能否请教下解决方法?

    5. 回复

      @junyuyi: 搜silk2mp3文库

    6. 回复

      @悠悠: 十分感谢!经验证 你那方法是可行的!!感谢感谢!解决了大问题

  3. LV2回复

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

    1. MOD回复

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

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

    2. 回复

      @kn007: 你上面不是说“非silk v3编码的,会无法转换”吗?怎么这里的意思好像是不用理会文件是base64编码,是不是说data:audio/webm;base64这样的文件也可以由silk-v3-decoder处理不用我们自己管呢?

    3. MOD回复

      @shangjia: 他说的silk2mp3,你说的silk v3 decoder这个项目,不一样。

  4. LV2回复

    指令行是这个: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. LV2回复

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

    3. LV2回复

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

    4. MOD回复

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

    5. MOD回复

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

    6. LV2回复

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

    7. MOD回复

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

    8. LV2回复

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

    9. LV2回复

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

    10. MOD回复

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

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

    11. LV2回复

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

    12. MOD回复

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

    13. LV2回复

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

    14. MOD回复

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

    15. LV2回复

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

    16. MOD回复

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

    17. LV2回复

      @kn007: 嗯,好,谢谢大神

    18. MOD回复

      @刘某人: 客气了。

    19. MOD回复

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

    20. LV2回复

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

    21. MOD回复

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

    22. LV2回复

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

    23. LV2回复

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

    24. MOD回复

      @刘某人: 那还不够新

    25. MOD回复

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

    26. LV2回复

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

    27. MOD回复

      @刘某人: 重新下一次完整版就行了
      http://dl.kn007.net/directlink/silk2mp3-full.zip

    28. LV2回复

      @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. LV2回复

      @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. LV2回复

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

    35. MOD回复

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

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

    36. LV2回复

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

    37. MOD回复

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

    38. LV2回复

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

    39. MOD回复

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

    40. LV2回复

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

    41. MOD回复

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

    42. MOD回复

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

    43. LV2回复

      @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: 已回复邮件

    3. 回复

      @mm: 老哥 我遇到和你一样的问题 你最后怎么解决的 能发给我看看嘛?

    4. 回复

      @晴天: 861820029 qq

  7. 回复

    大神,请问有办法能显示出微信amr的时长么?最好是精确到毫秒的?

    1. MOD回复

      @zivzhao: 不好意思,我不清楚,我不研究微信或QQ。

  8. 回复

    老哥 赞住你了 问你了问题 我这 微信小程序的录音 win7 显示的文件格式是skil 我用你带界面的 工具转换了一下 成功 文件出来了 并且可以听 但是我是java 我需要用代码运行 不会写CMD命令 求指教 谢谢了

    1. MOD回复

      @晴天: 看github。
      小程序语音不一定是silk v3,看头。

    2. 回复

      @kn007: 谢谢 我解决了 先转成pcm 在转就好了 谢谢分享

  9. 回复

    试了下,iphone的aud文件用您的软件转码失败,只可以用楼月微信语音播放器一个个转成wav再合并转mp3,不知是什么原因呢?

    1. MOD回复

      @patience: 勾上Fix AMR试试

  10. LV1回复

    小程序不是silk v3编码。你自己可以看到文件是audio/webm,那么这个文件是webm格式,你先base64解码后给最新版ffmpeg转换就好了。
    请问怎么解码呢,我使用base64_decode返回的事乱码

    1. MOD回复

      @test: bin,你看起来肯定是乱码啊。

;-):|:x:twisted::smile::shock::sad::roll::razz::oops::o:mrgreen::lol::idea::grin::evil::cry::cool::arrow::???::?::!: