Den Anfang einer Filmdatei in 16:9 encoden, den Rest in 4:3

  • Mit diesem einfachen Avisynth-Skript möchte ich aus einer Fernsehaufnahme (MPEG-2) eine Xvid/AVI-Datei erzeugen. Der Film wurde mit 720*576 Pixeln in 4:3 gesendet und ich möchte ihn resizen auf 720*544, um in der AVI-Datei das 4:3-Verhältnis beizubehalten. So weit, so gut.

    Mein Problem: Der Film ist 4:3, aber vor dem Film kommt eine kurze Sequenz mit einem Jugendschutzhinweis, und der ist in 16:9. Ich möchte also einen Teil der Filmdatei, nämlich Frames 0 bis 174 mit schwarzen Balken oben und unten encoden.
    Ein Deinterlacer muss nicht dabei sein.

    Mein Skript für 4:3:

    Code
    # Video öffnenlast = Mpeg2Source("Mein_Film.d2v")# Resizenlast = Lanczos4Resize(last, 720, 544)# Audio öffnenAudio = NicMPG123Source("Mein_Ton.mp2")AudioDub(last, Audio)

    Mein Skript für 16:9:

    Wie kann ich beide Skripte verbinden, so dass Frame 0 bis 174 mit 720*404 Pixeln und je 70 Pixelreihen schwarzen Balken oben und unten encodiert werden und der Rest mit 720*544 Pixeln ohne schwarze Balken?
    Ich bin über den Anfängerstatus in Avisynth noch nicht hinausgekommen ...

  • Ich würde es so machen (geht wahrscheinlich auch eleganter... aber für Eleganz war ich noch nie bekannt):

    Code
    Hinweis = Mpeg2Source("Mein_Film.d2v").Trim(0,174).Lanczos4Resize(last, 720, 404).AddBorders(last, 0, 70, 0, 70)
    Film = Mpeg2Source("Mein_Film.d2v").Trim(175,0).Lanczos4Resize(last, 720, 544)
    Komplett = Hinweis++Film
    Audio = NicMPG123Source("Mein_Ton.mp2")
    
    
    AudioDub(Komplett, Audio)

    Who is General Failure and why is he reading my hard drive?

    He was trying to get in touch with Private Data but if it involves a Major Disaster I understand that the fault lies with General Protection.

    Furthermore, if you cannot reboot it may be because of a corrupt Colonel.

  • kleine Anmerkung zu Tom Keller seinem Skirpt:
    - nur 1mal die Quelle laden
    - BicubicResize anstatt Lanczos4Resize

    Code
    Quelle = Mpeg2Source("Mein_Film.d2v")
    Hinweis = Quelle.Trim(0,174).BicubicResize(last, 720, 404).AddBorders(last, 0, 70, 0, 70)
    Film = Quelle.Trim(175,0).BicubicResize(last, 720, 544)
    Komplett = Hinweis++Film
    Audio = NicMPG123Source("Mein_Ton.mp2")
    AudioDub(Komplett, Audio)

    Hybrid hier im Board, Homepage (http://www.selur.de), Forum

    Wünsche allen ein paar fröhliche Weihnachtstage!

    Einmal editiert, zuletzt von LigH (5. Juni 2011 um 15:51) aus folgendem Grund: BicubicResize anstatt BicubicResize ?!?

  • Stimmt - DAS wäre z.B. eleganter :D (und sinnvoller).

    Who is General Failure and why is he reading my hard drive?

    He was trying to get in touch with Private Data but if it involves a Major Disaster I understand that the fault lies with General Protection.

    Furthermore, if you cannot reboot it may be because of a corrupt Colonel.

  • Sowohl das elegante als auch das nicht so elegante Skript werfen in meinem Editor AvsP die folgende Fehlermeldung aus:

    Skript error: Invalid arguments to function "BicubicResize"
    (Mein_Film.avs, line 2)


    - BicubicResize anstatt BicubicResize

    Meintest du BicubicResize anstelle von Lanczos4Resize? Auch bei Verwendung von Lanczos4Resize kommt die oben genannte Fehlermeldung.

    Habe schon versucht, einige Variablen umzustellen und mein Skript nach Tippfehlern durchsucht, aber kann nichts dergleichen finden. Der AvsP-Editor erkennt normalerweise die Variablen und stellt sie in Fettschrift dar. Bei den Variablen "Quelle", "Hinweis" etc. ist das nicht der Fall. Habe ich etwas übersehen oder falsch verstanden? :ratlos:

    Danke!

  • Zitat

    Meintest du BicubicResize anstelle von Lanczos4Resize?


    Ja. -> Hier mal eine Liste der Resizer in Avisynth: http://avisynth.org/mediawiki/Resize
    Die last() Einträge können auch weg, durch den '.'-Operator ist klar worauf sich bezogen wird.

    Code
    Quelle = Mpeg2Source("Mein_Film.d2v")
    Hinweis = Quelle.Trim(0,174).BicubicResize(720, 404).AddBorders(0, 70, 0, 70)
    Film = Quelle.Trim(175,0).BicubicResize(720, 544)
    Komplett = Hinweis++Film
    Audio = NicMPG123Source("Mein_Ton.mp2")
    AudioDub(Komplett, Audio)

    Cu Selur

    Ps.: Nutze so selten Avisynth, dass ich nicht AvsP oder dergleichen sondern Notepad++ nutze. ;)

  • Der AvsP-Editor erkennt normalerweise die Variablen und stellt sie in Fettschrift dar. Bei den Variablen "Quelle", "Hinweis" etc. ist das nicht der Fall.


    AvsP habe ich selbst auch noch nie verwendet. Dass diese Variablen nicht automatisch in Fettschrift dargestellt werden, würde ich daher einfach mal auf den Fakt schieben, dass es manuell benannte Variablen sind, die als Platzhalter für die Clips dienen.

    In diesem Falls steht halt "Quelle" für den kompletten (unbearbeiteten) Clip... "Hinweis" enthält von "Quelle" nur die ersten 174 Frames, resized auf 720x404 und mit unten sowie oben angefügten schwarzen Balken... "Film" enthält von "Quelle" alle Frames ab dem 175. Frame (bis zum Ende), resized auf 720x544... und "Komplett" enthält "Hinweis" plus "Film"! Statt "Quelle", "Hinweis", "Komplett", usw. könnte da auch "a", "b", "c", usw. oder "Clip1", "Clip2", "Clip3", usw. stehen - die Bezeichnung ist relativ unerheblich, solange DU die Übersicht behälst und halt weißt, welche du für welchen Clip vergeben hast.

    Ist hier alles noch sehr überschaubar und eigentlich recht selbsterklärend - ab 10 Teilstücken aufwärts wird's dann aber langsam ein wenig unübersichtlich ;) !

    Who is General Failure and why is he reading my hard drive?

    He was trying to get in touch with Private Data but if it involves a Major Disaster I understand that the fault lies with General Protection.

    Furthermore, if you cannot reboot it may be because of a corrupt Colonel.

  • Ja. -> Hier mal eine Liste der Resizer in Avisynth: http://avisynth.org/mediawiki/Resize


    Bisher habe ich ausschließlich Lanczos4Resize genommen. Mal sehen, ob die Unterschiede gravierend sind ...

    Die last() Einträge können auch weg, durch den '.'-Operator ist klar worauf sich bezogen wird.


    Ja, die Fehlermeldung in AvsP lag wohl an den "last"-Variablen. Jetzt, wo ich sie rausgenommen habe, funktioniert das Skript! :daumen:

    AvsP habe ich selbst auch noch nie verwendet. Dass diese Variablen nicht automatisch in Fettschrift dargestellt werden, würde ich daher einfach mal auf den Fakt schieben, dass esmanuell benannte Variablen sind, die als Platzhalter für die Clips dienen.


    Bis eben hatte ich wirklich gedacht, dass "Quelle", "Hinweis" etc. festgelegte Variablen sind. :wall: Jetzt ist alles klar.

    Danke für die Hilfe. :):):)

  • Naja... mit Meta-Filtern wie Animate und ApplyRange habe ich persönlich immer meine Probleme, da mir da leichter Syntax-Fehler unterlaufen, die ich dann häufig ewig suche ;) .

    Zudem frage ich mich: kann man ApplyRange eigentlich so ohne weiteres mit Filtern einsetzen, die Einfluss auf essenzielle Eckdaten wie z.B. Farbraum, Framerate oder auch Auflösung nehmen (wie eben in diesem Fall: AddBorders oder auch BicubicResize)? Wahrscheinlich liege ich falsch damit... aber ich hatte irgendwie dunkel in Erinnerung, dass es dann eine Fehlermeldung gibt (irgendwie was mit "Gefiltertes und ungefiltertes Video müssen die/den selbe(n) Framerate/Auflösung/Farbraum besitzen" :hm: )!?

    Who is General Failure and why is he reading my hard drive?

    He was trying to get in touch with Private Data but if it involves a Major Disaster I understand that the fault lies with General Protection.

    Furthermore, if you cannot reboot it may be because of a corrupt Colonel.

  • Ich hab's auch nicht so aufgefasst (wie der Smiley verdeutlichen sollte ;D ).

    Die Frage war aber ernst gemeint: würde ApplyRange in diesem Fall überhaupt funktionieren?

    Who is General Failure and why is he reading my hard drive?

    He was trying to get in touch with Private Data but if it involves a Major Disaster I understand that the fault lies with General Protection.

    Furthermore, if you cannot reboot it may be because of a corrupt Colonel.

  • Zitat

    ver = Version()
    return ver.ApplyRange(0,149,"Crop", 158,0,64,32)
    # gives an error since cannot have different frame sizes within a clip


    siehe: http://avisynth.org/mediawiki/ApplyRange
    ApplyRange wird nicht gehen, da die Framegröße sich nicht ändern darf durch einen Filteraufruf und hier bei beiden Teilen Aufrufe vorhanden sind welche die Auflösung ändern. ;)

Jetzt mitmachen!

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