x264 von Avidemux auf Speicherplatz optimieren

  • Hallo,


    ich möchte die Dateigröße der Videos meiner DigiCam (MJPEG, 848x480) mit minimalen Qualitätsverlusten maximal reduzieren und dabei Avidemux verwenden.
    Die Encodingzeit spielt dabei fast keine Rolle.


    An welchen Schrauben sollte man dazu in den Codeceinstellungen drehen, wenn man von den Standardeinstellungen mit ca. qrf26 ausgeht?
    Bei Avidemux r4576 waren mitunter 20-30% Speicherplatzeinsparung bei 3-4-facher Encodingzeit drin, soweit ich das in Erinnerung habe.

  • :grübeln: Du redest einerseits von "CRF 26", andererseits von "minimalen Qualitätsverlusten"? :nein: Ist mir unverständlich. "CRF 26" ist doch schon ein Ausdruck von "für's Web reicht's, aber bloß nicht vergrößern". Ich gehe mal davon aus, dass du den x264-Encoder in Avidemux verwenden willst; sicher gehört der zu den derzeit effizientesten praxistauglichen Video-Encodern, aber Wunder kann er auch nicht vollbringen.


    Schauen wir uns mal die technischen Größen an: Bei welcher Ziel-Bildfläche und Spieldauer wärst du etwa mit welcher Dateigröße zufrieden? Interessant wäre sicherlich eine vollständige MediaInfo-Analyse eines der Videos, die du schon mal zufriedenstellend erzeugt hast.

  • Naja, die DigiCam macht keine berühmten Videos. Es ist eine Panasonic DMC-FX37. Zu der Zeit, als ich die Codeceinstellungen ausprobiert habe, hatte ich eine Canon A650, deren Videos auch nicht viel besser waren.
    Wenn ich die Voreinstellungen mit crf20 nehme, dann werden die Videodateien zwar dreimal so groß, aber bei der Qualität sehe ich keinen, oder zumindest so gut wie keinen Unterschied.
    Ich beschäftige mich damit aber nicht regelmäßig, sodass ich nicht weiß, worauf ich achten muss.


    Vergrößert wird hier nix. D.h., es wird meistens auf dem PC-Monitor im Fenster 1:1 wiedergegeben. Vielleicht wird es auch mal auf einem Fernseher mit Full-HD-Fähigkeiten wiedergegeben und dann gestreckt, aber ich vermute, dass wenn man auf dem Monitor keinen Unterschied erkennt, dann ist das auf einem großen TV-Gerät auch kein großer Unterschied.



    Etwas merkwürdig finde ich, dass die Voreinstellungen in der Version 4576 crf26 ist. Für eine für mich akzeptable Qualität habe ich es dann auf crf23 und weitere "Optimierungen" im Codec gestellt.
    Bei Avidemux 2.6.1 ist crf20 voreingestellt. Hier muss ich crf27 nehmen, um etwa die gleiche Dateigröße zu erreichen. Da scheint sich etwas geändert zu haben.



    Es gibt mehrere Gründe, warum ich eine neuere Version von Avidemux verwenden möchte:
    1. Ich vermute, dass die Effektivität (Qualität/Dateigröße) von neuen Codecversionen besser ist
    2. im alten Avidemux gab es nur FAAC, welcher bei den meisten Videos am Anfang ein lautes Störgeräusch eingefügt hat und am Ende eines Videos Ton fehlte
    3. Der Muxer in der Version 4576 macht irgendwie Murks, sodass die Videos nicht auf allen Geräten/Playern abgespielt werden können




    Eine vollständige MediaInfo-analyse habe ich bisher noch nicht gemacht. Ich hoffe, es ist das Richtige.


  • Das ist schon die "vollständige" Analyse, die ich meinte (CLI: MediaInfo -f | GUI: Debug - Erweiterter Modus); recht verwirrend ist allerdings, dass hier mehrere Videostreams gemeldet werden, vielleicht liegt da die Ursache. Der MP4-Multiplexer ist wohl nicht empfehlenswert...

  • Zitat

    recht verwirrend ist allerdings, dass hier mehrere Videostreams gemeldet werden


    bin ich blind? ich sehe da nur einen Videostream mit ID 1 und einen Audiostream mit ID 2.


    Im 'Allgemeinen'-Bereich steht auch:

    Zitat

    Anzahl der Video-Streams : 1
    Anzahl der Audio-Streams : 1


    Wenn ich das so sehe, weiß ich wieder warum ich mir die MediaInfo Ausgabe immer nur auf Englisch angucke. Die deutsche Ausgabe ist irgendwie verwirrend. :)

  • Ich kann das gerne auch noch in Englisch liefern. Ich möchte nur nicht das Forum vollmüllen, weshalb ich das nur mache, wenn es ausdrücklich gewünscht wird.


    Kann man denn anhand der Analyse erkennen, was ich bei der neuen Version einstellen müsste, um eine vergleichbare Qualität zu erhalten?



    Habt ihr grundsätzlich ein paar Tipps, an welchen Rädchen man im Codec drehen könnte, um die Dateigröße bei gleichen Qualität zu reduzieren?
    Damals gab es afair 4 oder 5 Optionen, die sich mehr oder weniger so ausgewirkt haben.

  • Ich glaube, da wurden Teile des Protokolls mehrfach eingefügt.


    Die Kontainer-Information ist dreimal drin: Einmal von Zeile 1, und noch zweimal von Zeile 17 dieses Abschnittes (ab "Anzahl der Video-Streams").
    Die Video-Information ist zweimal drin: Einmal von Zeile 1, und noch einmal von Zeile 13 dieses Abschnittes (ab "ID").
    Die Audio-Information ist zweimal drin: Einmal von Zeile 1, und noch einmal von Zeile 13 dieses Abschnittes (ab "ID")
    __


    Zu den Rädchen:


    Praktisch kein "kleines Rädchen" ist dazu gedacht, die gesamte Datenrate so stark zu beeinflussen, dass dies Auswirkungen in der Größenordnung von CRF-Levelsprüngen haben soll. Wenn zusätzlich zu den heute bei x264 üblichen Basis-Parametern (Preset, Tuning, Geräte-Kompatibilität) noch viele Einzelparameter geändert werden, kann das nur bedeuten, dass das relativ ausgewogene Zusammenspiel nicht mehr gewährleistet ist und zwischen Rechenleistung und Qualitätserhalt kein sinnvoller Kompromiss mehr besteht, und eventuell sogar die Kompatibilität mit bestimmten Playern gefährdet wird.


    Warum es nun zwischen zwei Versionen von Avidemux (die unterschiedliche Revisionen der x264-Bibliothek benutzen) zu einer derart schlechten Entwicklung kommen solle, wie du sie berichtest, können vielleicht nur die Entwickler von Avidemux verstehen, die selber auch den Überblick darüber haben, was sich von Version zu Version im Einzelnen geändert hat. Es wäre schon zu erwarten, dass Standardwerte zu vergleichbaren Ergebnissen führen und neuere x264-Bibliotheken eher effizientere Encodierung ermöglichen. Vielleicht sind ja deine "Verschlimmbesserungen" der Optionen Schuld. Die müssten wir dann mal im Detail sehen, vielleicht waren die mal bei einer alten x264-Version nützlich und bringen eine aktuelle völlig aus dem Konzept...

  • Zitat

    Kann man denn anhand der Analyse erkennen, was ich bei der neuen Version einstellen müsste, um eine vergleichbare Qualität zu erhalten?


    Nein, es gibt keine Formel/Anleitung/.. welche x264 Einstellungen von 4 Jahren in neue Einstellungen umwandelt und mir fehlt auch schon ein Maß für Qualität, was "vergleichbare Qualität" zu einem sehr subjektiven Ziel macht.
    -> wenn Du ein Beispiel mit: Quelle, Encode mit deinen Settings mit der alten Version lieferst könnte man da subjektiv was zusammen basteln.


    ----
    Grob würden Deine Einstellungen auf:

    Code
    1. x264 --crf 23 --profile high --level 4.1 --min-keyint 25 --bframes 4 --b-pyramid none --b-adapt 2 --subme 6 --vbv-maxrate 62500 --vbv-bufsize 78125


    da es mittlerweile jedoch noch alle möglichen Lookaheads gibt und sich die Arbeitsweise von crf geändert hat wird das aber wohl nicht die gleichen Ergebnisse liefern wie Dein Aufruf.

  • Wenn es für das Erreichen des Ziele notwendig ist zwei Videos hochzuladen, mache ich das, aber ich vermute, dass das aufwendig wird.


    Wenn ich es richtig verstehe, dann geht ihr davon aus, dass man hauptsächlich nur mit dem crf-Level sinnvoll die Qualität und die Dateigröße beeinflussen kann.


    Ich habe inzwischen den Tipp aus diesem Forum hier gefunden, aufgrund dessen ich damals versucht habe, den Codec für meine Zwecke zu optimieren. Er stammt von LordMulder, der damals folgendes schrieb, wobei er sich natürlich auf die damals aktuelle Version von Avidemux bezog:


    "Standardmäßig verwendet x264 eher "konservative" Einstellungen. Es gibt eine ganze Reihe von Parametern mit denen man sich bessere Qualität (bei gleicher Datenrate) durch niedrigere Enkodiergeschwindigkeit erkaufen kann. Etwas "--me", "--subme", "--merage", "--ref", "--bframe", "--b-adapt" und "--trellis". Und es gibt Parameter, bei denen man einen "sinnvollen" Mittelwert finden muss, da hier weder "zu viel" noch "zu wenig" gute Ergebnisse liefert. Dazu zählt VAQ, der Deblocking Filter sowie Psy RDO und Psy Trellis."


    Mit diesem Ratschlag im Rücken habe ich dann rumprobiert und bin auf folgende Einstellungen gekommen (für Avidemux 4576):


    #######################
    var app = new Avidemux();


    //** Postproc **
    app.video.setPostProc(3,3,0);



    //** Für A80-Vids rausgenommen
    //** app.video.setFps1000(30000); **



    //** Filters **


    //** Video Codec conf **
    app.video.codec("X264","AQ=23","196 00 00 00 00 00 00 00 00 00 00 00 00 28 00 00 00 1e 00 00 00 3c 00 00 00 0a 00 00 00 33 00 00 00 04 00 00 00 03 00 00 00 28 00 00 00 19 00 00 00 fa 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 05 00 00 00 10 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 5a 00 00 00 01 00 00 00 64 00 00 00 ");


    //** Audio **
    app.audio.reset();
    app.audio.codec("aac",128,4,"80 00 00 00 ");
    app.audio.normalizeMode=1;
    app.audio.normalizeValue=90;
    app.audio.delay=0;
    app.audio.mixer("NONE");
    app.audio.resample=44100;
    app.setContainer("MP4");
    setSuccess(1);
    ######################


    Ich weiß leider nicht, wie ich die Einstellungen im Klartext exportieren kann. So erkennt man nur "AQ=23".

  • Zitat

    Wenn es für das Erreichen des Ziele notwendig ist zwei Videos hochzuladen, mache ich das, aber ich vermute, dass das aufwendig wird.


    wenn wären zwei kleine Samples ja genug,..


    Zitat

    Wenn ich es richtig verstehe, dann geht ihr davon aus, dass man hauptsächlich nur mit dem crf-Level sinnvoll die Qualität und die Dateigröße beeinflussen kann.


    Nein, was wir gesagt haben ist, dass der Effekt von crf sich durch das hinzufügen der neuen Optionen geändert hat.
    Man erinnere sich: crf ist kein festes Qualitätsmaß.


    Zitat

    Mit diesem Ratschlag im Rücken habe ich dann rumprobiert und bin auf folgende Einstellungen gekommen (für Avidemux 4576):


    die alten Einstellungen kann man doch eigentlich gut aus der MediaInfoausgabe erlesen.

  • die alten Einstellungen kann man doch eigentlich gut aus der MediaInfoausgabe erlesen.


    Jein; man bekommt da sämtliche Einzelparameter von x264 (auch die, welche derzeit Standardwerte haben), kann daraus aber schlecht rückwärts schlussfolgern, durch welche Einstellungen in den Avidemux-Dialog-Eingabefeldern das erreicht wurde.


    Insbesondere wenn man die Avidemux-Dialoge nicht kennt, weil man Avidemux so gut wie noch nie verwendet hat ... :redface:

  • Ja; das kann man entweder mit dem Wissen, was damals eingestellt wurde, oder völlig unbelastet nur mit den aktuellen Möglichkeiten.


    Und nach 4 Jahren Entwicklung fände auch ich es empfehlenswert, "alte Vorurteile" zu vergessen und mit dem heute üblichen und empfohlenen System neu zu beginnen: Erst mal möglichst wenige Parameter weg vom Standard ändern, nur mit CRF und Preset (und evtl. Tune, wenn das der Videoinhalt erfordert) ein paar Vergleiche anstellen.


    Vielleicht lohnt sich auch der Versuch, mit einem 2-pass-Encoding auf die von damals gewünschten Größen zu kommen, denn im zweiten Durchlauf wird auch nur ein CRF-Encoding durchgeführt, dessen Wert durch die Statistik aus dem ersten Durchlauf ermittelt wurde. Bei x264 an der Kommandozeile kann man den ablesen. Ob der bei Avidemux auch mal ersichtlich wird, weiß ich aber nicht.

  • Ich habe nun ein paar Versuche mit zwei Testvideos angestellt, aber mit Avidemux 2.6.1 kann ich bei ähnlicher Dateigröße nicht die Qualität erreichen, die ich mit der Version 4576 erreiche.


    Bei Avidemux 4576 hatte ich q23 eingestellt und sehe dann nur wenige Unterschiede zum Original.
    Wenn ich bei Avidemux 2.6.1 crf23 einstelle, ist die Qualität gleich, aber die Datei ist fast doppelt so groß, bei halber Encodingzeit.
    Stelle ich crf24 ein, wird die Qualität minimal schlechter als bei Version4576, während die Dateigröße kaum sinkt.



    Ich suche also nach dem Schalter, der mir auf Kosten der Encodierzeit die Dateigröße nahezu halbiert.



    Von den Parametern, die ich damals vermutlich verändert habe, habe ich noch mal alle mit der Version 2.6.1 probiert.
    Lediglich wenn ich "Maximum Consecutive B-Frames" von 2 auf 16 (max) setze, reduziert sich die Dateigröße um ca. 15%. Das ist aber noch fernab dessen, was die alte Version von Avidemux schafft.



    Kann es sein, dass neuere Versionen von X264 eher für HD-Material optimiert worden ist und bei meinen kleinen Videos nur schlechter funktionieren kann, als die alten X264-Versionen?

  • Ist das Material, das du da encodieren willst, eigentlich interlaced? Wenn ja, hast du auch wieder Interlaced-Encodierung (TFF oder BFF) aktiviert?


    Ansonsten müsste ich mal versuchen, verschiedene Versionen zu testen, aber noch bin ich auf Arbeit ...

  • Zitat

    Kann es sein, dass neuere Versionen von X264 eher für HD-Material optimiert worden ist und bei meinen kleinen Videos nur schlechter funktionieren kann, als die alten X264-Versionen?


    Halte ich für unwahrscheinlich, aber ich verwende crf 23 und höher eigentlich nicht.


    Zitat

    Wenn ich bei Avidemux 2.6.1 crf23 einstelle, ist die Qualität gleich, aber die Datei ist fast doppelt so groß, bei halber Encodingzeit.


    Größe*2 aber Encodingzeit/2 hört sich ungewöhnlich an.
    Was für Material reencodest Du? ("Videos meiner DigiCam (MJPEG, 848x480)" -> könntest Du mal eine Beispieldatei hochladen?)

  • Ich bin mir ziemlich sicher, dass die Cam keine interlaced Videos liefert. Bei Schwenks müsste man das im Editor sehen. Allerdings ist mir kein Tool bekannt, welches im Klartext anzeigt, ob ein Video interlaced ist oder nicht.


    Wo stellt man TFF oder BFF ein? In der Konfiguration von X264 habe ich nichts gefunden. Ich kenne das nur so, dass man Deinterlacing als Filter von Avidemux zusätzlich aktivieren kann. Das habe ich weder bei der Version 4576, noch bei 2.6.1 gemacht.





    Ein Testvideo kann ich ranschaffen. Wie groß/lang soll/muss es sein?


    Hier ist schon mal die Media-Info eines Videos:


  • Wie schaffst du es bloß immer, alles doppelt und dreifach einzufügen?! Muss ich erst mal säubern...


    Wie man in Avidemux den x264-Encoder auf Interlaced-Encodierung einstellt:
    [Configure] - Frame (Frame Encoding) [X] Interlaced: Bottom Field First / Top Field First / Fake Interlaced


    Aber ob da auch im Bild Interlacing (bzw. "Combing") vorhanden ist, sieht man am besten mit einem kurzen Videoschnipsel von einem horizontalen Schwenk.