Zu Beginn würde ich die Einzelperson -rtbufsize
für jede Eingabe verlieren . Wenn ffmpeg hinterherhinkt, wird die Erhöhung des Echtzeitpuffers nicht helfen, es sei denn, Sie versuchen, gelegentliche Spitzen zu beseitigen. Ich bin mir nicht sicher, wie viel Spielraum ffmpeg für Windows reserviert, aber ich denke, man kann davon ausgehen, dass es bei einer Framerate von 12 Bildern pro Sekunde bei einer auf 30 eingestellten Framerate für die Bildwiederholrate nie aufholen wird. Im Grunde nimmt er bis zu 1 GB des Screenshots auf, um ihn später zu codieren, und fungiert als Puffer von vielleicht einer Minute, möglicherweise kürzer, bevor Frames fallen.
Sie sagten, Sie könnten ohne Probleme mit 30 Bildern pro Sekunde speichern, daher ist es wahrscheinlich die Geschwindigkeit beim Hochladen auf Facebook. Sie müssen also die Ausgabe im Grunde kleiner machen.
Ich bin mir ziemlich sicher, dass ffmpeg alle Eingaben standardmäßig als 25fps liest. Wenn Sie also die Ausgabe auf 25fps statt auf 30 setzen, wird Ihre FPS wahrscheinlich auf über 20 kostenlos erhöht. Ich bin mir nicht sicher, wie dshow funktioniert, daher kann ich mich irren, wenn Sie wirklich 30 Bilder pro Sekunde wollen.
und ich habe gerade bemerkt, dass Sie sich -b:v 8M
für den Encoder entschieden haben ... ist das für Ihre Internetverbindung realistisch? Viele ISPs werden die Uploads für Privatkunden drosseln, so dass Sie möglicherweise nicht mehr als 3-4 MBit / s erreichen können, insbesondere wenn Sie Live-Streams nutzen möchten.
Sie möchten -preset=slow
oder verwenden, medium
wenn Sie eine Voreinstellung verwenden möchten . Für den Hardware-Encoder ist dies möglicherweise etwas anderes. Daher sollten Sie die Optionen überprüfen. Da die Netzwerkgeschwindigkeit jedoch der Engpass ist, können Sie nicht viel tun, wenn Sie Echtzeit-Streaming wünschen. Das Video muss also in der Framerate kleiner sein Auflösung oder Komprimierung.