FFMPEG/x264: Einzeldurchgang: Wie erhöhen Sie die Startzeit-Bitrate?

FFMPEG/x264: Einzeldurchgang: Wie erhöhen Sie die Startzeit-Bitrate?

Bei Verwendung des Single-Pass-Modus mit einer angegebenen VBV-Größe wird libx264 die Bitrate zunächst „sandbaggen“, vermutlich aus Mangel an Beweisen (oder vielleicht sogar aufgrund eines Fehlers). (Dies ist eine ironische Fortsetzung dieser Frage, die sich mit zu HOHEN Anfangsbitraten bei Single-Pass-Kodierung befassteohneeine VBV-Spezifikation)

Weitere Informationen finden Sie in den Bitrate-Diagrammen unten: Beachten Sie den ursprünglichen Einbruch, gefolgt von einer Überkorrektur („Hey, ich habe noch ein paar Bits übrig!“) vor einer Normalisierung. Beachten Sie, dass dies in der Zwei-Durchgangs-Lösung korrigiert wird. Das Fehlen des anfänglichen I-Frames in diesen beiden Diagrammen ist wahrscheinlich ein Tool-Fehler (der PTS-Wert des anfänglichen I-Frames beträgt 0,15 Sekunden).

Dieser Effekt verhindert die parallele Verarbeitung eines langen Assets nach dem Motto „aufteilen, kodieren und neu zusammensetzen“, da Sie zu Beginn jedes Segments einen hochwertigen Beat erhalten.

Dies kann durch Dual-Pass-Encoding behoben werden, eine für Live-Streams nicht akzeptable Lösung (bei Parallelisierung könnten jedoch die Kosten für Dual-Pass-Encoding getragen werden).

Ich würde mir zwei Lösungen wünschen: Jede Hilfe wäre mehr als willkommen.

  1. Eine Single-Pass-Lösung, bei der der Encoder angewiesen wird, zunächst viele weitere Frames zu halten, bevor er eine Ausgabe erzeugt, wodurch der anfängliche Sandsackeffekt reduziert wird

  2. Eine Möglichkeit, eine begrenzte Zwei-Pass-Kodierung als „Pipe“ durchzuführen: Eine vollständige Zwei-Pass-Kodierung als Pipe ist natürlich unsinnig, aber es sollte möglich sein, „Mikro-Passes“ zu haben, bei denen die Pass-Feedback-Periode etwa eine Sekunde beträgt. Dies ist viel weniger ideal als eine Single-Pass-Lösung, um einen so kurzen Effekt zu umgehen, wäre aber akzeptabel, wenn (1) unmöglich ist.

    • Single Pass Bitrate-Diagramm: Beachten Sie den anfänglichen „Sandbag Dip“. Generiert mit:

ffmpeg -i 1080-60fps.mp4 -vf "scale=1200:720" -b:v 1000k -bufsize 1000k onepass.mp4

Bildbeschreibung hier eingeben

  • Zwei-Durchgang-Bitratendiagramm: Dies ist das nahezu ideale Ergebnis. Beachten Sie, dass diese endgültige Form nicht unbedingt erforderlich ist: Es reicht aus, den anfänglichen Sandsack zu vermeiden. Generiert mit:

ffmpeg -i 1080-60fps.mp4 -vf "scale=1200:720" -b:v 1000k -pass 1 -f mp4 /dev/null

ffmpeg -i 1080-60fps.mp4 -vf "scale=1200:720" -b:v 1000k -pass 2 twopass.mp4

Two-Pass-Bitratediagramm: Dies ist das erwartete Ergebnis

  • Ausschnitt des ersten Frames bei der Single-Pass-Kodierung

Bildbeschreibung hier eingeben

  • Ausschnitt aus dem ersten Frame der Two-Pass-Kodierung

Bildbeschreibung hier eingeben

verwandte Informationen