Videos, Filme und Streaming | Hardware,- oder Softwareencoding mit h.264/h.265 *Update*

    • Offizieller Beitrag

    Videos, Filme und Streaming | Hardware,- oder Softwareencoding

    Vorwort

    Jeder der seine Filme schon einmal digitalisiert hat oder in der Vergangenheit mit DivX ganze DVDs in bequeme Grössen gerippt hat, kennt das Thema mit den Bitraten, Frames und b-Frames etc.
    Prinzipiell lässt sich zwischen den Homefilmen und den Blurays (auch die UHDBD) unterscheiden. Bei Streaming kommen nochmal andere Punkte auf den Plan.

    Für erstgenannte wollen wir eigentlich immer die maximale Qualität aus dem Material ziehen - und das am liebsten zu recht humanen Encodierzeiten. Aber wieso das? Nun, die TV Grössen nehmen zu - die Pixelmenge auch, aber nicht im gleichen Verhältnis. Grosse Bildflächen lassen schlechte Schärfe oder griesslige Bildqualität sofort aufzeigen. Auch wenn einige Filme mit sogenanntem Grain aufgenommen wurden um eine gewissen Authentizität aufzubauen - kann man encodierbedingte Qualitätseinbusen sofort erkennen. Da wären z.b. Pixelmatsch (Vollfarbflächen), Quatratbildung (Blockbildung), Verwaschene Übergänge etc.


    Nun wäre es ja ein einfaches den Regler in Handbrake/DVDFab einfach auf Maximal zu stellen und alles wird gut. Das ist leider zu einfach. Hier passiert es das die Datei grösser wird als das eigentliche Original. :D

    Denn wie alles im Computerbereich hat jeder Codec ein gewissen mindest "Wirkungsgrad" sowie einen maximalen Grad an Effizienz bei & bis Bitrate X.

    Warum kann das passieren und wie hängt das zusammen?
    Ihr seit mit der Vorgang einer Datei Komprimierung vertraut? Wie aus einem RAW oder HEIC ein Bild im Format "jpeg" wird? Grob gesagt ist es beim Codec von Filmen in etwa ähnlich.


    >> Die Beste Qualität ist das softwareseitige Encodieren <<

    Codecs

    Wir haben in den aktuellen Zeiten zwischen h.264/h.265 auch noch VP und AV1 zur Codec Auswahl. Am verbreitetsten sind die ersten Beiden mit denen wir uns hier dann auch beschäftigen. Während also h.265 der offizielle Nachfolger von h.264 ist und vor allem bei der Effizienz in niedrigen Bitratenbereich zugewonnen hat und Bewegungsmuster in x Richtungen erkennt, glänzt h.264 bei hohen Bitraten mit mehr Schärfe aber auch grösseren Dateien. Warum das so ist, wann wir welchen Codec am Besten auswählen bzw. wie das so passiert schauen wir uns in einem Beispiel genau an.


    h.264

    • Pixelidentifizierung/Ratifizierung gegenüber Mpeg2 (DVD) verdoppelt
    • Rasterung der einzelnen Bildblöcke in eine Pixelfläche bis zu 16x16
    • Erkennung bis zu 9 Bewegungsrichtungen innerhalb der i-Frame Abfolge
    • 4k Auflösung mit 60 FPS und 10 Bit

    h.265

    • Pixelindetifizierung erneut verdoppelt
    • Rasterung der einzelnen Bildblöcke in einer Pixelfläche bis zu 64x64
    • Erkennung bis zu 35 Bewegungsrichtungen innerhalb der i-Frame Abfolge
    • 8k Auflösung mit 120 FPS und 12 Bit


    Mpeg Historie und maximal erzielbare Einsparung der Dateigrössen.


    Codec Vergleich Der h.264 Codec gegen h.265 HEVC im Vergleich.


    Wie man sieht liegt h.265 im Schnitt bei knapp 50% der Dateigrösse gegenüber h.264. Allerdings nur wenn man die Settings und Einstellungen des jeweiligen Codec eben auch kennt und richtig setzt! In meinen Tests konnte ich Schärfenunterschiede zu Gunsten von h.264 erkennen. Was die Details allerdings angeht, glänzt h.265 auf. Vor allem im niedrigen Bitratenbereich oder bei schnellen/vielen Bewegungen im Bild. Dies natürlich im mittleren Bereich der Komprimierung betrachtet. Am oberen Ende der Skala liegt h.264 vorne.


    >> h.265 glänzt mit mehr Details bei sehr kleinen Datenraten, ist folglich für Low Profile Videos und Streaming geeignet <<


    Wie muss man sich das vorstellen, mit der Rasterung und der Pixelfläche sowie deren darauf basierender Bewegungserkennung?


    Vergleich h.264 AVC gegen h.265 HEVC Der Vergleich der Rasterung und Erkennung von h.264 AVC gegen h.265 HEVC.


    In diesem Schaubild wird klar wieso bei niedrigen Bitraten h.265 kleinere Dateien produzieren kann.


    Die Bewegungserkennung setzt zwischen den I-Frames an. Sagen wir für den Codec ein wichtiges Referenzbild und der Analyse der darauffolgenden Bildern um zu erkennen ob und wie weit sich darin Bewegungen für ihn "entdecken" lassen. Damit er seinen Raster und die daraus resultierende Bitrate abschätzen kann. Die Intelligenz funktioniert hier nur innerhalb der Bildabfolge. Wenn das I-Frame also mitten in einer Bewegung sitzt wird Platz verschwendet.


    i-Frames und IDR Frames Die Abbildung im Beispiel: I-Frames und IDR Frames und deren Abfolge. In diesem Fall schätzt die Bewegung P4 die Herkunft von P2 ein und der Codec rastert die Bildfolge darauf basierend ein.


    >> Einfache "natürliche" Regel: Viel Bewegung - Bitrate wird heruntergesetzt. Wenig Bewegung und/oder Standbild - Bitrate wird so hoch wie möglich gesetzt <<


    Leider sieht es bei der Qualität etwas anders aus. Hier mal ein Beispiel anhand eines Films bei 1920x1080:


    h.265 - 4750kb/s | Totalgrösse: 5.29GB


    h.264 - 3655kb/s | Totalgrösse: 3.96GB


    Deutlich bessere Schärfe bei h.264 bei niedrigerer Bitrate in dieser Szene gegenüber dem h.265 Ergebnis. Seltsam? Mitnichten - es liegt an der Erkennung des Codec in Kombination der Einstellungen beim encodieren des Films. Wenn wir bei beiden Codec die Bitrate um sagen wir weitere 30% VBR senken wird h.265 das Rennen gegenüber h.264 machen. Abgesehen von der daraus resultierenden, sehr bescheidenen Qualität, wird man beim h.265 mehr Restdetails im Bild wiederfinden, während h.264 dann schon ein deutlich matschiges Bild darstellt.


    Die Qualität ab einer Bitrate von 25 000 und höher ist bei beiden sehr gut. h.265 wird je nach Filmgenre eine wirklich kleinere Datei abliefern, da weniger (Informations) Overhead. Bei der Schärfe wird aber auch hier h.264 leicht die Nase vorne haben.


    Bevor wir den Schritt Richtung Zeitaufwand und den Unterschied zwischen Soft,- Hardwareencodierung machen, hier noch eine kleine Auflistung zu sehen als Richtwert. Sowie eine mögliche Empfehlung je nach Filmtyp und Art.


    Grundeinstellungen:

    {Platzhalter}


    Und hier eine Übersichtstabelle als Angabe/Richtwert beim encodieren von Filmmaterial, die Werte sind als Durchschnitt bzw. eher Minimum und Platzersparnis orientiert:


    h.264

    AuflösungBitrate
    480P720x4801800
    720P1280x7203500
    1080P1920x10807750
    2160P3840x216016500


    h.265

    AuflösungBitrate
    480P720x4801000
    720P1280x7202000
    1080P1920x10804000
    2160P3840x216010000


    Wichtig ist zu Wissen dass dies je nach Inhalt und Schnitt zu sehen ist. Wer einen Michael Bay Film umwandelt wird deutlich höhere Werte benötigen um eine gute Qualität zu erzielen. Warum? Weil die Kameraführung mit schnellen Bewegungen vollzogen wird und die Bildfolge teilweise in extrem kurzen Abschnitten erfolgt. Das macht es für den Codec und seinem Raster sehr schwierig denn wir Wissen ja nun bereits -> viel Bewegung hohe Kompression -> weniger Details evtl. matschiges Bild.


    >> Wer Filme in Archivqualität erzeugen möchte sollte deshalb bei beiden Codecs zwischen 23500 und 29900 liegen. <<

    Hard,- und Softwareencodierung

    Wie ist das nun mit der Hardwareencodierung. Das ist doch Klasse mittlerweile wieviel Zeit man spart!?


    Beim Thema Zeitersparnis ist hier ein ganz grosses Plus für die hardwarebasierende Videoumwandlung.

    Das Ganze hat aber natürlich auch eine gewisse Kehrseite es folgen natürlich wie immer Details. ;)


    Um der Frage nachzugehen Zeitersparnis vs. Ergebnis (Qualität) habe ich mich mit den Hardwareencodern von Nvidia, AMD, Intel und Apples T2 Chip beschäftigt. Als Programme standen auf allen beiden Plattformen (Linux, MacOS) Handbrake, DVDFab und Apple Compressor zur Seite.


    Auffälligkeit & Herausforderung: Was mir auf allen Plattformen auffiel ist, das nicht jede Software, alle oder jeden Hardwareencoder sieht bzw. benutzt. Es liegt am Softwareanbieter welche Plattform er supported. Dies war besonders gut auf der Mac Plattform sichtbar, die mir neben dem Intel QuickSync auch die AMD Grafikkarte aber auch Apples T2 für Hardwareencodierung anbietet. Während der Tests habe ich also angepasste Hardware Profile benutzt die die jeweilige Hardwareseite auch Tatsache benutzt um eine Vergleichbarkeit zu ermöglichen.


    Tools
    Handbrake (Nvidia und Intel)
    DVDFab (AMD und Nvidia)

    Compressor (AMD, Intel und Apple T2)


    Wertungen


    Bildqualität

    Platz 1 Apple T2
    Platz 2 Nvidia

    Platz 3 Intel QuickSync

    Platz 4 AMD


    Encodierzeit

    Platz 1 Nvidia
    Platz 2 Intel QuickSync

    Platz 3 Apple T2
    Platz 4 AMD

    Zwischenfazit

    Für Kurzfilme, Hobbyfilme, YouTube und Co. mehr als ausreichend. Und eine bequeme Funktion um schnelle Ergebnisse zu liefern. Apples T2 ist nur knapp Sieger (Bildqualität Gesamthaft), Nvidia (Quattro) glänzt mit der kürzesten Encodierzeit und der noch vergleichsweise besten Farbwiedergabe vom Testfeld. AMD bildet zusammen mit Intel das Schlusslicht.


    >> Wer an der besten/höchsten Qualität seines Ausgangsmaterials interessiert ist, sollte keine hardwarebasierende Encodierung verwenden. Stand 05/2021 <<


    Ergebnis im Detail


    Auffällig waren bei den Tests die unterschiedlichen Farbwiedergaben der einzelnen Testfilme. AMD und Intel encodierte Szenen zeigten farblosere Darstellung und deutlichen Verlust von Tiefe im Bild. Die Raster scheinen hier also neben der Pixelflächen auch die Farbinformationen deutlich einzudampfen (hoher Verlust von Details). Mit am Besten machen sich hier Nvidia und Apples T2 Chip. Ebenfalls auffällig im direkten Vergleich einer Szene zwischen allen Encodern ergibt sich kein homogenes Bild. Farbe, Tiefe und Schärfe sowie Flächenerkennung sind bei jeder Plattform fast ohne Gemeinsamkeit. Hierzu kommen dann noch die unterschiedlichen Abstufungen der internen unterstützten Codecs (h.264 / h.265).


    • Allgemein starker Detail und Farbverlust
    • Hoher Unterschied der Qualität zwischen den Engines (z.b. Farbe, Blockbildung, Matschige Bildflächen)
    • Dateigrösse nicht wirklich kleiner ggü. Softwareencodierung
    • HDR Umsetzung ist praktisch nicht sichtbar


    Durch die vielen langwierigen Tests (Teilweise bis zu 29h für 4k HDR in Softwareencodierung) habe ich etwas Zeit verbracht, mich über die Hardwarengines zu Informieren. Diese Informationen sind nur schwer ausfindig zu machen und werden bei dem Grossteil der Hersteller einfach nur Oberflächlich im Marketing Jargon eingebaut. D.h. ganz ohne grosse Details was wie welche Werte und Settings unterstützt werden.


    Fakt 1: Die Hardwareencodierung ist starr. Was zum Zeitpunkt der Entwicklung des Produkts für das Entwicklerteam einfloss (Stichwort: Wertung/Prio der Funktion für das Produkt) bleibt auch nach dem Ausliefern auf dem Stand - das Können der Engine kann nicht durch Firmware/Softwareupdates aufgewertet und verbessert werden.

    Fakt 2: Hardwareencodierung bedient sich zu 97 % den Standardsettings. Das heisst ggü. der Softwareencodierung können keine detaillierten Feinheiten eingestellt werden. Z.b. bframes, Graustufen, dynamische Bildfolge, 2-pass Encodierung et cetera. So manche Software bietet die Schalter auf der Oberfläche, was dort gesetzt ist wird praktisch nicht berücksichtigt.


    Anhand der Entdeckungen und der Tests kann ich nun mittlerweile auch Erklären wie es zu den Qualitätsunterschieden der einzelnen Engines kommt.
    Kurz gesagt: Weil die Encoder Engines von Nvidia sowie Apples T2 Chip "aufgewertet/auf einem neueren Stand" sind. Sie bieten feinere Raster und eine etwas umfangreichere Befehlsunterstützung. AMD ist hier trotz recht starker Grafikchips in der aktuellen Serie etwas ins Hintertreffen geraten. Das Intel QuickSync bleibt hier einfach mal ohne Kommentar.


    Ich werde später noch einige Bildbeispiele folgen lassen und den Artikel auch noch um weitere Punkte wie z.b Streaming und Container wie Matroska oder MP4 erweitern.

    Danke fürs Lesen. Hinterlasst doch gerne eure Kommentare. Wünsche/Anregungen oder auch eigene Erfahrungen!



    Quellen
    x265 Group x.264 Technik