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

标签 c# ffmpeg redirectstandardoutput

没有用于使用 C# 处理标准输出的在线教程甚至书籍。

我想将标准输出保存在变量(内存)中,而不是 Shell Execution 中的文件中。

这用于使用 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 版本的代码。

最佳答案

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

var content = process.StandardOutput.ReadToEnd();

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

关于c# - 将标准输出保存在内存中,而不是 C# 中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41215124/

相关文章:

c# - 打开文件和读取内容的最可靠方法是什么

video - 如何使用 ffmpeg 将 WebM 音频(Opus)和 MP4 视频(H.264)合并为一个 MP4 文件

ffmpeg - 如何在FFMpeg中连接两个或多个具有相同宽度和不同高度的视频并保持相同的纵横比?

c# - 从 StandardOutput 获取二进制数据

java - 在java中将数据从标准输出写入文本文件不起作用

c# - 异步捕获多个进程的输出

c# - 返回匿名类型的简单方法(使使用 LINQ 的 MVC 成为可能)

c# - LINQ BeginTransaction 可以使用新的 Context 吗?

c# - .net 的错误报告框架

ffmpeg - 将视频分成几部分