Frameserver (Colorspace)

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Frameserver (Colorspace)

    Anzeige
    Hallo Leute,

    ich hab seit dem MeGUI Update ein Problem mit diesem Programm.. Jedes mal wenn ich vom Frameserver die .avi laden möchte, fragt er mich nun folgendes:

    Do you want to open this file with the One Click Encoder or the File Indexer.

    Beim Klick auf eins der beiden bekomme ich die Meldung

    No inderxer for this file found. Please try open it directly in the AVS Script Creator

    Das habe ich bisher noch nie gehabt, was mach ich falsch wenn ich das Video einfach nur encoden möchte wie bisher?

    /EDIT

    Das obere Thema habe ich nun durch herrunterladen der alten Version gelöst. Allerdings bekomme ich dort nun eine Meldung, welche vorher nicht da war X(
    Nachdem Klick auf Queue werde ich gefragt:

    "The colorspace of your clip is not in YV12...
    Do you want me to add ConvertToYV12() to the end of your script?

    Ich habe am Frameserver nichts umgestellt, Format YUY2 und keine Haken bei Write audio as PCM samples in signpost AVI oder Enable Network Frameserving.

    Kann ich es irgendwie erreichen dass er sofort in YV12 ausgibt oder gibt es durch das convertieren keinen Qualitätsverlust?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von ShaakLP ()

  • ShaakLP schrieb:

    Kann ich es irgendwie erreichen dass er sofort in YV12 ausgibt

    Nö.

    ShaakLP schrieb:

    oder gibt es durch das convertieren keinen Qualitätsverlust?

    Gibt es.
    __
    Machst du kein YV12, macht youtube es.
    __
    Lösung: Kein Frameserver benutzen und mit avisynth arbeiten (wäre performanter, und kannst direkt mit yv12 arbeiten)
    Lösung 2: Aus der NLE via lagarith codec in YV12 konfiguriert ausgeben und mit der Lagarith bei MeGUI weiter machen
    Lösung 3: Evtl bietet der Advanced Frameserver ja YV12 an. -> advancedfs.sourceforge.net/
    Aktuelle Projekte/Videos


  • RGB32, RGB24 und YUY2 nach YV12 sind keine Verluste in dem Sinne. Sondern es ändert sich ledeglich die Abtastrate für den Chromabereich.

    Ob nun gleich mit YV12 aufgenommen wird oder man in YUY2 aufnimmt ist irrelevant. Spätestens Youtube macht daraus YV12.

    Da der Debugmode Frameserver kein YV12 anbietet und AVISynth da auch nicht ohne weiteres was ändert fragt ledeglich MeGUI ob es in YV12 konvertiert werden soll. Schlussendlich wird es so oder so YV12. MeGUI wird erst versuchen es in den Skript zu schreiben. Sollte dies verneint werden konvertiert der Encoder es in YV12.

    YV24 - Abtastrate 4:4:4
    YUY2 - Abtastrate 4:2:2
    YV12 - Abtastrate 4:2:0

    Dabei bildet die erste Zahl den Lumawert (Helligkeit), die zwei anderen bilden den Chromawert (Farben).
    Somit bildet Luma alle Graufarben von Schwarz bis Weiß dar im Farbfeld 0,0,0 und lässt diese 100% akkurat aussehen in allen 3 Farbklassen.
    Chroma bildet den Rest der Farbinformationen dar die nicht im Farbfeld 0,0,0 sind. Hier wird komprimiert indem die Abtastraten zueinander ihr Verhältnis zu Luma ändern.
    Dabei lässt man den Umfang von Pixel Blöcken größer werden lassen indem der eine Pixel sich etwas ausbreiten kann.

    Sprich man hat ein Pixel und der verbreitet sich auf 4*4 oder 8*8 Pixel. Sprich man lässt ihn verlaufen zu einen nebenstehenden Pixel. Bildet ein gesamter Block die gleiche Farbe so ist dieser gleich dem Original.

    So zerläuft ledeglich bei YUY2 und YV12 die Farben etwas.

    RGB besitzt auch die Abtastrate 4:4:4 . Hier wird in Rot, Grün und Blau aufgespatet und nicht in Luma und Chroma. RGB bildet die Desktop und Spieledarstellung dar und ist 100% akkurat und gestochen Scharf.

    Auch bei der Skalierung haben die Farbbereiche eine Bedeutung.
    So ist YV24 sowie RGB32 und RGB24 alle Mod(1)-fähig. Das heißt das auch ungerade Auflösungen existieren können und dürfen.
    Bei YUY2 ist die Y Ausrichtung Mod(2)-fähig, wärend die X Ausrichtung Mod(1)-fähig ist. Bedeutet das die Breite ungerade sein kann und darf, jedoch nicht die Höhe. Denn diese darf nur gerade Werte haben.
    Und bei YV12 ist alles Mod(2)-fähig. Hier darf es nur gerade Auflösungen geben.

    Dazu zählt das YV24, RGB32 und RGB24 die Platzverschwenderischtesten Farbbereiche sind.
    YUY2 komprimiert den Chromabereich schon deutlich mehr und ist Platzsparender.
    YV12 ist der platzsparenste Farbbereich und findet überall in der Videotechnologie Anwendung.

    YV24, RGB32 und RGB24 finden ihre Anwendung bei Computer und hochwertigen Grafikprogramme wie Simulationen oder Figuren für Filme ihre Anwendung. Denn nur ein in der Abtastrate befindliches Objekt lässt sich hervorragend für Keyframing nutzen. Zudem lassen sich auch Projekte damit wunderbar sauber gestalten.
  • Okay also um bei dem ersten Lösungsweg von De-M-oN zu bleiben müsste bei mir der Arbeitsablauf nun so aussehen:

    1. Roh .avi & .flac Datei in Sony Vegas (Fraps Aufnahme + Audacity Mic-Aufnahme)
    2. Schneiden, Effekte einbinden etc.
    3. Mit Vegas als. avi Rendern
    4. MeGUI öffnen, Tools -> AVS-Skript Creator
    5. Bei Video Input das ganze laden und als Skript habe ich nun folgendes:

    LoadPlugin("Dateipfad zur ImageSequence.dll") movie = AVISource("Dateipfad zum Video",audio=false).AssumeFPS(30.00) Spline16Resize(1920,1080) logo = CoronaSequence("Dateipfad zum Wasserzeichen").converttoRGB32 Layer(movie,logo,op="add",level=128,x=x-koordinate,y=y-koordinate) ConvertToYV12()

    6. Das ganze dann als .mkv mit dem x264 Encoder encodieren

    Oder habe ich das nun vollständig falsch verstanden mit Frameserver nicht benutzen und direkt mit avisynth arbeiten?

    und danke nochmal an Sagaras für die sehr ausführliche Beschreiung die ich erst drei Mal lesen musste bis ich einen Teil davon verstanden habe :D
  • Ist zwars ein riesen Zeitaufwand, aber ja. So meinte er es.

    Und übrigens... dein Skript ist so dermaßen durcheinander das da keine Sau durchsieht was es machen soll. Ordnung ist das halbe Leben. Angesicht dessen bist du ein Genie ;D Denn nur ein Genie beherscht das Chaos xD

    Überhaupt... woher hast du das? xD
    Das haut hinten und vorn nicht hin und ist teils an einigen Punkten überflüssig sowie auch Leistungsverschwenderisch ^^

    Besser wäre dies hier:

    Quellcode

    1. movie = AVISource("Test.AVI",audio=false).AssumeFPS(30, 1).Spline16Resize(1920,1080)
    2. logo = ImageReader("image%d.png", 1, 170, 30, true, pixel_type="RGB32").loop(round(movie.framecount / 170)).Trim(0, movie.framecount)
    3. logomask = logo.ShowAlpha()
    4. Overlay(movie, logo, 0, 0, logomask, opacity = 0.5)
    5. ConvertToYV12()


    Es enthält genau das gleiche. Nur mit dem Unterschied das das Hauptvideo kein RGB32 oder YUY2 haben muss. Auch das zusätzliche Plugin Imagesequenz ist überflüssig, denn wie du siehst kann ich eine Sequenz auch via ImageReader laden und am Video anpassen.
    Hinzu kommt noch das ich das Teil mit nem Alphakanal ausstatten kann.

    Bedeutet das mein Skript hier das Hauptvideo vom Farbkanal in Ruhe lässt und ledeglich die Wasserzeichen Animation in RGB32 wandle um den Alphakanal zu nutzen.

    Will ich nur ein Wasserzeichen in Form eines Bildes (Sprich kene Animation), dann kann ich es auch umändern wie folgt:

    Quellcode

    1. logo = ImageReader("image.png", 0, 0, 30, true, pixel_type="RGB32")
    2. logomask = logo.ShowAlpha()

    Das wäre für ein Bild nur.
  • Ich glaube vollständig ohne Vegas werde ich nicht auskommen, dafür reichen meine Kenntnisse wirklich nicht aus..
    Wenn es so gemeint ist wird es demnach wohl auch die doppelte Zeit in Anspruch nehmen (vorallem bei meinem Rechner).
    Habe es grade mal getestet und ein Qualitätsunterschied ob ich es nun so wie oben beschrieben mache oder über den Frameserver laufen lasse und dann per x264 encode erzeugt (zumindest auf meinem Bildschirm) keinen gravirenden Qualitätsunterschied.

    Normal sollte es in meinem Skript auch alles untereinander stehen, irgendwie hat mir die Formatierung da etwas durcheinander gewürfelt, aber danke für das Lob Sagaras :D
    Habe es mir selbst zusammen gebastelt (allerdings bin ich noch nicht dazu gekommen das zu testen da ich bisher mein Wasserzeichen immer über Vegas als extra Spur eingebunden habe).
    Mein Wasserzeichen ist ein normales Bild und keine Animation, werde da Deine Möglichkeit heute Abend mal ausprobieren :) Sieht auf jeden Fall deutlich besser aus, danke Dir dafür!

    Quellcode

    1. logo = ImageReader("image.png", 0, 0, 30, true, pixel_type="RGB32") <- 0, 0 bestimmt hierbei die x & y-Achse?


    und über den Alphakanal wird die Transparenz von 50% dann erzeugt?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von ShaakLP ()

  • Quellcode

    1. logo = ImageReader("image.png", 0, 0, 30, true, pixel_type="RGB32")

    Hier wird für die Variable logo folgendes übergeben:

    Das Bild image.png wird geladen. Es hat weder einen Start noch einen Endwert, da es sich nur um ein Bild handelt und keine Sequenz aus mehreren Bildern. Daher kommt danach 0, 0. Also Start 0 und Ende 0 sozusagen.
    Darauf folgt die FPS. Bedeutet in welcher FPS soll das Bild angezeigt werden. Hierdran sieht man das es später ein Clip wird und man nimmt die FPS die das Hauptvideo auch hat.
    Das True steht für den DevIl und bedeutet ledeglich das ein nicht interner Parser es laden soll. Was weitaus sicherer oft ist.
    Dann erfolgt das Laden des Bildes in RGB32. RGB32 enthält das Bild an sich im RGB24 und den Alphakanal in den restlichen 8Bit. Zusammen ergibt es RGB32.

    Quellcode

    1. logomask = logo.ShowAlpha()

    Diese Zeile ist ganz einfach. Hier wird eine Alphamaske erstellt. Da wir das Bild in RGB32 geladen haben, können wir mit ShowAlpha uns den Alphakanal anzeigen lassen. Sprich die restlichen 8Bit von RGB32.
    Es handelt sich hierbei um ein reines Schwarz Weiß Bild. Weiß für alles was Sichtbar sein soll und Schwarz für alles Unsichtbare später. Alle Grautöne sind Transparentwerte.

    Quellcode

    1. Overlay(movie, logo, 0, 0, logomask, opacity = 0.5)

    Hier wird alles zusammengesetzt.
    Auf dem Hauptfilm movie wird das logo gesetzt auf Position 0, 0 hier.
    Zusätzlich lassen wir mit der Alphamaske logomask den unerwünschten Bereich des Logos entfernen und haben nur das Objekt des Bildes.
    Mit opacity lassen wir das logo Transparent erscheinen zusätzlich zum Alphakanal.
    Dabei bildet 0.0 absolut unsichtbar und 1.0 absolut Sichtbar. Alle anderen Werte sind Transparentwerte.

    Wenn alles fertig ist, sitzt das logo nach diesem Muster hier in der linken oberen Ecke des Filmes mit ausgestattetem Alphakanal. ^^


    Wenn du die Größe des logos bestimmen möchtest kann man das auch tun, indem man ein PointResize hinter folgender Zeile macht:

    Quellcode

    1. logo = ImageReader("image.png", 0, 0, 30, true, pixel_type="RGB32").PointResize(x, y)


    Damit kannst du die Größe des Logos bestimmen.
    Wenn du es akkurat machen möchtest, wäre eine Faktorskalierung ideal dafür.
    Diese machst du dann so:

    Quellcode

    1. logo = ImageReader("image.png", 0, 0, 30, true, pixel_type="RGB32")
    2. faktor = 0.5
    3. logo =logo.PointResize(logo.width * faktor, logo.height * faktor)

    Damit kannste dann über die Variable faktor die Größe des logos bestimmen. Eine Art Zoom Funktion kann man sagen ;D