使用PowerShell脚本调用FFmpeg转换WAV文件遇‘文件不存在’错误求助
嘿,作为PowerShell新手碰到这个问题太正常啦!我帮你梳理几个最可能的原因,你可以挨个排查:
路径含空格/特殊字符却未加引号
PowerShell会把空格当成参数分隔符,如果你的文件路径是类似C:\My Audio\test.wav这种带空格的,直接传给FFmpeg的话,它只会识别C:\My作为路径,自然找不到文件。解决办法很简单:把路径用双引号包裹起来,比如:ffmpeg -i "C:\My Audio Files\input.wav" -acodec pcm_s16le -ar 16000 "C:\Output\converted.wav"相对路径与当前工作目录不匹配
你用echo确认路径存在,但可能是在手动切换到目标文件夹后执行的echo,而脚本实际运行时的工作目录完全不同!PowerShell的相对路径是基于当前工作目录的,不是脚本所在目录。建议直接用绝对路径,或者在脚本开头先切换到文件所在目录:# 先切换到WAV文件所在文件夹 Set-Location "D:\Your\Wav\Storage\Folder" # 再执行转换命令 ffmpeg -i "input.wav" -acodec pcm_s16le -ar 16000 "output.wav"PowerShell路径解析与FFmpeg不兼容
偶尔PowerShell的长路径、符号链接或者路径格式会让FFmpeg混淆,你可以用Resolve-Path命令先把路径解析成标准绝对路径,再传给FFmpeg:$inputFile = Resolve-Path "your-source-file.wav" $outputFile = "D:\Converted\output.wav" ffmpeg -i $inputFile.Path -acodec pcm_s16le -ar 16000 $outputFile隐藏的拼写/权限问题
别小看拼写错误!比如把Audio写成Audo,Windows虽然不区分大小写,但如果用了WSL版本的FFmpeg,可能会严格区分。另外,检查文件是否被其他程序占用(比如正在被音频播放器打开),或者你的PowerShell是否有读取该文件的权限(比如文件在C:\Program Files这类需要管理员权限的文件夹里,你却用普通权限启动PowerShell)。FFmpeg参数顺序错误导致的误判
有时候看起来是文件不存在,其实是参数顺序写错了!FFmpeg要求输入文件路径紧跟在-i参数后面,如果把其他参数放在-i前面,可能会让FFmpeg把输入路径当成无效参数,从而报错“文件不存在”。确保命令结构是:ffmpeg -i [输入文件路径] [转换参数] [输出文件路径]
内容的提问来源于stack exchange,提问作者majTheHero

