Ich habe Gameplay-Aufnahmen, die mit ShadowPlay („GeForce Experience“) mit 60 FPS aufgenommen wurden, was meines Wissens zu einer variablen Framerate führt, da das Spiel manchmal Frames auslässt. Der Versuch, dieses Video in Adobe Premiere zu verwenden, führt jedoch dazu, dass der Ton des Spiels stark hinter der Grafik zurückbleibt, da Premiere es so behandelt, als ob jeder Frame dieselbe Länge hätte.
Ich habe HandBrake mit diesen Einstellungen ausprobiert:
Qualität: konstant, RF 0 (verlustfrei)
FPS: 60, konstant
Detelecine: Aus
Decomb: Aus
Denoise: Aus
Deblock: Aus
Aber das Ausgabevideo ist nicht nur viel kleiner als das Quellvideo, sondern auch in Bezug auf die visuelle Qualität massiv schlechter. Warum ist es nicht verlustfrei, wenn ich es so eingestellt habe, dass es angeblich verlustfrei ist?
Eingabevideoinfo : http://pastebin.com/7Tss4brj
Ausgabevideoinfo : http://pastebin.com/DKFEzDKk (von Mediainfo)
Wie kann ich ein Video mit variabler Framerate verlustfrei in ein Video mit konstanter Framerate konvertieren?
Zunächst einmal: Ihre Version von Handbrake ist alt. Version 1.0.3 kam vor kurzem heraus, sie hat einige Verbesserungen gegenüber dieser älteren Version.
Zweitens ist CQ0 nicht wirklich „verlustfrei“. Es strebt eine „verlustfreie“ Qualität an, wird aber auf die Datenratenbeschränkungen des H.264-Levels stoßen , sodass Level 4.0 möglicherweise an einem bestimmten Punkt beispielsweise 100 MbPS benötigt, um eine „verlustfreie“ Komprimierung zu erreichen Begrenzen Sie es auf 20 MbPS oder so ähnlich. Beachten Sie, dass in der Ausgabe der Codierungseinstellungen in Ihrer Exportdatei „vbv_maxrate=20000“ aufgeführt ist, wo Ihre Bitrate begrenzt ist. Um also so nah wie möglich an verlustfrei zu kommen, benötigen Sie so etwas wie Level 5.2.
Wenn Sie also Ihren H.264-Pegel erhöhen, wird die Qualität verbessert, aber Premiere kann am Ende sehr hart daran tuckern. H.264 ist wirklich schlecht für die Bearbeitung. Es ist sehr rechnerisch komplex, vor allem, weil es nicht jeden Frame separat speichert (sogenannte Intraframe-Komprimierung), sondern Batches von Frames (als Group of Pictures oder GOP bezeichnet) nimmt und sie so zusammenkomprimiert, dass jeder einzelne Frame darin enthalten ist Eine GOP hängt von den umgebenden Frames ab, um ein vollständiges Bild zu reproduzieren. Dies wird als Interframe-Komprimierung bezeichnet, und die Anzahl der Frames in einer GOP hängt von den Parametern ab, die zum Zeitpunkt der Codierung festgelegt wurden, und kann sogar variabel sein (nicht typisch), aber Sie können sehen, was diese Parameter in MediaInfo sind, indem Sie die Zeile mit der Aufschrift „Format Einstellungen, GOP" ("N=30" bedeutet 30 Frames pro GOP), oder schauen Sie sich die Codierungseinstellungen an, wo "keyint" (Keyframe Interval) vermerkt ist. Sie müssen also alle 30 Frames decodieren, um Ihnen einen beliebigen Frame anzuzeigensehr CPU- und RAM-intensiv.
Wenn Sie den Speicher haben, würde ich empfehlen, die Verwendung von DNxHD in Betracht zu ziehen, einem "Mezzanine" (bearbeitungsfreundlichen) Codec, der die Qualität bewahrt, als "praktisch verlustfrei" gilt, aber nur geringe Auswirkungen auf CPU/RAM hat. Der Haken sind sehr hohe Bitraten. Wir sprechen also von ~130-200 GB/h bei 1080p59,94. Der andere Haken ist, dass DNxHD sehr begrenzte unterstützte Auflösungen und Bildraten hat . Es gibt auch CineForm, das eine ebenso hohe Qualität hat, aber viel flexibler ist, und sowohl CineForm als auch DNxHD werden von Premiere nativ unterstützt (CineForm in 2015 und höher), aber zuletzt habe ich überprüft, ob die CineForm-Unterstützung in anderen Tools wie ffmpeg fehlt.
Eine bearbeitungsfreundlichere Lösung wäre also, ffmpeg zu verwenden, um DNxHD mit einer Befehlszeile wie folgt zu erstellen:
ffmpeg -i (input file).mp4 -c:v dnxhd -b:v 290M -c:a pcm_s16le -r 60 (output).mxf
Das würde DNxHD mit unkomprimiertem Audio in einer MXF-Op1a-Datei machen. Sie könnten dort auch .mov an das Ende hacken und stattdessen genauso einfach eine Quicktime-Datei erstellen. Beachten Sie, dass -r die Ausgabebildrate festlegt. Sie könnten versuchen, H.264 in ffmpeg zu verwenden, indem Sie den Video-Codec (-c:v) ändern, aber Sie werden auf die gleichen Einschränkungen stoßen wie bei der Arbeit mit Handbrake, daher weiß ich nicht, ob es sich wirklich lohnt, zu gehen in das hier.
Ich nehme meine Shadowplay-Inhalte mit den folgenden Einstellungen auf:
Es ist also nicht mit dem erwähnten DNxHD kompatibel. Die Audiokanäle liegen ebenfalls in variablen Frameraten vor und müssen synchronisiert werden.
Im Folgenden werden Video und Audio in 60 FPS CFR neu codiert und es treten keine Probleme mit der Audiosynchronisierung in Adobe Premier auf. Sie speichern es in einer Batchdatei (.bat) und führen es dann über die Befehlszeile mit der Videodatei als erstem Argument aus.
@echo off
set inputFile=%1
set outputFile=%inputFile:.mp4=_cbr.mp4%
ffmpeg ^
-i %inputFile% ^
-vsync 1 -async 1 ^
-map 0:v:0 ^
-c:v libx264 ^
-preset veryfast ^
-x264-params "nal-hrd=cbr" ^
-b:v 50M ^
-framerate 60 ^
-map 0:a:0 ^
-c:a:0 aac ^
-b:a 384k ^
-map 0:a:1 ^
-c:a:1 aac ^
-b:a 384k ^
%outputFile%
Beim Vergleich einzelner Frames ist mir kein Qualitätsunterschied zwischen dieser und der Originalaufnahme aufgefallen. Sie können einige der Optionen wie die Framerate ändern, um sie an Ihren Inhalt anzupassen, oder die Bitrate erhöhen, wenn Sie glauben, dass es zu Verlusten kommt.
Gyan
Zdenek Gromnica
Gyan
Zdenek Gromnica
Zdenek Gromnica
Zdenek Gromnica
Gyan
ffmpeg -i in.mp4 -r 60 -crf 0 -profile:v main -c:a copy out.mp4
Zdenek Gromnica
Gyan
-pix_fmt yuv420p
Zdenek Gromnica