【问题标题】:How do i pipe stdout/stderr in .NET?我如何在 .NET 中管道 stdout/stderr?
【发布时间】:2010-03-23 17:01:09
【问题描述】:

我想做这样的事情

ffmpeg -i audio.mp3 -f flac - | oggenc2.exe - -o audio.ogg

我知道如何使用 .NET 中的进程类来执行 ffmpeg -i audio.mp3 -f flac,但我如何将其通过管道传输到 oggenc2?

如何做到这一点的任何示例(不需要是 ffmpeg 或 oggenc2)都可以。

【问题讨论】:

  • 您是从 .NET 应用程序中调用进程,还是尝试为您自己的控制台应用程序复制该参数格式?
  • 复制该论点是什么意思?你的意思是接受像 ffmpeg/oggenc2 这样的争论吗?不,我想在我的 .NET 应用程序中调用这些

标签: .net ipc stdout stderr


【解决方案1】:

好的,我为此编写了以下代码:

    Process ffmpeg = new Process
    {
        StartInfo = new ProcessStartInfo
        {
            FileName = "ffmpeg.exe",
            Arguments = "-i audio.mp3 -f flac -",
            UseShellExecute = false,
            RedirectStandardOutput = true,
            WindowStyle = ProcessWindowStyle.Hidden
        }
    };
    Process oggenc2 = new Process
    {
        StartInfo = new ProcessStartInfo
        {
            FileName = "oggenc2.exe",
            Arguments = "- -o audio.ogg",
            UseShellExecute = false,
            RedirectStandardInput = true,
            WindowStyle = ProcessWindowStyle.Hidden
        }
    };

    ffmpeg.Start();
    oggenc2.Start();

    int bufferLength = 4096;
    var input = oggenc2.StandardInput.BaseStream;
    var output = ffmpeg.StandardOutput.BaseStream;

    using (BinaryWriter writer = new BinaryWriter(input))
    {
        using (BinaryReader r = new BinaryReader(output))
        {
            byte[] buffer = new byte[bufferLength];
            int bytesRead;
            do
            {
                bytesRead = r.Read(buffer, 0, bufferLength);
                writer.Write(buffer, 0, bytesRead);
            } while (bytesRead > 0);
        }
    }

    ffmpeg.WaitForExit();

希望,这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-30
    • 1970-01-01
    • 1970-01-01
    • 2022-11-20
    • 1970-01-01
    • 2021-09-05
    • 2015-06-21
    • 1970-01-01
    相关资源
    最近更新 更多