CRF anhand Sourcematerial ausrechnen

  • Hallo,

    ich würde gerne MP4 ASP Dateien (xvid, DivX6 etc) automatisiert nach mpeg4-avc (x264) umcodieren.

    Ich kann automatisch den verwendeten Codec, die durchschnittliche Bitrate und Dateigröße (eben alles, was mediainfo.dll zu bieten hat) von dem Quellmaterial ermitteln.

    Im Anschluss würde ich gerne einen CRF - Wert ausrechnen, der der Qualität vom Sourcematerial in etwa entspricht.
    Ich weiß, dass dies von vielen Faktoren des Sourcematerials abhängt (meistens HD-TV Aufzeichnungen) aber kann man da irgendwie einen ungefähren Wert ausrechnen?

    Z.B.
    Falls DivX6, dann CRF = Bitrate / 40

    Ich frage deshalb, weil wenn ich den crf-Wert zu klein nehme, dann ist die Datei am Ende womöglich noch größer als das Original, und das wäre nicht Zielführend.


    viele Grüße,
    B

  • Das macht irgendwie keinen Sinn. CRF sollte in bei einem festen Wert in etwa immer die gleiche Qualität abliefern, d.h. bei einem detail- und rauscharmen Quelle, wird die Bitrate niedrig, bei vielen Details und/oder Rauschen wird die Bitrate hoch ausfallen.

    Von daher würde ich eher einen festen CRF-Wert nehmen. Alternativ nimm einfach die Xvid-Bitrate und zieh davon je nach eigenem Gefühl 20-30% ab und nutze das Ergebnis für ein 2pass x264 Encoding.

  • Hallo,

    erstmal vielen Dank für die Antwort - falls es nicht anders geht, dann werde ich es über die reduzierte Bitrate machen.

    Vorteil bei crf ist ja, dass dort keine Bitraten gesetzt werden, die genau eingehalten werden müssen, sondern halt Qualitätswerte.

    Ich dachte man könne vielleicht anhand der Quantizer des Sources herausfinden, was in etwa äquivalent ist.

    Auf diese Idee kam ich, da ich iwo im Netz folgendes gefudnen habe:

    QPavc = 6*log2(QPasp) + 12
    also z.B. ASP QP=2 entspricht AVC QP = 18.

    Dafür müsste ich den QP-Wert beim Source herausfinden, und dann den AVC-QP Wert ausrechnen.
    Von diesem AVC QP irgendwie auf einen äquivalenten CRF-Wert zu kommen wäre halt nett. Oder ist das bereits der CRF-Wert, den ich suche?

    Grüße,
    B

  • Das CRF-Verfahren bildet bereits (im Unterschied zu festen Quantisierungsfaktoren) ein Verhältnis zwischen (mehr oder weniger) der "Qualität" des Originals und der "Qualität" der Kopie. Mit dem Festlegen eines CRF-Wertes entscheidest du dich, wie viel schlechter als das Original die Kopie aussehen darf.

    Wenn also das Original eher weich, detailarm und ruhig ist, sich also leicht komprimieren läßt, wird bereits eine relativ grobe Quantisierung völlig ausreichen, eine immer noch sehr ähnliche Kopie zu erzeugen. Und das passt der Encoder auch noch einzeln für jede Szene optimal an. Eine "notwendige Bitrate" für 2-pass könntest du nie abschätzen. Und ein konstanter Quantisierungsfaktor könnte in der einen Szene zu grob, in der anderen zu fein sein.

  • Zitat

    Ich dachte man könne vielleicht anhand der Quantizer des Sources herausfinden, was in etwa äquivalent ist.


    Das ist nur seher eingegrenzt Möglich.
    1. ist eine Ähnlichkeit von z.B. Quantizer 18 zu CRF 18 heutzutage mit AuoVAQ und demnächst MotionBlockTrees nicht mehr wirklich gegeben. -> selbst wenn man den Quantizer des Source Materials in den des Zielmaterials grob umrechnen kann liefert dies noch keinen CRF Wert.
    2. ist i.d.R. ein Unterschied zwischen den Quantizern des Input und des Zielmaterials (MPEG-1/2 Quantizer, MPEG-4 ASP Quantizer, MPEG-4 AVC Quantizer und die oben genannte Formel ist nur begrenzt richtig und allein für MPEG-4 ASP -> MPEG-4 AVC) und meist sind solche Übertragungen nur bedingt akkurat.
    3. Selbst wenn man einen Wert hätte der einem zum durchschnittlichen Quantizer des Inputs einen CRF Wert errechnen könnte der qualitativ (PSNR/SSIM) vergleichbare Ergebnisse liefert wäre es trotzdem unsinnig mit diesem Quantizer das Material zu komprimieren, da sich für den jetzigen Durchlauf das Quellmaterial ein anderes ist. Hab ich z.B. eine Originalquelle mit Quantizer X umgewandelt, so würde beim Reencoden das Material entpackt und wieder neu gepackt, da sich aber die Menge der vorhandenen 'Details' durch das erste komprimieren verändert hat ist die vorher gewählte Kompressionsstärke vielleicht nicht mehr sinnig. Hätte man z.B. das Material stark komprimiert und würde es jetzt wieder stark komprimieren würden potenziell enorm viele Details verloren gehen.
    -> der crf Wert gibt wie LigH anmerkte nur ein Verhältnis zwischen (mehr oder weniger) der "Qualität" des Originals und der "Qualität" der Kopie, d.h. er sollte relativ unabhängig vom Material sein, sondern sich eher darauf beziehen wie viele neue Verluste man beim erneuten Reencoden in Kauf nimmt.
    (Nebenbei würde ich i.d.R. immer dazu raten das echte Original und nicht MPEG-4 ASP als Quelle zu nehmen.)

    Cu Selur

  • Hallo und

    vielen Dank für die wirklich sehr aufschlussreichen Erläuterungen.
    Ich hatte da wohl etwas in die falsche Richtung (bzw. zu einfach) gedacht.
    Nochmals meinen Aufrichtigen Dank und

    viele Grüße,
    B

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!