gpt4 book ai didi

c# - 使用 Process 类的 C# 应用程序中的 ffmpeg - 用户提示未显示在标准错误中

转载 作者:行者123 更新时间:2023-12-04 22:55:57 24 4
gpt4 key购买 nike

我正在编写一个应用程序来使用 c# 运行 ffmpeg。我的程序将 standardError 输出重定向到一个流,以便解析它以获取进度信息。

在测试过程中我发现了一个问题:

如果输出显示在命令窗口中而不是被重定向,ffmpeg 将显示它的正常标题,后跟“文件 c:\temp\testfile.mpg 已经存在。覆盖 [y]”。如果我单击命令窗口并按 y,程序将继续对文件进行编码。

如果 StandardError 被重定向到我的处理程序,然后打印到控制台,我会看到在命令窗口中显示的相同标题信息现在打印到控制台。 除了文件...已经存在提示 .如果我在命令窗口中单击并按 y,程序将继续处理该文件。

当提示运算符(operator)输入信息时,是否使用了除standardOutput 或standardError 之外的流,或者我是否遗漏了其他内容?

public void EncodeVideoWithProgress(string filename, string arguments, BackgroundWorker worker, DoWorkEventArgs e)
{

Process proc = new Process();

proc.StartInfo.FileName = "ffmpeg";
proc.StartInfo.Arguments = "-i " + " \"" + filename + "\" " + arguments;

proc.StartInfo.UseShellExecute = false;
proc.EnableRaisingEvents = true;

proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.RedirectStandardOutput = false;
proc.StartInfo.CreateNoWindow = false; //set to true for testing

proc.ErrorDataReceived += new DataReceivedEventHandler(NetErrorDataHandler);

proc.Start();
proc.BeginErrorReadLine();


StreamReader reader = proc.StandardOutput;
string line;
while ((line = reader.ReadLine()) != null)
{ Console.WriteLine(line); }
proc.WaitForExit();
}

private static void NetErrorDataHandler(object sendingProcess,
DataReceivedEventArgs errLine)
{
if (!String.IsNullOrEmpty(errLine.Data))
{
Console.WriteLine(errLine.Data);
}
}

最佳答案

与其遍历所有这些东西,不如在启动进程时使用“-y”命令行选项,这将强制 ffmpeg 覆盖现有文件。

关于c# - 使用 Process 类的 C# 应用程序中的 ffmpeg - 用户提示未显示在标准错误中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36758899/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com