x264: Welches Tuning für beste Live-Streaming-Qualität ohne erhöhte Bitrate?

5162
Trr1ppy

Ich versuche, ein FPS-Shooter-Spiel von OBS 20.0.1 mit der niedrigsten möglichen Bitrate zu streamen, während die bestmögliche Qualität (dh weniger blockige Pixel) erhalten bleibt.

Ich bin besorgt, dass mehr Referenzrahmen meine Bitrate erhöhen werden. Da es sich hierbei um High-Motion-Streaming handelt, sollte ich das -tune animationDeblocking beschleunigen? Oder wären PSNRoder SSIMwären vielversprechende Kandidaten?

Gibt es eine bessere / andere Möglichkeit, welche zu testen? -tune -Option am besten ist, als sie mit Test-Streams zu testen?

Gibt es auch andere x264-Optionen, von denen mein Stream profitieren würde, die aber nicht in OBS enthalten sind?

Mein OBS-Setup: OBS Setup

Meine Hardware:

  • CPU: Intel i7-4770k
  • GPU: Nvidia GTX780 Ti
  • RAM: 12 GB, 1600 MHz
1
Ihre Verbindung ist unterbrochen. Warum nicht den Code in die Frage stellen? Haben Sie auch [FFmpegs Streaming Guide] (https://trac.ffmpeg.org/wiki/StreamingGuide) gelesen? flolilolilo vor 6 Jahren 0
Lesen Sie auch [diesen Beitrag über die Tuning-Modi von x264] (https://superuser.com/questions/564402/explanation-of-x264-tune/564404#564404). flolilolilo vor 6 Jahren 0
Der FFmpegs-Streaming-Leitfaden besagt nur, dass die Zero-Latenz verwendet werden muss, und der x264-Tune-Modi-Post ist nicht tief genug, um eine fundierte Entscheidung zu treffen. Wenn ich jedoch das Beste erraten müsste, würde ich mit Animation aus dem Post gehen Trr1ppy vor 6 Jahren 0
Nicht versuchen, unhöflich zu sein, aber da Sie über den Heiligen Gral sprechen (** schneller ** Encoder, der nur eine kleine Bitrate ** für ** optisch überlegene ** Ergebnisse benötigt), glaube ich nicht, dass Sie dies tun Verstehen Sie die Wichtigkeit (oder das Fehlen davon) des Parameters "-tune" in x264. Wenn die Verwendung von "-tune PSNR" zu besseren Ergebnissen mit weniger Bitrate in kürzerer Zeit führen würde, würde ich denken, dass jeder sie verwenden würde (und fördern würde), insbesondere da es sich um ein Open-Source-Tool handelt, das gut dokumentiert und diskutiert ist . flolilolilo vor 6 Jahren 0
Ich denke, Sie haben Recht, ich habe gerade gehüpft, es gäbe einen h264-Experten mit umfassenden Kenntnissen darüber, wie die Parameter der Abstimmung den Kodieralgorithmus beeinflussen. Ich denke, dass die Melodieparameter nicht sehr gut für den Fall von Streaming diskutiert werden, aber wahrscheinlich, weil, wie Sie sagten, "Mangel an Wichtigkeit". Was ich nachschlagen sollte, ist das, was die Völker des Stream-PCs für ihre Melodie-Parameter verwenden, und ich wage zu behaupten, dass es der -tune-Filmparameter sein wird, da sie hohe Bitraten haben werden, denke ich in Summation für niedrige Bitraten. - Die Tune-Animation wird das Blockieren reduzieren auf Streams geringer Qualität Trr1ppy vor 6 Jahren 0

2 Antworten auf die Frage

1
slhck

Ich versuche, ein FPS-Shooter-Spiel von OBS 20.0.1 mit der niedrigsten möglichen Bitrate zu streamen, während die bestmögliche Qualität (dh weniger blockige Pixel) erhalten bleibt.

Sie können dies tun, aber es wird viel Zeit für die Codierung benötigen. Da Sie Live-Streaming verwenden, gehe ich davon aus, dass Sie einen einzelnen Codierungsdurchgang wünschen, und zwar vorzugsweise einen, der schnell ist, dh die CPU-Ressourcen maximal ausnutzt. Sie sollten also mit der CPU-Geschwindigkeitsvorgabe herumspielen - wählen Sie den höchsten Wert, den Sie tolerieren können.

Es ist unmöglich, alle diese Parameter (Geschwindigkeit, Qualität, Bitrate) gleichzeitig zu optimieren. Aus diesem Grund bieten x264 (und andere Encoder) eine Möglichkeit, die Geschwindigkeitsvoreinstellung (z. B. von ultrafastbis veryslowin x264) auszuwählen . Diese Voreinstellungen aktivieren / deaktivieren bestimmte Optionen, die die Komprimierungsqualität optimieren bzw. die Kodierungszeit minimieren.

Ich bin besorgt, dass mehr Referenzrahmen meine Bitrate erhöhen werden

Das ist im Allgemeinen richtig, da diese wesentlich größer sind.

Da es sich hierbei um High-Motion-Streaming handelt, sollte ich die -tune-Animation verwenden, um das Deblocking zu verstärken? Oder wären PSNR oder SSIM vielversprechende Kandidaten?

Schauen Sie sich diesen anderen Beitrag an, in dem die Melodiemodi erklärt werden .

Für Ihren speziellen Fall von Live-Streaming mit niedriger Latenz und einem Codierdurchgang ist die Verwendung nicht sinnvoll film. Dies dient zum Erhalten von (körnigen) Details.

Ihre Besorgnis über Blockiness mit niedriger Bitrate ist verständlich, aber das animationPreset ist für Live-Streaming nicht sinnvoll, da es auch die Anzahl der B-Frames erhöhen würde, die Sie sowieso auf 0 (oder eine niedrige Anzahl) setzen möchten, um schnell zuzulassen Codierung. Für B-Frames müssen frühere und zukünftige Frames codiert werden, was bedeutet, dass der Codierer / Decodierer einen größeren Puffer zum Speichern dieser Frames halten muss. Je mehr B-Frames, desto besser ist die Qualität auf Kosten der Codierungszeit.

Die Modi psnrund ssimsind ebenfalls nicht nützlich. Sie werden nur bei der Encoderentwicklung / -optimierung verwendet und können zu einer schlechteren subjektiven Qualität führen.

Vielleicht zerolatencypasst Ihr Anwendungsfall besser?

Gibt es eine bessere / andere Möglichkeit, die -tune-Option zu testen, als sie mit Test-Streams auszuprobieren?

Theoretisch könnten Sie einige Original-Streams codieren, diese dann mit anderen Einstellungen codieren und sie mit einem Full-Reference-Videoqualitätsanalysator wie VQMT oder VMAF durchlaufen . Diese geben Ihnen eine Qualitätsbewertung für die Kodierungen. Ich vermute aber, dass die visuelle Kontrolle der Ergebnisse auch in Ihrem Fall ausreichend ist.

Oh, und ich sollte hinzufügen, dass das OBS-Forum wahrscheinlich ein guter Ort für Fragen ist, da Ihre Fragen sehr spezifisch für Streaming-Videos sind, was eine Art Nischenanwendung ist. slhck vor 6 Jahren 1
Vielen Dank für Ihre sehr informative Antwort. Zur Verdeutlichung: Wenn ich B-Frames vergrößere, dauert es länger und länger, bis der Encoder bis zu dem Punkt verarbeitet wird, an dem ich nicht in Echtzeit codieren kann. Durch die Verringerung von B-Frames wird die Codierung auf Kosten der Qualität beschleunigt ? Sind auch Keyframes mit B-Frames verwandt, scheint Keyframes die Häufigkeit von B-Frames anzugeben? Ich möchte so viele Computerressourcen wie möglich verwenden und gleichzeitig Echtzeitkodierung beibehalten (natürlich, weil ich Streaming). Trr1ppy vor 6 Jahren 0
1) Ja, obwohl die Verzögerung nicht zu groß ist. Je kleiner Ihr Keyframe-Intervall ist, desto geringer ist die Codierungsverzögerung, wenn Sie mehr B-Frames verwenden. 2) Nein, das Keyframe-Intervall legt das Intervall zwischen I-Frames fest. Die Einstellung 'bframes' in x264 bestimmt die maximale Anzahl von B-Frames in Folge; Wenn keine B-Frames verwendet werden, füllt der Encoder ihn mit P-Frames. Verwenden Sie in Ihrem Fall möglicherweise nicht mehr als 1-2 B-Frames (wenn überhaupt) und versuchen Sie, das Keyframe-Intervall kurz zu halten (meine Vermutung: 3-4 Sekunden?). Schwer eine genaue Antwort zu geben, müsste man die resultierende Qualität wirklich überprüfen. slhck vor 6 Jahren 0
-1
Trr1ppy

Der tuneParameter hat keinen großen Einfluss auf die Stream-Qualität, was mit der fehlenden Diskussion und / oder den Erwähnungen seiner Optionen in den Handbüchern zusammenhängt. animationkann mit Streams mit niedriger Bitrate verwendet werden, um das Deblocking zu erhöhen, und filmmit Streams mit hoher Bitrate verwendet werden, um den Stream so nah wie möglich an der Quelle zu halten. Wie effektiv das Deblocking oder das Fehlen von bin, bin ich mir nicht sicher.

PSNRund SSIMdienen zu Test- und Vergleichszwecken zwischen der Ratensteuerung (CBR, ABR, VBR, CRF).