Has*_*bii 5 c# stdin ffmpeg image binarywriter
我试图将大量桌面捕获的图像发送到编码器(FFmpeg)stdin.
以下代码示例有效.
该CaptureScreen()功能可在5-10毫秒内提供图像.
如果我将图像保存在MemoryStream中,几乎不需要时间.
但我只能每45毫秒将1张图像保存到proc.StandardInput.BaseStream.
public void Start(string bitrate, string buffer, string fps, string rtmp, string resolution, string preset)
{
proc.StartInfo.FileName = myPath + "\\ffmpeg.exe";
proc.StartInfo.Arguments = "-f image2pipe -i pipe:.bmp -vcodec libx264 -preset " + preset + " -maxrate " + bitrate + "k -bufsize " +
buffer + "k -bt 10 -r " + fps + " -an -y test.avi"; //+ rtmp;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardInput = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.Start();
Stopwatch st = new Stopwatch();
BinaryWriter writer = new BinaryWriter(proc.StandardInput.BaseStream);
System.Drawing.Image img;
st.Reset();
st.Start();
for (int z = 0; z < 100; z++)
{
img = ScrCap.CaptureScreen();
img.Save(writer.BaseStream, System.Drawing.Imaging.ImageFormat.Bmp);
img.Dispose();
}
st.Stop();
System.Windows.Forms.MessageBox.Show(st.ElapsedMilliseconds.ToString());
}
Run Code Online (Sandbox Code Playgroud)
问题是:
我可以更快地完成保存过程吗?
我尝试以这种方式稳定60 fps
这里的瓶颈是 ffmpeg 读取数据的速度与将其压缩为 .avi 的速度相同,这很慢。因此,您的img.Save方法会阻塞,直到流的缓冲区中有一些空间可以写入其数据。
你无能为力。实时压缩 60 fps 高清视频需要巨大的处理能力。
| 归档时间: |
|
| 查看次数: |
2632 次 |
| 最近记录: |