提醒:本文最后更新于 2282 天前,文中所描述的信息可能已发生改变,请仔细核实。
前有《解码转换QQ微信的SILK v3编码音频为MP3或其他格式》和《[进阶]批量解码转换SILK V3编码音频为其他格式》这两篇文章,大概讲述了怎么批量转换Silk v3音频为其他格式,但都是Linux下可用的。
有几个陌生人问如何在Windows使用和转换,还有发邮件给我转换的。有时候不帮忙,又显得有点假清高。想想还是弄个Windows可用的转换程序,直接将Silk v3编码的音频输出为MP3。
正好也很久没用过Autoit写东西了,几个原因凑一起,就弄了个:Github传送门。
求测试、求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测试通过,可正常使用。
另外求个赞助。
MinGW下使用gcc.exe编译出来的可执行文件,跨系统运行可能会报dll丢失。比如提示
无法启动此程序,因为计算机中丢失libgcc_s_dw2-1.dll。尝试重新安装该程序已解决此问题。
或者什么
无法启动此程序,因为计算机中丢失libstdc++-6.dll。尝试重新安装该程序已解决此问题。
等等等等。。。
可以给CFLAGS加个“-static”参数,或者在直接运行gcc.exe编译时,后面带上“-static”参数,来解决这个问题。小坑记录一下。
转载请注明转自: kn007的个人博客 的《Windows下批量转换Silk v3音频文件为MP3格式》



您好,我在编译后,转换微信小程序的语音文件时,一直提示:
[Warning] Convert ios.silk false, maybe not a silk v3 encoded file.
@tby: 。。。你们不会搜索一下吗?
不是silk v3,自然就转换不了啊。
小程序语音,直接base64解码后,然后ffmpeg转码就行了。
@kn007: 我ios.silk文件记事本打开是这个头:#!SILK_V3 ?t,文件类型是:application/octet-stream,这是用IOS版微信小程序录音的,安卓的一样;
但微信开发工具的录音文件是:data:audio/webm;base64,直接解码,是可以播放和转码的;
@tby: 难道微信又变了?
麻烦你发一份到 kn007@126.com 。
我晚点解析一下,周五以后,最近出差。
@kn007: 已发邮件,感谢;
@tby: 来信收到,晚点回复你。
@tby:
没问题哦,兄弟,你GCC版本是不是过低了?
@tby: 播放了下,一直念叨着123。。。
@kn007: 能详细说说么,还不是不能理解呀,base64转码出现乱码中文,我的还一直报错invalid data found when processing input
@刘某人: 我不明白你想表达不能理解指什么。
base64只是解码,你看到的乱码很正常啊。解码后是webm,你还需要将其转为其它格式。
webm需要带webm组件的ffmpeg才能转换。
@tby: 兄弟,你这个问题,我至少回答20次了。。
解码小程序语音很简单的,就我刚才说的那个方法。
@kn007: invalid data found when processing input用ffmpeg转码cm指令就会报这个错误,webm组件调用是通过类似于webm.dll来实现的么?
@刘某人: ffmpeg是编译进主程序,没有动态库这一说法。
@kn007: ffmpeg怎么装上webm组件,我在官网的扩展也没找到这个组件
@刘某人: 通过编译。
事实上ffmpeg官方文档有点迷。。。
你如果是win的,你可以下载我这个完整版主程序,直接就可以转换了,如果你不喜欢用我的,你可以在下载完整版后,把ffmpeg.exe拿去用。
如果你是linux的,你可以搜索一下,有很多人讲解怎么编译。我照搬这些老生常谈的东西,太占文字。
@kn007: 你这个版本不是说不能直接转微信小程序上的语音文件么
@刘某人: 哪里说了?




你该不会看了之前的评论吧。。。
那是因为之前版本没更新啊,你可以看看更新记录。
没办法,太多人吵我,我迫于无奈,也得做出来啊。。。
做出来就冷清了,没人搭理我了
@kn007: 超级佩服你,编译这个还没碰过

