进程在.net (ffmpeg)中启动时停止

本文关键字:启动 net ffmpeg 进程 | 更新日期: 2023-09-27 18:14:45

我试图在。net (c#)中启动ffmpeg作为进程,但在某些情况下,取决于参数(特别是,如果我为了创建音频文件而省略视频参数),它会停滞不前。它启动,输出一些行,但随后就停止了(使用0%的CPU)。当父. net进程被终止时,它会继续,如果我让它继续,ffmpeg会正确地生成文件。我认为这可能是由于使用Peek()查看流,所以我只是将其简化为以下内容,其行为相同:

_process = new Process
{
    StartInfo =
    {
        UseShellExecute = false,
        RedirectStandardOutput = false,
        RedirectStandardError = true,
        FileName = "c:''ffmpeg.exe",
        Arguments = string.Format(
    "-i {0} {1} {2} {3} -y {4}", inputPath, videoArgs, audioArgs, options, outputPath)
    }
};
_process.Start();
_process.WaitForExit();

ffmpeg到达在停止之前输出有关输入视频/音频流的信息的点。通过命令提示符执行命令按预期工作。

有谁知道是什么问题吗?

编辑:

只是为了补充,我尝试了UseShellExecute = true(和RedirectStandardError = false),这是有效的。但是,我仍然需要读取输出,因此这并不能真正帮助我。

进程在.net (ffmpeg)中启动时停止

看一下MSDN上的redirectstandderror

显然,这有点繁琐,如果输出或错误流缓冲区被填满,可能会死锁。它就在那里等着你去读它写的东西

根据对这个答案的评论,在某些情况下,FFmpeg直接操作屏幕内存,而不使用标准输出和错误流[file] already exists. Overwrite? [y/N]提示符就是一个例子。

我猜你已经在。net外部运行程序,看看输出是什么?如果它是一个类似于上面的提示,那么它可能值得避免麻烦,并尝试提供一个将跳过它的参数。强制FFmpeg覆盖文件的-y命令