gpt4 book ai didi

c# - 无法将进程的输出流保存到文件

转载 作者:太空宇宙 更新时间:2023-11-03 14:48:55 25 4
gpt4 key购买 nike

我正在使用 ffmpeg.exe 作为进程并将转换后的视频输出到内存,然后从内存中我将数据保存到视频文件(这是我无法做到的要求直接将转换后的视频保存到文件中)。但是由于某种原因转换不起作用,这是我尝试过的,

var ffmpeg = HttpContext.Current.Server.MapPath("~/FFMpeg/ffmpeg.exe");
var outputDir = HttpContext.Current.Server.MapPath("~/Uploads/converted.mp4");
var inputDir = "https://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_10mb.mp4";
var args = "-i " + inputDir + " -c:v libx264 -preset veryslow -crf 26 " +
"-ar 44100 -ac 2 -c:a aac -strict -2 -b:a 128k -";

var process = new Process();
process.StartInfo.UseShellExecute = false;
process.StartInfo.FileName = ffmpeg;
process.StartInfo.WorkingDirectory = ffmpeg.Replace("\\ffmpeg.exe", "");
process.StartInfo.Arguments = args;
process.StartInfo.RedirectStandardOutput = true;
process.Start();
process.EnableRaisingEvents = true;
//process.WaitForExit();
Stream output = process.StandardOutput.BaseStream;
process.Exited += (sender, e) =>
{
using (var fileStream = File.Create(outputDir))
{
output.Seek(0, SeekOrigin.Begin);
output.CopyTo(fileStream);
}
};

输出文件 converted.mp4 已创建,但为 0 kb。

最佳答案

根据我的理解,由于过程的长度,IIS 甚至在它可以做任何有值(value)的事情之前就终止了应用程序。这并不意味着 IIS 无法触发外部程序为您接管,因此大多数情况下您是将进程 (.exe) 从 IIS 用户空间移动到更适合的多线程用户空间。你可以推出自己的队列管理系统,但在过去,我使用过 HangFire,因为它更适合这项任务。使用 hangfire,您可以提交转换文件的工作并让它处理用户的请求,您只需在数据库中放置一个条目,显示 FFMPEG 正在转换的数据的状态。因此,当用户刷新页面时,它将轮询数据库以获取信息,而不是 .exe 本身的控制台输出(这将在刷新时被清除。)

https://www.hangfire.io/

关于c# - 无法将进程的输出流保存到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52741406/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com