You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell调用ffmpeg批量转PCM为WAV脚本无响应问题排查

批量转换PCM到WAV的PowerShell脚本修复方案

原脚本未执行转换的核心问题在于直接传递FileInfo对象给ffmpeg,以及路径处理不严谨,导致ffmpeg无法正确识别输入输出文件路径。以下是修正后的脚本及关键说明:

修正后的脚本

# 获取当前目录下所有.pcm文件(包含子目录,若不需要递归可去掉-Recurse)
$pcmFiles = Get-ChildItem -Filter "*.pcm" -Recurse

foreach ($file in $pcmFiles) {
    # 生成对应的.wav文件路径(使用FullName确保完整路径)
    $wavPath = [System.IO.Path]::ChangeExtension($file.FullName, ".wav")
    
    # 调用ffmpeg执行转换,用引号包裹路径避免空格问题,&确保正确执行外部命令
    & .\ffmpeg.exe -f s16le -ar 24000 -ac 1 -i "$($file.FullName)" "$wavPath" -y
    
    # 可选:输出转换状态
    if ($LASTEXITCODE -eq 0) {
        Write-Host "已转换:$($file.Name) -> $(Split-Path $wavPath -Leaf)"
    } else {
        Write-Warning "转换失败:$($file.Name),ffmpeg退出码:$LASTEXITCODE"
    }
}

关键修复点

  • 路径字符串化:使用$file.FullName替代直接传递FileInfo对象,确保ffmpeg拿到的是可识别的文件路径字符串。
  • 引号包裹路径:用"$($file.FullName)"和"$wavPath"包裹路径,避免文件名或目录名含空格时ffmpeg解析错误。
  • 明确调用外部命令:用&执行ffmpeg,比.更稳妥,避免PowerShell的脚本块解析冲突。
  • 添加声道参数:新增-ac 1(单声道),若你的PCM是双声道可改为-ac 2,缺失声道参数可能导致ffmpeg无法正确解码PCM。
  • 覆盖输出文件:添加-y参数,自动覆盖已存在的同名WAV文件,避免交互提示中断批量处理。
  • 状态反馈:通过$LASTEXITCODE检查ffmpeg执行结果,输出转换状态方便排查问题。

额外排查建议

  1. 确认ffmpeg.exe确实和脚本在同一目录,或者在系统PATH中;若不在同一目录,需指定ffmpeg的完整路径(如C:\tools\ffmpeg.exe)。
  2. 测试单个文件转换:手动执行.\ffmpeg.exe -f s16le -ar 24000 -ac 1 -i "test.pcm" "test.wav",确认ffmpeg能正常工作,排除参数或文件本身的问题。
  3. 检查PowerShell执行权限:若脚本无法运行,可先执行Set-ExecutionPolicy RemoteSigned(以管理员身份运行PowerShell)修改执行策略。

内容的提问来源于stack exchange,提问作者Jordy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 13:05:18