使用 ffmpeg 管道选项将转换后的视频导出到流中

Export converted video into stream using ffmpeg pipe option

我正在流式传输并成功将转换后的视频输出为 mkv 文件。

var stream = ..incoming stream of type MemoryStream();
var process = new System.Diagnostics.Process();
process.StartInfo.Arguments = "-f mp4 -i pipe:0 -c:v libx264 -crf 20 -s 600:400 -f matroska myfile.mkv";
process.Start();
process.StandardInput.BaseStream.Write(stream.ToArray())
process.BeginOutputReadLine()
process.StandardInput.BaseStream.Close();
process.WaitForExit(1000);

我的问题是:如何更改实现(命令和 StandardOutput.BaseStream 以便将结果导出到内存流而不是文件(如上例所示)。

你在刚刚删除的问题中所做的是正确的,

-f mp4 -i pipe:0 -c:v libx264 -crf 20 -s 600:400 -f matroska pipe:1

让您将输出写入管道。但是您可能会遇到死锁,因为 FFmpeg 不会立即读取 stream.ToArray() 的全部内容。它只读取产生下一个输出数据帧所需的内容。

因此,您的程序需要 运行 至少 2 个线程,一个用于写入 FFmpeg,另一个用于从 FFmpeg 读取。不幸的是,我不熟悉 .net,所以我无法帮助您实际操作,但希望这个答案能为您指明正确的方向。