没有在线教程甚至是书籍,用C#处理标准输出。
我想将标准输出保存在变量(内存)中,而不是Shell执行中的文件。
这用于使用ffmpeg存储来自视频文件的缩略图。
以下是我的代码。
public static void GetThumbnail(string video, string thumbnail, string ffdir)
{
var cmd = " -ss 00:01:00.000 -i " + '"' + video + '"' + " -vcodec rawvideo -vframes 1 -an -f rawvideo -s 320x240 pipe:1 ";
var startInfo = new ProcessStartInfo
{
WindowStyle = ProcessWindowStyle.Normal,
FileName = ffdir + "\\ffmpeg.exe ",
Arguments = cmd,
RedirectStandardOutput = true,
UseShellExecute = false
};
var process = new Process
{
StartInfo = startInfo
};
process.OutputDataReceived += ProcessOnOutputDataReceived;
process.ErrorDataReceived += ProcessOnOutputDataReceived;
process.Start();
process.WaitForExit(1000);
}
private static void ProcessOnOutputDataReceived(object sender, DataReceivedEventArgs dataReceivedEventArgs)
{
....
}
但是当GetThumbnail函数启动时,它不会进入事件处理函数(ProcessOnOutputDataReceived)。
有什么线索可以解决这个问题吗?
我在这里提到了问题和答案: getting mulitple images from a single stream piped from ffmpeg stdout
但它没有帮助。它似乎是以前.NET版本的代码。
答案 0 :(得分:0)
您可以将其保存在字符串中。
var content = process.StandardOutput.ReadToEnd();
或者如果它是异步的,我想你可以使用String Builder并在其他地方检查OutputStream。
答案 1 :(得分:0)