使用C#提取MP4音频为MP3时遇Win32Exception拒绝访问错误
解决FFmpeg调用时的"Access is denied"错误
这个System.ComponentModel.Win32Exception: 'Access is denied'错误基本都和FFmpeg路径配置、文件权限或者进程启动参数有关,咱们一步步来排查解决:
1. 先确认FFmpeg的路径是否配置正确
你的代码里写了FileName = Directory,这里的Directory必须是FFmpeg可执行文件的完整绝对路径(比如C:\ffmpeg\bin\ffmpeg.exe),而不是文件夹路径。如果只填了文件夹,程序会尝试去执行文件夹本身,这肯定会触发权限拒绝。
修正示例:
// 替换成你本地ffmpeg.exe的实际路径 string ffmpegExePath = @"D:\Tools\ffmpeg\bin\ffmpeg.exe"; var ffmpegProcess = new Process { StartInfo = { FileName = ffmpegExePath, // 其他配置项保持不变 } };
2. 检查文件与文件夹的访问权限
- 确保你的程序能读取目标MP4文件:如果视频文件在受保护的文件夹(比如
C:\Program Files)或者被其他程序占用(比如正用播放器打开),都会导致读取权限被拒绝。 - 确保程序能写入输出MP3文件:尽量不要把输出目录选在系统目录(比如
C:\Windows),换成用户自己的文件夹(比如Environment.GetFolderPath(Environment.SpecialFolder.Desktop)),避免权限限制。
3. 修正FFmpeg的启动参数
你的Arguments里多了个多余的output关键字,FFmpeg不需要这个,而且路径最好用双引号包裹,避免路径含空格时解析出错:
Arguments = $"-i \"{toConvert}\" -vn -f mp3 -ab 320k \"{outputFile}\""
参数格式错误也可能间接导致进程启动失败,触发权限类的异常提示。
4. 尝试提升程序运行权限
如果以上都没问题,右键你的程序,选择以管理员身份运行试试。如果这样能正常执行,说明当前用户权限不足以访问某些资源,要么调整文件存放路径,要么给程序添加必要的权限配置。
额外调试小技巧
把代码里拼接好的FFmpeg完整命令行打印出来,手动在命令提示符里执行一遍:
ffmpeg.exe -i "你的视频路径.mp4" -vn -f mp3 -ab 320k "输出音频路径.mp3"
如果手动执行也报错,问题就出在FFmpeg参数或文件本身;如果手动执行正常,再回到代码里排查进程启动的配置细节。
内容的提问来源于stack exchange,提问作者Tom Lee
相关产品推荐
相关产品推荐

