FFmpeg transkodiert nicht in Echtzeit

FFmpeg transkodiert nicht in Echtzeit

Ich habe für einen Freund eine Aufnahmeumgebung eingerichtet, die meiner ähnelt, aber ich kriege es nicht hin, dass die Dinge in Echtzeit funktionieren, obwohl die Hardware (soweit ich weiß) ausreichend ist.

Systemdaten: 8600K, GTX 1050ti, 16 GB RAM, 1 TB 860 EVO

Testbefehl (der Einfachheit halber aktualisiert):

ffmpeg -y -hide_banner -thread_queue_size 9999 -f dshow -rtbufsize 2147.48M -video_size 1920x1080 -framerate 60 `
-i video="@device_pnp_\\?\usb#vid_07ca&pid_0570&mi_00#7&3886ab1a&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global" `
-thread_queue_size 9999 -f dshow -rtbufsize 2147.48M -video_size 1920x1080 -framerate 60 `
-i video="@device_pnp_\\?\usb#vid_07ca&pid_0570&mi_00#7&24df76f&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global" `
-map 0 -c:v h264_nvenc -r 60 -preset: llhp -pix_fmt yuv420p -b:v 1M -minrate 1M -maxrate 1M -bufsize 1M `
C:\Users\Jordan\Videos\FFmpeg\Left\Left.ts `
-map 1 -c:v h264_nvenc -r 60 -preset: llhp -pix_fmt yuv420p -b:v 1M -minrate 1M -maxrate 1M -bufsize 1M `
C:\Users\Jordan\Videos\FFmpeg\Right\Right.ts

Das Ziel dieses Befehls ist es, zwei separate synchronisierte Ausgaben aufzuzeichnen. Aus irgendeinem Grund transkodiert dieser Befehl das Video jedoch nicht in Echtzeit, was ein großes Problem darstellt, wenn Sie versuchen, eine Datei aufzuzeichnen und nicht einfach zu konvertieren. Wenn ich eine der beiden Ausgaben weglasse oder die Auflösung jedes Eingangs/Ausgangs halbiere, funktioniert alles in Echtzeit. Das würde mich glauben lassen, dass es irgendwo im System einen Engpass gibt, aber wenn ich alles im Task-Manager überwache, ist nichts auch nur annähernd ausgelastet (GPU-Encoder, CPU, RAM und SSD sind zu weniger als 30 % ausgelastet).

Wenn ich außerdem versuche, beide Streams in einem 4K60-Video über OBS aufzuzeichnen, funktioniert alles einwandfrei, wie in Echtzeit. Ich verstehe also nicht, wie die Transkodierung von zwei 1080p60-Streams in FFmpeg aufwändiger sein kann als ein 4K60-Stream in OBS ...

Ich habe die 1050ti inzwischen gegen eine GTX 1080 ausgetauscht, ohne dass sich die Leistung geändert hat. Das lässt mich glauben, dass die CPU schuld ist. Es sieht so aus, als würde FFmpeg wirklich nur 1-2 Threads ansprechen ... gibt es eine Möglichkeit, es zu zwingen, mehr zu verwenden? -Threads scheint keine Auswirkung zu haben, egal wo ich es in den Befehl einfüge. Was wirklich seltsam ist, ist, dass ich einen sehr ähnlichen Befehl habe, aber zwei 4K60-Streams anstelle von zwei 1080p60-Streams mit einer GTX 1080 und 6800K mache ... Soweit ich das beurteilen kann, hat die 8600K im Vergleich zur 6800K eine höhere Leistung pro Thread, also bin ich mir nicht sicher, wie ich mit so viel mehr davonkommen kann.

Ich wäre für jede Einsicht sehr dankbar.

Antwort1

Das Problem lag bei den Aufnahmekarten. Ich habe eine aus seinem System gezogen und in meins gesteckt und konnte das Problem reproduzieren. Dies ist mit keiner meiner anderen Aufnahmekarten reproduzierbar und ich habe 4 davon.

Das Problem scheint durch die auf der Karte selbst gespeicherte Stream Engine Bloatware von Avermedia verursacht zu werden. Die Karte wird tatsächlich als zwei Geräte angezeigt, eines ohne Stream Engine im Namen und eines mit. Wenn Sie das mit auswählen, sind die Probleme zwar behoben, aber immer noch vorhanden. Da ich bestätigen kann, dass das Problem bei Elgatos HD60 Pro nicht besteht, haben wir zwei davon bestellt.

Im Nachhinein erklärt Bloatware/unkonventionelle Firmware die extrem schwer zu diagnostizierenden Probleme. Zum Glück haben wir die Avermedia Live Gamer HD 2s im Angebot gekauft und können sie gegen volle Rückerstattung des Kaufpreises weiterverkaufen, also auf Nimmerwiedersehen.

verwandte Informationen