Schnellere Methode zum Schreiben von Bildern in Process.StandardInput.BaseStream

Ich versuche, eine Menge von auf dem Desktop aufgenommenen Bildern an einen Encoder (FFmpeg) zu senden.

Das folgende Codebeispiel funktioniert.

dasCaptureScreen() Funktion liefert ein Bild in 5-10 ms.

Wenn ich das Bild in einem MemoryStream speichere, dauert es fast keine Zeit.

Ich kann aber nur 1 Bild alle 45 ms in proc.StandardInput.BaseStream speichern.

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());
}

Die Frage ist:

Kann ich den Speichervorgang beschleunigen?

Ich versuche so 60 fps stabil zu machen

Antworten auf die Frage(1)

Ihre Antwort auf die Frage