将标准输出保存在内存中而不是C#中的文件中

时间:2016-12-19 02:48:55

标签: c# ffmpeg redirectstandardoutput

没有在线教程甚至是书籍,用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版本的代码。

2 个答案:

答案 0 :(得分:0)

您可以将其保存在字符串中。

var content = process.StandardOutput.ReadToEnd();

或者如果它是异步的,我想你可以使用String Builder并在其他地方检查OutputStream。

答案 1 :(得分:0)

你需要

process.BeginOutputReadLine();
process.BeginErrorReadLine();

This question 实际上是重复的。