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

谷歌云函数C#调用FFmpeg失败:找不到文件或目录

解决谷歌云函数C#调用FFmpeg找不到的问题

问题根源

谷歌云函数的.NET运行时环境默认PATH变量未包含系统级FFmpeg的安装路径,而Python运行时的环境变量配置逻辑不同,所以Python能正常调用,C#则出现"找不到文件或目录"的错误。

解决办法

1. 使用FFmpeg的绝对路径调用

Ubuntu环境下FFmpeg默认安装在/usr/bin/ffmpeg,直接在代码中指定绝对路径即可:

// 修正编码参数:-acodec wav 改为 -f wav(WAV是容器格式,对应PCM编码)
Process.Start("/usr/bin/ffmpeg", $"-i {temp_input_file} -vn -f wav {temp_output_file}");

2. 显式设置Process的环境变量

如果偏好使用ffmpeg短命令,可以在ProcessStartInfo中补充PATH环境变量,将FFmpeg所在的/usr/bin目录加入:

var startInfo = new ProcessStartInfo
{
    FileName = "ffmpeg",
    Arguments = $"-i {temp_input_file} -vn -f wav {temp_output_file}",
    // 扩展PATH变量,确保能找到系统级FFmpeg
    EnvironmentVariables = { ["PATH"] = $"{Environment.GetEnvironmentVariable("PATH")}:/usr/bin" }
};

using var process = Process.Start(startInfo);
process.WaitForExit();

建议加上using语句管理Process资源,并调用WaitForExit()确保转码完成后再执行后续逻辑。

3. 验证FFmpeg路径(调试用)

如果不确定FFmpeg的实际路径,可以先在云函数中执行which ffmpeg命令确认:

using var whichProcess = Process.Start(new ProcessStartInfo
{
    FileName = "which",
    Arguments = "ffmpeg",
    RedirectStandardOutput = true,
    UseShellExecute = false
});

var ffmpegPath = whichProcess.StandardOutput.ReadToEnd().Trim();
// 输出路径到日志,确认后替换到代码中
Console.WriteLine($"FFmpeg路径:{ffmpegPath}");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 18:30:10