Keyframe-Problem mit AviSynth lösen???

  • Sachverhalt: Ich habe 3 Clips, alles MPEG-1-Files, zwei in NTSC, eine in PAL. Alle drei wurden wiederum aus drei anderen Clips zusammengeschnitten. Leider ist die Reihenfolge total falsch.

    Lösungversuch: Ich habe ein paar AviSynth-Scripte erstellt, die jeweils einen (kleinen) Clip beinhalten mit DirectShowSource() und Trim() bzw. beim PAL-Clips auch noch ChangeFPS() und DeleteFrame()*. Diese einzelnen Scripte sollen dann in einem "Haupt"-Script zusammengefügt werden um dann im TMPGEnc in eine brennfertige MPEG-1-File umgewandelt zu werden.

    Problem: Ich kann ja nur an Keyframes** schneiden. Da DeleteFrame()* absolut nichts gebracht hat, gehe ich davon aus, dass auch hier das Keyframe-Problem besteht. Kann aber auch an der Kombination ChangeFPS() und DeleteFrame()* gelegen haben. Im Thread hier http://forum.gleitz.info/showthread.php…light=keyframes wurde schon ein Link zu einem MPEG-2-Schnittprogramm gepostet, ob das nun für MPEG-1 analog angewendet werden kann weiß ich nicht. Aber auf jeden Fall kann ich das Programm nicht für mein Problem verwenden, da eine Neucodierung nötig ist, die ich vermeiden möchte.
    In der AviSynth-Dokumentation habe ich nichts richtiges gefunden, um das Keyframe-Problem** zu umgehen. Scheint es nichts zu geben. Kennt einer eine Möglichkeit?

    * Ich möchte nur 2x je einen Frame löschen. Da das Video auch sehr kurz ist sollte keine Asynchronität entstehen.

    ** Keyframes sind doch nichts anderes als besonders herausgehobene I-Frames (oder sogar alle I-Frames?). Könnte man hier nicht alle Frames als I-Frames definieren, zumindest in der Datei in der geschnitten werden soll. Bei der Enddatei ist das dann ja nicht mehr notwendig.

    Ein kluger Mann widerspricht keiner Frau ... er wartet bis sie es selbst tut.

  • Moin,

    nach dem dekodieren (AVISource, MPEG2Source, Directshowsource...) gibt es keine Keyframes mehr.

    Du kannnst also an jeder beliebigen Stelle schneiden. Wo jetzt dein Problem liegt, ist mir auch nicht klar,
    aber das "cut at I-Frame" Problem gibts nur, wenn man ohne erneutes encoden schneiden will.

    Probiers doch mal in VD un derzeuge eine Huffyuv-Zwischendatei.

    Gruß Karl

  • Richtig, der Gedanke mit dem Huffyuv ist mir noch nicht gekommen. Das Ergebnis dürfte doch (theoretisch) das gleiche sein, wie ohne Neucodierung und alles über Frameserver?

    Ich habe bei dem PAL-Clip bevor ich Trim() gesetzt habe die Framerate mittels ChangeFPS() geändert. Ein Frame der in PAL noch Frame Nr. 500 war, ist bei NTSC eben nicht mehr Frame Nr. 500 sondern 50x. Ich habe aber ein Haufen andere Einstellungen in Trim() und DeleteFrame() ausprobiert, um eben den Frame zu finden der vorher 500 war. Die Clips sahen aber immer gleich aus, sprich es wurde an der selben Stellen geschnitten (bei Trim) bzw. überhaupt nichts geändert (bei DeleteFrame).

    Das mit dem Huffyuv werde ich testen. Du meintest erst MPEG -> AVI mit Huffyuv, dann mit VDub(Mod) schneiden und dann mit AviSource() in TMPG laden und fertig.

    Ein kluger Mann widerspricht keiner Frau ... er wartet bis sie es selbst tut.

  • Nicht dass du da was falsch verstehst: Sowohl das Verwenden eines Frameservers als auch das Speichern in ein verlustlosen Format haben beides einen Faktor gemeinsam - das MPEG-Material wird zunächst in unkomprimierte Einzelbilder decodiert.

    Das bedeutet in beiden Fällen: Wenn du am Ende wieder ein MPEG haben willst, musst du das geschnittene Video wieder in einem MPEG-Encoder komprimieren. Und dabei wird Qualität verloren gehen, in beiden Fällen.

  • Schon klar, jede Umwandlung geht über die Qualität. Mit dem verlustfreien Komprimieren konnte ich mein Problem lösen und alle unnötigen Sachen rausschneiden. Schwierigkeiten bereitet mir noch das Zusammenschneiden in der richtigen Reihenfolge. Die beiden anderen Dateien konnten ja ordentlich geschnitten werden, daher habe ich nur eine verlustfrei umgewandelt. Jetzt liegen mir 6 Scripte vor, die jeweils einen einzelnen Dateiteil enthalten (der ja im Ausgangsmaterial absolut falsch geordnet war). Jetzt soll alles korrekt zusammengefügt werden. Laut avisynth.org sollte AviSource() auch avs-Scripte laden können, was aber nur mit einem einzelnen geht. Versuche ich die mit AviSource(...) + AviSource() oder einem anderen Befehl zu einem Hauptscript zusammenzufassen, bekomme ich vom TMPG eine Fehlermeldung:
    --->> Splice: Frame Size don't match.

    Ein kluger Mann widerspricht keiner Frau ... er wartet bis sie es selbst tut.

  • Ist ja logisch: Mit + / ++ oder {Un}AlignedSplice() kann man nur Videos zusammenfügen, die identische Eigenschaften haben: Gleiche Bilddimensionen (Breite*Höhe), gleiche Framerate (Bilder/Sekunde) - beides schon mal zwischen PAL und NTSC grundverschieden. Kein Wunder, dass das so einfach nichts wird.

  • Da ist mir bekannt, jedoch dachte ich das mit dem erstellen einzelner Scripte (in denen Framerate und so angepasst wurde) umgehen zu können. Nun gut, auf ein neues.
    -------------
    Edit:
    Bezieht sich das mit den identischen Eigenschaften auch auf Audioeigenschaften? "Ändern" der Eigenschaften mit einem Script wird wohl bei "+" überhaupt nicht akzeptiert und ich muss den betreffenden Clip nochmal bearbeiten?

    Ein kluger Mann widerspricht keiner Frau ... er wartet bis sie es selbst tut.

Jetzt mitmachen!

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