FFMPEG/x264: Kann ich Pass 1 aus einer Kodierungssitzung als Pass 2 für eine andere verwenden?

FFMPEG/x264: Kann ich Pass 1 aus einer Kodierungssitzung als Pass 2 für eine andere verwenden?

Frage:

Ist es zulässig, eine "Pass 1"-Kodierung eines Quellvideos mit einer Auflösung/Bitrate als Eingabe für eine "Pass 2"-Kodierung derselben Quelle mit einerandersAuflösung/Bitrate? Ich habe es probiert und essiehhhhzu funktionieren, bin mir aber nicht ganz sicher, ob es im Allgemeinen funktioniert: Das Stream-Profil (I/P/B-Frame-Auswahl usw.) sieht anders aus, wenn man für beide Durchläufe die gleichen Parameter verwendet, sieht aber auch „gut genug“ aus.

Ich bin an dem Punkt angelangt, an dem ich eine fundierte Antwort darauf brauche.

Warumin Tarnation 1würdest du das machen?

Denn die Two-Pass-Kodierung behebt einen ärgerlichen Fehler in FFMPEG (eigentlich x264), der wahrscheinlich nicht so bald behoben wird: Abhängig von der Geschwindigkeit Ihres Computers hat die erste ~1 Sekunde des Videos oft eine völlig unangemessene Bitrate. Dies lässt sich sehr leicht reproduzieren, indem ein Quellstream mit hoher Bitrate auf einem sehr schnellen Computer (wie einemEC2 c4.8xlarge). Ein im Leerlauf befindliches i7 Quadcore MacBook ProIST NICHTausreichend, um diesen Fehler zu reproduzieren.

Es wird entwederÜBERAUShoch:

  • Single-Pass-CBR ohneVBVangegeben

    (Ignorieren Sie die Tatsache, dass CBR ohne VBVist überhaupt nicht CBR)

oder zu niedrig:

  • Single-Pass-CBR mitVBV
  • Einzeldurchgang-VBR:QScalemitVBVund maxrate

Sowohl VIFp- als auch SSIM-Qualitätsmessungen zeigen, dass die niedrigeren/hohen Bitraten tatsächlich einer unnötig reduzierten/erhöhten Qualität entsprechen (d. h. die Bitratesollte nichthöher oder niedriger gewesen sein).

Eine zweistufige CBR-Kodierung funktioniertGroßartigund löst das Problem ... wenn Sie die Zeit dafür haben. Leider kann ich mir die Latenz einer Zwei-Durchgang-Kodierung für eine einzelne Auflösung nicht leisten.

Also, was möchten Sie tun?

Ich führe derzeit eine erste Transkodierung mit einer niedrigeren Auflösung (480) durch. Dadurch werden so viele Wiedergabegeräte wie möglich abgedeckt. Ich würde das gerne als meinen ersten Durchgang verwenden. Da die Auflösung von 480 sowieso Mist ist, kann ich das Video aus dem ersten Durchgang einfach als mein 480er-Video posten, ungeachtet etwaiger alberner Bitraten in der ersten Sekunde des Videos.

Ich würde dann gerne verwendender 480 Pass 1 Infound mache nur bei meinen höheren Auflösungen Pass 2. Im CBR/VBV-Fall wäre das:

ffmpeg -i source.mp4 -pass 1 -vf  scale=852:480 -c:v libx264 -b:v 1000k ... 480.mp4
ffmpeg -i source.mp4 -pass 2 -vf scale=1280:720 -c:v libx264 -b:v 2500k ... 720.mp4

Barney Google

verwandte Informationen