• Hallo allerseits,

    nach sehr vielen Jahren habe ich mich entschlossen von VfW-Xvid auf CLI-x264 umzusteigen - um etwas Platz sparen zu können.
    (An meinem ausländischen Urlaubsort konnte ich in Ruhe einige Tests durchführen.)
    Hierbei stellte ich fest, dass das x264-encodete Video an einigen Stellen etwas aufgehellt wurde - besonders im Bereich der Gesichter zu erkennen.

    Anbei habe ich die Screenshots hochgeladen.
    Kurz zu den Einstellungen:

    1. Bild: avs
    roh

    2. Bild: x264 r1732
    --ref 5 --b-adapt 2 --rc-lookahead 50 --me umh --subme 8 --tune film --crf 20 --sar %sar% --output "E:\filme\%ifile%\%ifile%_.mkv" "E:\filme\%ifile%\%ifile%.avs"

    3. Bild: Xvid 1.2.2
    Quantiz.type MPEG; consec.BVOPs 2; Quant.ratio 1.50; Quant.offset 1.00; MotionSearchPrec. 6-UltraHigh; VHQmode 1-ModeDecision; TargetQuant. 2.00

    avis.PNG
    x264.PNG
    Xvid.PNG


    Meine Fragen:
    1. Woran liegt es, dass das x264 das Bild an manchen Stellen aufhellt - wie kann ich es unterdrücken?
    2. Kann am CL-Code etwas verbessert werden, um annähernd die Einstellungen von Xvid zu erreichen?

    Vielen Dank jetzt schon
    mfg elestrodix

    cu

  • Vielen Dank für die Antwort.
    Farbräume? Da wäre ich nie drauf gekommen.
    Habe die *.264 mittels DirectShowSource geladen und es ist alles bestens (war also ausschließlich eine Decoder Sache).

    Großes Danke!

    Gruß
    elestrodix

    cu

  • :eek: DirectShowSource?! -- :hm: Mist.

    AviSynth hat doch geeignete Korrekturmaßnahmen. Zum Beispiel Decoder, die über Datenaustausch mit ColorMatrix zusammenarbeiten {MPEG2Source(info=3).ColorMatrix(hints=true)}.

    Oder manuell korrigieren {ColorMatrix(mode="...") in AviSynth oder --colormatrix in der x264-CLI}.

  • Nach meinem jetzigen Kenntnisstand ist das encodete Material fehlerfrei. Richtig?
    Ich müsste nur noch wissen, ob Soft- und insb. Hardwareplayer (Xtreamer) das Xvid- und x264-File farblich unterschiedlich darstellen.
    Mit --colormatrix in der x264-CLI konnte ich keine Unterschiede feststellen.

    cu

  • Ich habe den Fehler noch nicht verstanden. Das avs scheint doch OK zu sein, also wird x264 mit den richtigen Daten "gefüttert". Wie/wo hat sich der Fehler nun eingeschlichen?

    Gruß

    akapuma

    Wer weiß, wovon er redet, kann es sich leisten, sich verständlich auszudrücken.
    Besucht auch meine Homepage: http://akapuma.info

  • Möglicherweise, dass der x264-Encoder das eine YUV-Farbmodell vermutet, der Decoder für den AVC-Stream aber das andere zur Konvertierung zu RGB anwendet.

    ColorMatrix kann diesen Irrtum vorkompensieren, indem die Umrechnung zwischen ITU-R BT.601 und .709 im YUV-Farbraum bereits vor der Encodierung vorgenommen wird.
    __

    Aber ich habe noch eine ganz andere Sache, die ich davon unabhängig bemerkt habe: Ich verwende meist den ffdshow (ffmpeg-mt) als Decoder. Hier musste ich feststellen, dass unabhängig davon, ob ich x264 mit oder ohne Parameter für vollen Umfang aufrufe, ob ich in ffdshow bei der Decodierung PC-Scale erzwinge oder Automatik erlaube ... ich kriege in MPC-HC mit VMR9 kein tiefes Schwarz hin. Besonders auffällig ist das, wenn mein Monitor bzw. die Desktop-Grafik eine hohe Gammakurve hat.

    Bemerkt habe ich das bei meinen Tests mit den Blender-Render-Movies per ImageSource aus PNGs. Ich glaube, das AviSynth-Skript liefert da korrekt vollen Umfang, und auch das per DG*Dec wieder eingelesene Video hat tiefe Schwärze. Da muss ich aber noch mal eine richtige Testreihe machen...

    :grübeln:

  • Schön, das man mit avisynth gegen steuern kann.... Aber wie mach ich das unter Linux?

    Mit Hybrid hat man endlich mal eine gute Lösung, um alles unter Linux machen zu können, aber jetzt schlagen wohl wieder die fehlenden Avisynth-Filter ins Gewischt...*seufz*

    Der Weg zur Dunklen Seite... Schneller er ist, verführerischer, leichter.

  • So, hier mal meine kleine Testreihe:

    Code
    BlankClip(1000, 640, 360, "YV12", 25)

    zu MPEG4-AVC via x264 rev. 1724, zu Xvid via VirtualDubMod und Xvid 1.3, zu MJPEG via VirtualDubMod und ffdshow-VfW

    abgespielt mit MPC-HC 1.4.2505.0

    • *.avs in VirtualDubMod, Screenshot als PNG: PC-Scale.
    • *.mp4 in MPC-HC via ffdshow: Egal welcher Renderer, egal ob Level-Korrektur in ffdshow, egal ob Ausgabe mit Automatik oder erzwungener Umwandlung zu PC-Scale -- immer TV-Scale
    • *.264 via DGAVCDec und AviSynth in VirtualDubMod: PC-Scale
    • *.xvid.avi: In VirtualDubMod per Xvid decodiert = PC-Scale; in MPC-HC via ffdshow = TV-Scale (wenn Level-Korrektur im Post-Processing aktiviert: graduell von TV-Scale nach PC-Scale)
    • *.mjpg.avi: In VirtualDubMod per ffdshow-VfW decodiert = TV-Scale; in MPC-HC via ffdshow = TV-Scale (wenn Level-Korrektur im Post-Processing aktiviert: graduell von TV-Scale nach PC-Scale)

    Ich glaube, das muss mal im doom9-Forum ausdiskutiert werden.

  • Neiiin! Bitte nicht schon wieder dieses Thema ... :eek: (<- soll ein "kriegt-graue-Haare" Emoticon sein)

    1.) Das Problem in der Eröffnungspost ist (anscheinend) das YUV-Farbraummodell (601 vs. 709), aber *nicht* TV-Levels vs. PC-Levels. PUNKT.

    2.) LigH, es ist nicht vollständig klar was Du da getestet hast. Das "Problem" betrifft ja die YUV->RGB Wandlung. Hattest Du ffdshow auch so eingerichtet, dass es RGB ausgibt? Weil, wenn nicht, dann hat ffdshow YV12 sowohl am Eingang als auch am Ausgang ... somit hätte ffdshow auch keinen Farbraum zu konvertieren, und der Job läge beim nachfolgenden Renderer.

    2a) Dein generiertes Eingangsmaterial liegt in TV-Scale vor. (Inherente Definition von Avisynth.)

    2b) Wenn der Video-Decoder zu YUV dekodiert, dann macht VirtualDub die RGB-Wandlung sowieso immer 601/TV-Scale. Oder nicht?

    3.) Wenn man über Vdub/Vfw zu Xvid kodiert, dann enthält der Stream keine Informationen über den Farbraum. Der Decoder bzw. Renderer muss daher raten ... und bei Auflösungen von Standard-Definition (oder kleiner) ist im Regelfall von Rec.601 / TV-Scale auszugehen.


    Wenn ihr das nochmal durchkauen wollt - nur zu, viel Spaß. Aber erst mal klarmachen, über was genau eigentlich diskutiert wird ...

  • Das heißt also, wenn *ich* schwarze Ausgabe haben will, muss *ich meinen* ffdshow so einstellen, dass er in RGB konvertiert, weil ich das mit YUV-Ausgabe nie hinkriegen werde? Meinem ffdshow erlaube ich übrigens in der "Ausgabe" nur gepackte Formate (RGB##, YUY2 etc., NV12), weil planare Ausgabe je nach Grafiktreiber-Version manchmal Unfug produziert hat.

    Interessant finde ich dann eben bloß, dass bei aktivierter Level-Korrektur im Post-Processing (Nachbearbeitung - Grenzwertkorrektur) das Video während des ersten Abspielens (nach dem Start des Players) anfängt abzudunkeln, und beim zweiten Abspielen (ohne den Player zu beenden - also nur Stop/Play) tatsächlich tiefschwarz beginnt. Darüber können wir dann gern mal diskutieren.

  • Wenn ffdshow die Anpassung machen soll, dann muss man ihn (es? sie?) zur RGB-Ausgabe zwingen. Wenn irgendein YUV-Farbraum erlaubt ist, dann wird bei YV12-Input auch ein YUV-Farbraum von ffdshow ausgegeben. Und dann ist die ganze Farbraum-Konvertierungsgeschichte in ffdshow völlig irrelevant, egal was man einstellt. Eben weil keine YUV->RGB Wandlung stattfindet.

    Die Level-Korrektur im PostProcessing-Register ist wieder ne andere Geschichte - das ist keine Aktion die sich auf "Standard-Farbräume" bezieht, sondern vielmehr sowas wie ein dynamischer Auto-Kontrast. Wenn der Input in 16-235 TV-Levels vorliegt (z.B. bei BlankClip()...), dann sieht der Prozessor eben, dass da noch Luft in den Daten ist, um eine Spreizung vorzunehmen.

  • Etwas weitergedacht, kommen wir der Lösung näher:

    Auch wenn das Video mit TV-Scale gespeichert war, und das so bei YUV-Ausgabe auch weitergegeben wird, muss es doch möglich sein zu bestimmen: Ich habe einen PC-Monitor angeschlossen, also soll dessen RGB-Darstellung bitte vollen Umfang haben. Wenn der Decoder nicht dafür sorgt, weil er YUV an die Grafikkarte ausgibt, muss eben die Grafikkarte dafür sorgen.

    Groucho2004 hat mich auf eine interessante Spur gestoßen:

    NVIDIA Systemsteuerung – Video-Farbeinstellung ändern – 2. Mit den NVIDIA-Einstellungen – Erweitert – Dynamikbereich: Begrenzt (16-235) => Voll (0-255)

    Standardmäßig ist das wohl für eine eventuelle TV-Ausgabe erst mal "begrenzt".

Jetzt mitmachen!

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