在 C# 中启动 FFmpeg 时出现问题

发布于 2024-11-08 14:17:16 字数 1262 浏览 0 评论 0原文

我在 C# 应用程序中通过 ProcessStartInfo 调用 FFmpeg,但是我不能继续收到错误;

预设“lossless_slow”的文件不存在 找到了

这是我的 C# 代码;

var processinfo = new ProcessStartInfo();
processinfo.FileName = "FFmpeg\\bin\\ffmpeg.exe";
processinfo.Arguments = "-i C:\Temp\input.mp4 -y -acodec aac -strict experimental -ab 96k -vcodec libx264 -vpre lossless_slow -crf 22 -threads 0 C:\Temp\output.mp4"
processinfo.RedirectStandardOutput = true;
processinfo.RedirectStandardError = true;
processinfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
processinfo.UseShellExecute = false;
processinfo.LoadUserProfile = true;
processinfo.EnvironmentVariables.Add("HOME", @"C:\Users\wonea\.ffmpeg");

var reg = System.Diagnostics.Process.Start(processinfo);

string output = string.Empty;
string error = string.Empty;

using (System.IO.StreamReader myOutput = reg.StandardOutput)
{
    output = myOutput.ReadToEnd();
}
using (System.IO.StreamReader myError = reg.StandardError)
{
    error = myError.ReadToEnd();
}

现在我已将预设放入文件夹中

C:\Users\wonea\ .ffmpeg

并将其包含在 Windows 路径用户变量 HOME 中。从命令行运行 FFmpeg 时效果很好,但是当在我的 C# 应用程序中发出命令时会失败,为什么!?感谢您的帮助...!

另外值得注意的是,我将该服务作为“网络服务”运行。

I'm calling FFmpeg via ProcessStartInfo inside my C# application however, I can't keep getting the error;

File for preset 'lossless_slow' not
found

Here's my C# code;

var processinfo = new ProcessStartInfo();
processinfo.FileName = "FFmpeg\\bin\\ffmpeg.exe";
processinfo.Arguments = "-i C:\Temp\input.mp4 -y -acodec aac -strict experimental -ab 96k -vcodec libx264 -vpre lossless_slow -crf 22 -threads 0 C:\Temp\output.mp4"
processinfo.RedirectStandardOutput = true;
processinfo.RedirectStandardError = true;
processinfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
processinfo.UseShellExecute = false;
processinfo.LoadUserProfile = true;
processinfo.EnvironmentVariables.Add("HOME", @"C:\Users\wonea\.ffmpeg");

var reg = System.Diagnostics.Process.Start(processinfo);

string output = string.Empty;
string error = string.Empty;

using (System.IO.StreamReader myOutput = reg.StandardOutput)
{
    output = myOutput.ReadToEnd();
}
using (System.IO.StreamReader myError = reg.StandardError)
{
    error = myError.ReadToEnd();
}

Now I've put my presets in the folder

C:\Users\wonea\ .ffmpeg

and included this in the Windows path user variable HOME. This works fine when running FFmpeg from the command line, however fails when the commands are issued inside my C# application, why!? Thanks for any help...!

Also of note, I'm running the service as "Network Service".

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

小傻瓜 2024-11-15 14:17:16

在这种情况下,我总是启动 procmon 工具,它可以向您显示您的应用程序的所有文件操作。您可以根据预设文件的名称设置过滤器,并查看 ffmpeg 试图在哪里找到它。

In situations like this I always start up the procmon tool which can show you all the file operations of your application. You can set up a filter based on the name of the preset file and see where ffmpeg is trying to locate it.

や莫失莫忘 2024-11-15 14:17:16

在这里设置 HOME 变量看起来不错。

我唯一看到的是,在代码中您将 HOME 设置为 @"C:\Users\wonea.ffmpeg" 并且在您提到的文本中该文件位于: C:\Users\wonea.ffmpeg

是其中之一错字?

Setting the HOME variable looks good here.

The only thing I see is that in the code you set HOME to be @"C:\Users\wonea.ffmpeg" and in the text you mention the file is at : C:\Users\wonea.ffmpeg

Is one of these a typo?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文