Rem 名称：Silk转换工具包 By [無職]龍某人
Rem 版本：1.0.0.1
Rem 修订：Rev.1
Rem 功能：利用Silk解码器、ffmpeg处理工具及lame编码器将所有通过Silk v3编码的语音文件，例如微信和QQ的语音文件进行转换，最终输出为MP3文件以确保所有播放器终端都可以正常播放。
Rem 备注：Silk转换脚本(二合一版)
Rem 其他说明1：优先使用[头文件合并模式]，速度非常快且基本不会出现错误，使用[FFmpeg处理模式]时由于需要启动体积达数十MB的FFmpeg.exe文件所以可能在一些旧机器或低效能的机器上会有点小卡。
Rem 其他说明2：只想使用[头文件合并模式]的话可以放心将FFmpeg.exe文件删除，如果一定要使用[FFmpeg处理模式]的话只要将脚本目录下的24KHz.head文件改名或删除即可。
Rem 其他说明3：本脚本无版权，工具包里所包含的所有程序的版权及修改权、解释权归各自作者所有，传播时请务必保持工具包的完整性，谢谢。

@Echo Off
Cls

:Check-24KHz.head
If Exist "24KHz.head" (
    Title Silk转换脚本[合并版] By [無職]龍某人
    Set Type=24000
    Goto Check-Silk_Decoder
) Else (
    Goto Check-ffmpeg
)

:Check-ffmpeg
If Exist "ffmpeg.exe" (
    Title Silk转换脚本[FFmpeg版] By [無職]龍某人
    Set Type=FFmpeg
    Goto Check-Silk_Decoder
) Else (
    Title [错误信息]找不到"%CD%\ffmpeg.exe"
    Echo [错误信息]找不到"%CD%\ffmpeg.exe"，请确认该文件是否已放在本脚本所在目录中。
    Echo. & Echo [请按任意键退出脚本]
    Pause>Nul
    Goto End
)

:Check-Silk_Decoder
If Exist "silk_v3_decoder.exe" (
    Goto Check-lame
) Else (
    Title [错误信息]找不到"%CD%\silk_v3_decoder.exe"
    Echo [错误信息]找不到"%CD%\silk_v3_decoder.exe"，请确认该文件是否已放在本脚本所在目录中。
    Echo. & Echo [请按任意键退出脚本]
    Pause>Nul
    Goto End
)

:Check-lame
If Exist "lame.exe" (
    Goto Start
) Else (
    Title [错误信息]找不到"%CD%\lame.exe"
    Echo [错误信息]找不到"%CD%\lame.exe"，请确认该文件是否已放在本脚本所在目录中。
    Echo. & Echo [请按任意键退出脚本]
    Pause>Nul
    Goto End
)

:Start
Cls
Set Input=
Echo =================================================================
Echo.
Echo ※本脚本可转换微信和QQ的语音文件等所有基于Silk v3编码的语音文件※
Echo.
Echo    silk_v3_decoder.exe         ver:Special         CRC:f83952a7
Echo        lame.exe               ver:3.99.2.5         CRC:3b8f45d9
Echo.
If /I "%Type%"=="24000" Echo 当前使用的是[头文件合并模式]，请确保24KHz.head文件CRC值为f6439d2a
If /I "%Type%"=="FFmpeg" Echo 当前使用的是[FFmpeg处理模式]，请确保FFmpeg.exe文件CRC值为abe41bd2
Echo.
Echo =====================请拖入要编码的音频文件======================
Echo.
Set /P Input=[转换目标]：  
If /I "%Input%"=="" Goto Start
Cls
Title [编码中]正在转换格式，进度......1/3
Rem 使用silk_v3_decoder.exe转换目标文件为PCM格式，以转换目标的路径为临时目录。
Rem 项目源地址https://github.com/kn007/silk-v3-decoder
Rem 感谢作者kn007(https://kn007.net/)
Rem 作者博客相关文章地址https://kn007.net/topics/batch-convert-silk-v3-audio-files-to-mp3-in-windows/
silk_v3_decoder.exe %Input% %Input%.pcm
Cls
Title [编码中]正在转换格式，进度......2/3
Rem 当Type变量值为24000时使用头文件合并模式，否则进入下一行代码。
Rem 头文件合并模式的原理是基于Copy /b命令实现，源文件头取自数个样品文件，经多次测试可用，所以作为首用选项留在脚本中。
If /I "%Type%"=="24000" Copy /b 24KHz.head+%Input%.pcm %Input%.wav
Rem 当Type变量值为FFmpeg时使用FFmpeg处理模式。
Rem 这里的原理是使用ffmpeg.exe给PCM格式增加24000Hz文件头，并输出为普通播放器可以识别并播放的WAV格式。
Rem 本处使用的是Win32静态编译的版本，可自行更换，但请保证ffmpeg.exe文件与本脚本位于同一目录中。
If /I "%Type%"=="FFmpeg" ffmpeg.exe -f s16le -ar 24k -ac 1 -i %Input%.pcm %Input%.wav
Rem 删除转换时产生的PCM临时文件，如要保留该文件请自行注释或删除下面这行。
Del %Input%.pcm
Cls
Title [编码完毕]正在转换格式，进度......完成
Rem 用lame输出ABR 320Kbps编码的MP3，详细参数相关信息请参照lame的网上内容或项目帮助文件。
Rem 本处使用的是Win32编译版，可自行更换，但请保证lame.exe文件与本脚本位于同一目录中。
lame.exe -b 320 -h --abr 320 -B 320 -F %Input%.wav %Input%.mp3
Rem 删除转换时产生的WAV临时文件，如要保留该文件请自行注释或删除下面这行。
Del %Input%.wav
Cls
Title [提示信息]全部完成
Echo. & Echo [转换完毕，文件输出为"%Input%.mp3"。]
Echo. & Echo [请按任意键退出脚本]
Pause >Nul
Exit

:End
Exit
