Helle und dunkle Farben abgeschnitten...

  • Ich haber hier eine Animation erstellt, die ich gerne in Videoformat konvertieren will.
    Soweit so gut - geht auch alles...

    Zum Encoden nutze ich FFdshow, XVid, oder Freemake Video Converter (FFmpeg) oder XMedie Recode (FFmpeg)
    Ausgabe als Xvid, H264 oder WMV

    Nur ich habe rein weiße Farbe als Hintergrund.
    Leider erscheint diese Farbe im Video nicht weiß
    sondern grau ~ RGB 238,238,238
    (egal welches Programm oder egal welches Format ich verwende),

    Ich habe in FFdshow gewisse Einstellungen entdeckt, wo steht, dass man Werte 0-15 und 239-255 tunen kann...
    Scheinbar werden diese Werte einfach abgeschnitten...

    Gibt es irgendein Programm auf dieser Welt, der vernünftig konvertieren kann
    Es muß unbedingt ein gängiger Codec sein (Xvid, H264, WMV).

  • Zitat

    Leider erscheint diese Farbe im Video nicht weiß
    sondern grau ~ RGB 238,238,238

    Korrekt wäre 235,235,235
    und "Schwarz" 16,16,16
    http://www.youtube.com/watch?v=73RcDl15Lo4

    und hier noch was.
    http://www.dma.ufg.ac.at/app/link/Grund…ion/module/3790

    Stichwort "Clipping"
    Sieh hier
    http://www.slashcam.de/artikel/Grundl…nterschied.html
    ist zwar schon etwas älter......aber m.M.nach immer noch aktuell.

    Im Prinzip überprüft man das Videobild nicht an einem PC Moni sondern an einem dafür geeigneten Kontr.Moni.

    Datenrettungen Normwandlungen Restaurierungen Digitalisierungen

  • Zitat

    Gibt es irgendein Programm auf dieser Welt, der vernünftig konvertieren kann


    Ja

    Scheint ein Problem mit TV (16-235) vs. PC (0-255) scale zu sein,...
    -> Dein Inputmaterial wird vermutlich als TV Scale eingelesen obwohl es PC scale ist,... ohne aber zu wissen was für ein Format Dein Input hat kann man nur schwer etwas empfehlen,..

  • Im Grunde ist es nicht falsch, Video im "TV-Umfang" zu speichern, solange es dann beim Abspielen am PC-Monitor im "PC-Umfang" dargestellt wird. Da eine effiziente Verarbeitung meist in einem YUV-Format stattfindet, weil auch die Abspeicherung als Xvid, H.264 oder WMV letztlich in einer YUV-Variante passiert, ist der TV-Umfang eigentlich normal. Vielleicht liegt es also nur an deinem Grafiktreiber, dass der während der Video-Darstellung in einem YUV-Format beim TV-Umfang bleibt, statt ihn auf den PC-Umfang zu erweitern.

  • Zitat


    Im Prinzip überprüft man das Videobild nicht an einem PC Moni sondern an einem dafür geeigneten Kontr.Moni.

    Es soll explizit für PC-Monitore sein
    Der Monitor ist kalibriert+profiliert


    Zitat

    Scheint ein Problem mit TV (16-235) vs. PC (0-255) scale zu sein,...
    -> Dein Inputmaterial wird vermutlich als TV Scale eingelesen obwohl es PC scale ist,... ohne aber zu wissen was für ein Format Dein Input hat kann man nur schwer etwas empfehlen,..

    Input sind normale Bilder im PNG-Format sRGB 24bit
    Aber die Idee zuerst nach YUV (per VirtualDub) zu konvertieren, muß ich mal testen...


    Zitat

    Vielleicht liegt es also nur an deinem Grafiktreiber, dass der während der Video-Darstellung in einem YUV-Format beim TV-Umfang bleibt, statt ihn auf den PC-Umfang zu erweitern.

    scheint der Fall zu sein... Muß man testen (ein anderer PC).


    Trotzdem... gibt es Möglichkeit gleich im Bereich 0-255 zu encoden?
    Ich merke schon einige Farbverfälschungen - liegt wohl an YUV

  • Zitat

    Trotzdem... gibt es Möglichkeit gleich im Bereich 0-255 zu encoden?


    Klar.
    1. Avisynth installieren.
    2. Avisynth Skript erstellen (Textdatei mit .avs Endung):

    Code
    ImageSource("D:\Elephants Dream RAW\PNGs\%05d.png", start=1, end=15691, fps=25, pixel_type="rgb32")
    ConvertToYv12() # falls der Encoder den man verwendet nicht RGB als Videoformat unterstützt

    siehe: http://avisynth.org/mediawiki/ImageSource
    (Pfad zu den Bildern und end=.. sollte angepasst werden)
    3. Avisynth Skript in Virtual Dub oder einem anderen Tool was Avisynth als Input unterstützt als Quelle laden
    4. Encoden

  • Da hast du aber das wichtigste vergessen: Die Standard-RGB/YUV-Matrix für ConvertToYV12() ist "Rec601", die reduziert zu TV-Scale.

    Und das ist eigentlich auch gut so (wie schon gesagt: Es ist eigentlich Aufgabe des Decoders oder des Renderers ~ Grafiktreibers, TV-Scale-YUV bei der Wiedergabe wieder zu PC-Scale-RGB umzuwandeln).

    Wer wirklich PC-Scale-YUV haben will, der müsste ConvertToYV12(matrix="PC.601") für SD oder ConvertToYV12(matrix="PC.709") für HD verwenden. Auch wenn das eigentlich falsch ist. Wenn du Pech hast, wird das Ergebnis immer noch falsch dargestellt (durch den falsch eingestellten Grafiktreiber immer noch auf 16-235 begrenzt, dafür aber mit abgesoffenen Hellgrau- und Dunkelgrau-Grenzen).

  • Ehrlich gesagt bin ich verwirrt...
    Ich denke der Standard für YUV ist Bereich 16-235 - so auch bei nVidia auf jedem PC voreingestellt

    Wenn ich nun Nvidia auf PC-Modus 0-255 umstelle, dann habe ich das Gefühl, als ob der Kontrast im Vergleich zum Original-PNG erhöht wurde...
    Ich vermute deswegen, dass bei der Konvertierung mit VirtualDub die Werte 0-255 einfach so verarbeitet werden, ohne den Dynamikumfang zu reduzieren - der Codec schneidet dann dunkle und helle Farben einfach ab.

    Im PC-Modus werden dann die Farben hochskaliert und ich habe den erhöhten Kontrast.
    Nutze ich den TV-Modus, so fehlen mir gänzlich weiße Farben, weil diese ja vorher geclippt wurden...

    Deswegen denke ich, dass nur eine korrekte Konvertierung RGB (0-255) ->YUV (16-235) vor dem Encoden notwendig ist...
    Oder liege ich da falsch...?

    Und da stelle ich mir die Frage warum das nicht automatisch gemacht wird, wenn ich RGB encodieren will?


    Gibt es eine Möglichkeit Overlay-Grafiken zu speichern, damit ich es mit Grauverlauf testen kann, ob das was geclippt oder skaliert ist?

  • Zitat

    Ich denke der Standard für YUV ist Bereich 16-235 - so auch bei nVidia auf jedem PC voreingestellt


    Nein, 16-235 wurde für den TV eingeführt, in der eigentlichen Definition sich ist YUV Farbraum nicht eingeschränkt und deshalb wie RGB für 0-255 gedacht.
    16-235 wird auch "Studio Swing" und 0-235 "Full Swing" genannt, soweit ich mich entsinne ist an dem ganzen Unsinn der MPEG Standard schuld,... :)

    Zitat

    Deswegen denke ich, dass nur eine korrekte Konvertierung RGB (0-255) ->YUV (16-235) vor dem Encoden notwendig ist...


    Nur wenn der Output den Bereich 16-235 haben soll, den er nicht haben muss. NVIDIA stellt 16-235 nur als Standard ein, weil die meisten Leute MPEG Material gucken, was klassischerweise i.d.R. TV scale ist, weil es für Fernseher erstellt wurde. :)

    Zitat

    Und da stelle ich mir die Frage warum das nicht automatisch gemacht wird, wenn ich RGB encodieren will?


    Weil es nicht zwangsläufig nötig ist, wenn man nicht in ein Format oder für ein Gerät Material erstellt, welches nur 16-235 darstellen kann.

    Zitat

    Gibt es eine Möglichkeit Overlay-Grafiken zu speichern, damit ich es mit Grauverlauf testen kann, ob das was geclippt oder skaliert ist?


    ImageSource + PNG sollte eigentlich gehen soweit ich mich entsinne,..

  • Hab Tests gemacht

    Nur damit gehts gut (0-255):
    -uncompressed RGB+YUV
    -Camstudio
    -Huffyuv RGB

    Verwunderlich, damits gings nicht (ffmpeg)
    -LJPG rgb32
    -mjpeg (clipping errors über 235)
    -ffv1 rgb 32

    alles andere mit yuv führt zu 16-235
    Nur mit nVidia-Änderung auf 0-255 gehts dann

    Hab Beispiel-Bilder+Video eingefügt

  • Zitat

    wenn man x264 mit einer 10bit Genauigkeit verwendet auch eventuelle Banding Probleme verschwinden,..


    ...und Wiedergabeprobleme mit Nicht-PC-Playern kommen.

  • Zitat

    Gibt es eine Möglichkeit Overlay-Grafiken zu speichern, damit ich es mit Grauverlauf testen kann, ob das was geclippt oder skaliert ist?

    Viele Videobearb.Programme haben eine Vectorscop/Wellenformanzeige.
    Da wo die Mausspitze verweilt,wirds Dir dann im Detail angezeigt.

    http://666kb.com/i/c2q08gkbh6b30n7q8.jpg

    Datenrettungen Normwandlungen Restaurierungen Digitalisierungen

  • hab mit AviSynth PC.601 selbst hingekriegt - 100% PRO!!!

    bei nVidia 16-235 ist es nun perfekt
    bei nVidia 0-255 ist es geclippt

    wie erwartet - aber das reicht mir so

    wie ist es mit Grafikkarten von AMD?

  • Nvidia darf bei mir gar nix machen. Alle entsprechenden Treiberoptionen stehen auf "Nvidia: Finger weg von meinem Videomaterial!"

    Gerade wenn man sowieso ffdshow installiert hat, gibt es wenig Sinn, wenn die Videotreiber noch *zusätzlich* irgendwie hineinpfuschen. Die Sache mit dem Brei und mit den vielen Köchen.

  • Ja, wie schon gesagt...

    Der Nvidia-Treiber sollte nur dann auf "16-235" stehen, wenn das Video auf einem Fernseher angezeigt werden soll.

    Jede Grafikkarte, die auch TV-Out kann (via S-Video oder HDMI), wird wohl mit dieser Einstellung als Standard im Treiber bedacht, um zu verhindern, dass eine eventuell möglicherweise bevorzugte TV-Ausgabe von Videos den Fernsehbildschirm übersteuert.

    Wer aber das Video nicht auf einem Fernseher ausgeben will, sondern ausschließlich auf einem PC-Monitor, der muss eben den Grafiktreiber auf "0-255" einstellen.

    Das Erstellen von Full-Swing-Video war also eigentlich ein Fehler.

Jetzt mitmachen!

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