kn007大神:
有个问题想求教一下为什么silk转MP3在liunx系统中使用命令可以直接转MP3,但是使用php exec(/bin/sh /opt/app/silk2mp3/converter.sh ./Public/uploads/user_3/music/7550620170616145649.silk mp3)始终不成功
@悠悠: 加上引号
@kn007: 执行中是加引号的exec("/bin/sh /opt/app/silk2mp3/converter.sh ./Public/uploads/user_3/music/7550620170616145649.silk mp3"),但是始终不成功。
@悠悠: 用绝对路径,看下php报什么错。
说实在,用exec很容易被攻击。
另外我收到你私人邮件了,小程序语音,非silk v3编码的,会无法转换。
@悠悠: 你好 我也是php遇到这问题 请问你解决了吗? 能否请教下解决方法?
@junyuyi: 搜silk2mp3文库
@悠悠: 十分感谢!经验证 你那方法是可行的!!感谢感谢!解决了大问题
我下载了完整版,我先base64解码,再用转码工具还是失败
;后面用里面的ffmpeg.exe命令行转换也失败了
;文件头格式是data:audio/webm;base64这个 
@刘某人: 用我的软件无需先解base64。
ffmpeg直接进和出,进之前需要base64解码,然后无需指定编码参数。
@kn007: 你上面不是说“非silk v3编码的,会无法转换”吗?怎么这里的意思好像是不用理会文件是base64编码,是不是说data:audio/webm;base64这样的文件也可以由silk-v3-decoder处理不用我们自己管呢?
@shangjia: 他说的silk2mp3,你说的silk v3 decoder这个项目,不一样。
指令行是这个: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编码的
@刘某人: 。。。源文件有问题莫非?
你base64解码后,浏览器能播放吗?chrome这些,或者你下个原生的webm播放器看看。
@kn007: chrome能以txt显示没解码前的silk文件,不能打开解码后的文件
@刘某人: 文件开头代码是这个 data:audio/webm;base64,后面一堆英文代码
@刘某人: 按正常来说,无论base64解码前后,chrome都能播放。
@刘某人: 用audio标签能播放吗?
@kn007: 不能播放,我在服务器上用silk_v3_decoder.exe转码未解压的文件会提示我文件头data:audio错误
@刘某人: 这是webm,不是silk v3肯定报错啊。
@kn007: 我用silk_v3_encoder.exe转成silk v3,再转mp3成功了,但是文件缩小了
什么鬼?
@刘某人: 能强制转为silk v3,但是内容都没有了,0字节了
@刘某人: 。。错误方法,肯定是不能得到结果的。
最简单的,去下个webm播放器,然后把文件base64解码后给播放器播放看看。
@kn007: 我用的射手播放器
都能打开,没报错
@刘某人: 你说base64解码后,射手能正常播放出声是吧?
@kn007: 能打开,不能出声
@刘某人: 不能出声。。。你说什么。。。。。。
播放器傻,不懂拒绝。。。
下个webm解码器,上google搜一下
@kn007: 要不我邮件发你,你看下...
@刘某人: 可以,不过可能要下个星期了。
kn007@126.com
比较忙
@kn007: 嗯,好,谢谢大神
@刘某人: 客气了。
@刘某人: 回复你了,你下载最新版完整版silk2MP3,拿那个ffmpeg去用就行饿了。
之前那个版本的webm组件版本有点老,你那个语音是新版组件编码,所以解不了
@kn007: 嗯,谢谢大神
非常感谢你细心的回答 
@刘某人: 客气了。
如果项目有盈利,欢迎赞助我,谢谢
@kn007: ffmpeg转码还是有问题,不管是base64解码前解码后,一直报文件名:invalid data found when processing input,输入无效的文件,格式还是不支持
@刘某人: 我下的是昨天晚上7点版本
@刘某人: 那还不够新
@刘某人: 你昨晚那个语音,用新版的挺正常的啊
@kn007: 最新版的有传送门么,你github和blog都看过,没找到,还望大神给个传送门
@刘某人: 重新下一次完整版就行了
http://dl.kn007.net/directlink/silk2mp3-full.zip
@kn007: 这最新版的是7月2号19:30的吧,我用windows服务器上跑,还是显示invalid data found when processing input
@刘某人: 要7月3号20点后的吧,你对过md5了么。。莫非运营商缓存了?
你上github,把windows/ffmpeg.zip下下来,覆盖就行了
@刘某人: 哦,没错,ffmpeg是7月2号19点多的。
还不行吗?你把语音发过来看看
@刘某人: 不行,我就把github那个换回旧版的,新版不支持XP了
很无奈,为了小程序改变,有点不值当
@kn007:
还是那天那两个音频,cmd指令没base64解码一直报错invalid data found when processing input,结了码的报failed to read frame size:could not seek to 9231,干脆转linux做这个算了
@刘某人: 那天那个我可以解啊,没问题,很正常。
ffmpeg必须读取base64解码后的
@kn007: ffmpeg -i path/1498897940.silk -f wav path/1498897940.wav这样子写的转码么
@刘某人: ffmpeg -i base64解码后的文件 output.wav
你怎么base64解码的?是不是你解码得有问题
@kn007: 先读取文件内容,base64解码后,存在另一个silk文件(新建的)里,对这个文件转wav格式
@刘某人: 你怎么base64解码?我想问。。。如果你用动态库的,可能该更新了,x86和x64的请求可是不一样。
@kn007: 用的是php函数附带的,服务器的windows应该是x64的
@刘某人: ...php,没试过在win下使用php解码。
但是我调用kernel32.dll,VirtualAlloc ulong_ptr在不同位数不一样的
@kn007: dll这些组件是×64×84系统自带的么
@刘某人: 这是系统动态库啊啊,但是调用方式看程序啊。程序对位数做判断,就没问题。没做就出问题。
动态库调用方式都是一样的,但是参数传递的有少许区别。
@刘某人: 看你并不是很懂底层这块,建议怎么省时间怎么来。。。
@kn007: 等下我在试试,实在不行只能放着了,可惜了
@刘某人: 。。。哪有你这么操作的,你这样就相当于本来衣服就放在背包里,你想拿衣服。然后你非要把背包塞到行李箱。。没有意义啊。你现在相当于多套了层壳
不明觉历啊。
@wu先生: 没有啦
@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/////////
能帮我看看吗,不会写命令参数
@mm: 小程序不是silk v3编码。你自己可以看到文件是audio/webm,那么这个文件是webm格式,你先base64解码后给最新版ffmpeg转换就好了。
@mm: 已回复邮件
@mm: 老哥 我遇到和你一样的问题 你最后怎么解决的 能发给我看看嘛?
@晴天: 861820029 qq
大神,请问有办法能显示出微信amr的时长么?最好是精确到毫秒的?
@zivzhao: 不好意思,我不清楚,我不研究微信或QQ。
老哥 赞住你了 问你了问题 我这 微信小程序的录音 win7 显示的文件格式是skil 我用你带界面的 工具转换了一下 成功 文件出来了 并且可以听 但是我是java 我需要用代码运行 不会写CMD命令 求指教 谢谢了
@晴天: 看github。
小程序语音不一定是silk v3,看头。
@kn007: 谢谢 我解决了 先转成pcm 在转就好了 谢谢分享
试了下,iphone的aud文件用您的软件转码失败,只可以用楼月微信语音播放器一个个转成wav再合并转mp3,不知是什么原因呢?
@patience: 勾上Fix AMR试试
小程序不是silk v3编码。你自己可以看到文件是audio/webm,那么这个文件是webm格式,你先base64解码后给最新版ffmpeg转换就好了。
请问怎么解码呢,我使用base64_decode返回的事乱码
@test: bin,你看起来肯定是乱码啊。