Der Artikel, den Sie verlinkt haben, ist nicht sehr gut.
Normalerweise konvertieren Single-Pass-Bitratencodierungen Ihre Bitrate in einen RF-Wert mit einem maximalen Bitratenlimit und nehmen ihn von dort auf.
Die einmalige ABR-Ratensteuerung von x264 ist nicht als CRF + -Limit implementiert. Er hat Recht, dass 2pass bei weitem der beste Weg ist, eine Ziel-Bitrate zu erreichen.
Und er merkt anscheinend nicht, dass er x264 mit Threads = 3 oder so beginnen könnte, um etwas CPU-Zeit für andere Aufgaben frei zu lassen. Oder setzen Sie die Priorität von x264 auf sehr niedrig, damit nur die CPU-Zeit zur Verfügung steht, die keine andere Aufgabe benötigt.
Er mischt auch Threads = 1 mit CUDA oder so. Kein Wunder, dass Sie Fragen haben, denn dieser Artikel hat eine SCHRECKLICHE Erklärung. Der gesamte Artikel besteht im Wesentlichen aus: Verwenden Sie x264 --preset veryslow --tune film --crf 26 in.m2ts --out out.mkv
oder verwenden Sie möglicherweise eine Lichtfilterung mit einem AviSynth-Eingabeskript. Er empfiehlt tatsächlich "Placebo". Das ist komisch. Ich habe noch nie eine mit Placebo verschlüsselte Raubkopie gesehen. (Sie können von me=esa
oder me=tesa
anstelle me=umh
aller guten Qualitätsvoreinstellungen bis zu unterscheiden veryslow
.
Er erwähnt auch nicht die Verwendung von 10-Bit-Farbtiefe. Das Kodieren und Dekodieren ist langsamer, aber selbst nach der Rückkonvertierung auf 8-Bit erhalten Sie ein besseres 8-Bit-SSIM. Offenbar hilft es, wenn Bewegungsvektoren präziser sind. Es hilft auch, nicht auf genau einen 8-Bit-Wert abrunden zu müssen. Sie können sich 8-Bit pro Komponente als Speed-Hack vorstellen. Das Quantisieren im Frequenzbereich und das anschließende Komprimieren mit CABAC bedeutet, dass höhere Bittiefenkoeffizienten nicht mehr Platz benötigen.
(Übrigens profitiert h.265 weniger von 10-Bit-Codierungen für 8-Bit-Video, da es bereits eine höhere Präzision für Bewegungsvektoren aufweist. Wenn die Verwendung von 10-Bit x265 für 8-Bit-Videoeingänge einen Vorteil bietet, ist sie kleiner als mit x264. Es ist also weniger wahrscheinlich, dass sich die Geschwindigkeitsstrafe lohnt.)
So beantworten Sie Ihre eigentliche Frage:
edit: doom9 ist jetzt wieder online, also räume ich den link auf. Sehen Sie sich an, wer was gesagt hat.
http://forum.doom9.org/showthread.php?p=1135399#post1135399
google speichert nur die blöde druckversion zwischen, die das zitat nicht richtig anzeigt. Ich bin nicht ganz sicher, welche Teile dieser Nachrichten Zitate sind und welche der Person selbst zugeschrieben werden.
Stark unregelmäßige Verzweigungsmuster (Sprungmodi) und Bit-Manipulation (Quantisierung / Entropie-Codierung) passen nicht zu aktuellen GPUs. IMO ist die einzige wirklich gute Anwendung im Moment die vollständige Suche nach ME-Algorithmen, obwohl die beschleunigte vollständige Suche immer noch langsam ist, selbst wenn sie schneller als die CPU ist.
- MfA
Eigentlich kann im Grunde alles vernünftigerweise auf der GPU erledigt werden, mit Ausnahme von CABAC (was getan werden könnte, es könnte einfach nicht parallelisiert werden).
x264 CUDA implementiert zunächst einen Fullpel- und einen Subpel-ME-Algorithmus. später könnten wir so etwas wie RDO mit einer Bit-Cost-Approximation anstelle von CABAC machen.
Weil es alles mit Gleitkommazahlen mit einer Genauigkeit zu tun hat
- MfA
Falsch, CUDA unterstützt ganzzahlige Mathematik.
- Dunkler Shikari
Dark Shikari ist der x264-Betreuer und Entwickler der meisten Funktionen seit etwa 2007.
AFAIK, dieses CUDA-Projekt ist nicht aufgegangen. Es gibt Unterstützung für die Verwendung von OpenCL, um einige Arbeiten aus dem Lookahead-Thread zu entfernen (schnelle I / P / B-Entscheidung, keine hochqualitative endgültige Kodierung des Frames).
Ich verstehe, dass der Suchraum für die Videokodierung so groß ist, dass intelligente Heuristiken für die vorzeitige Beendigung von Suchpfaden auf CPUs die Brute-Force-GPUs übertreffen, zumindest für eine qualitativ hochwertige Kodierung. Es ist nur im Vergleich zu dem, -preset ultrafast
wo Sie vernünftigerweise HW-Codierung über x264 wählen könnten, esp. Wenn Sie eine langsame CPU haben (wie ein Laptop mit Dual Core und ohne Hyperthreading). Auf einer schnellen CPU (i7 Quad Core mit Hyperthreading) wird x264 superfast
wahrscheinlich genauso schnell sein und besser aussehen (bei gleicher Bitrate).
Wenn Sie eine Codierung erstellen, bei der es auf Ratenverzerrung (Qualität pro Dateigröße) ankommt, sollten Sie x264 -preset medium
oder langsamer verwenden. Wenn Sie etwas archivieren, sparen Sie durch etwas mehr CPU-Zeit Byte, solange Sie diese Datei behalten.
Nebenbei bemerkt, wenn Sie jemals Nachrichten von Toten in einem Videoforum sehen, wird dies nicht hilfreich sein. Er hat sich bei den meisten Dingen geirrt, über die er in jedem Thread gesprochen hat, den ich je gesehen habe. Seine Posts tauchten in ein paar Threads auf, die ich über die x264-GPU-Codierung gegoogelt habe. Anscheinend versteht er nicht, warum es nicht einfach ist, und hat einige Male geschrieben, um den x264-Entwicklern zu sagen, warum sie dumm sind ...
-c:v libx264 -preset slower
(was nicht so langsam ist, wie in Echtzeit für 1920 x 1080p24 auf einem Skylake i7-6700k.)ffmpeg
mit-vcodec h264_qsv
auf meinem alten Intel-Notebook mit einem Intel HD Grpahics 4000 machte das Rendern viel schneller!Um ein wenig näher auf das einzugehen, was Peter sagt, hilft es im Allgemeinen, mehrere Prozessoren zu verwenden, wenn Sie mehrere unabhängige Aufgaben haben, die alle erledigt werden müssen, aber keine Abhängigkeiten voneinander haben, oder eine Aufgabe, bei der Sie dasselbe tun Mathe auf riesige Datenmengen.
Wenn Sie jedoch die Ausgabe von Berechnung A als Eingabe von Berechnung B und die Ausgabe von Berechnung B als Eingabe von Berechnung C benötigen, können Sie dies nicht beschleunigen, indem Sie für jede Aufgabe einen anderen Kern bearbeiten ( A, B oder C) weil man nicht anfangen kann, bis der andere fertig ist.
Selbst in dem obigen Fall können Sie es möglicherweise auf eine andere Weise parallelisieren. Wenn Sie Ihre Eingabedaten in Blöcke aufteilen können, haben Sie möglicherweise einen Kern, der A, dann B, dann C mit einem Datenblock bearbeitet, während ein anderer Kern A, dann B und dann C mit einem anderen Datenblock bearbeitet .
Es gibt auch andere Überlegungen. Vielleicht finden Sie eine Möglichkeit, die Berechnungen zu parallelisieren, aber das Lesen der Daten von der Festplatte oder über das Netzwerk oder das Senden an die GPU dauert länger als das Ausführen der Berechnungen. In diesem Fall ist eine Parallelisierung nicht sinnvoll, da das Speichern der Daten länger dauert als die Zeit, die Sie durch die parallele Berechnung sparen.
Mit anderen Worten, es ist ebenso eine Kunst wie eine Wissenschaft.
quelle