我如何在 .NET 中管道 stdout/stderr?
Posted
技术标签:
【中文标题】我如何在 .NET 中管道 stdout/stderr?【英文标题】:How do i pipe stdout/stderr in .NET? 【发布时间】: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 应用程序中调用这些 【参考方案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();
希望,这会有所帮助。
【讨论】:
以上是关于我如何在 .NET 中管道 stdout/stderr?的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET Core Web API - 如何在中间件管道中隐藏 DbContext 事务?
如何在.Net Core 3.1中异步地将一个对象序列化为JSON并写入管道?
如何让 mvc 管道在 .net core 5 中对 oidc 进行身份验证
ASP.NET Core管道深度剖析:管道是如何建立起来的?