gpt4 book ai didi

c# - 如何识别 ffmpeg 管道已结束?

转载 作者:行者123 更新时间:2023-12-04 23:25:10 25 4
gpt4 key购买 nike

我正在使用非常复杂的过滤器和 C# 应用程序中的管道执行 ffmpeg 命令。我将图像放入 ffmpeg 输入流(管道)中,以将这些图像渲染为最终视频的叠加层。

我想用管道渲染图像,直到管道关闭。不幸的是,我不知道如何识别 ffmpeg 进程的管道已关闭。是否有可能在 C# 中识别此事件?

该过程开始如下:

 this._ffmpegProcess = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = this._ffmpegPath,
UseShellExecute = false,
RedirectStandardInput = true,
RedirectStandardOutput = true,
RedirectStandardError = true,
CreateNoWindow = true
}
};

this._ffmpegProcess.StartInfo.Arguments = ffmpegCmd;
this._ffmpegProcess.OutputDataReceived += this.Proc_DataReceived;
this._ffmpegProcess.ErrorDataReceived += this.Proc_DataReceived;
this._ffmpegProcess.Exited += this._ffmpegProcess_Exited;
this._ffmpegProcess.Start();
this._ffmpegProcess.BeginOutputReadLine();
this._ffmpegProcess.BeginErrorReadLine();

渲染发生在计时器内:
 this._renderOverlayTimer = new Timer(this.RenderOverlay);
this._renderOverlayTimer.Change(0, 30);

启动 ffmpeg 进程后立即启动计时器:
 private void RenderOverlay(object state)
{
using (var ms = new MemoryStream())
{
using (var img = GetImage(...))
{
img.Save(ms, ImageFormat.Png);
ms.WriteTo(this._ffmpegProcess.StandardInput.BaseStream);
}
}
}

问题是我总是在“ms.WriteTo()”处收到“管道已结束”错误。

最佳答案

我现在使用命名管道并跟踪要处理的帧数。命名管道在处理完最后一帧后立即关闭。此解决方案可生成没有 IOExceptions 的正确视频。

关于c# - 如何识别 ffmpeg 管道已结束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50839369/

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