Scripte ohne Player und schnell ausführen?

  • Ich bastle gerade an einem Tool (in FreePascal woraus ich ein Avisynthscript via Commandozeile starten will.

    Das Script wird so 150 mal (vielleicht später auch mehr) gestartet, berechet ein Frame, dieses Frame lasse ich per Imagewriter auf die HDD schreiben und dann wird das Script wieder geschlossen.

    Ich rufe das Script nicht mit einem Mediaplayer auf, sondern mit der Zeile "avsmeter.exe meinscript.avs"

    Mir ist kein anderes Programm geläufig womit ich ein Script schnell per Commando ausführen lassen könne. Wie gesagt und das über 150 mal und das dauert mehrere Minuten.

    Wisst ihr eine schnellere Lösung ein Script per CMD aufzurufen?

  • Laut ffmpeg-Wiki ist die Verwendung des Null-Multiplexers schon die portable Lösung. Dann versucht ffmpeg gar nicht erst, eine Ausgabedatei zu generieren. Deine Antwort in #6 war also optimal.

    Eine Ausgabedatei im NUL-Gerät verschwinden zu lassen würde bedeuten, dass erstmal ein anderer Multiplexer vorher Rechenzeit verbraucht. Aber es wäre auch möglich, damit "nichts" zu erzeugen, falls man einen Multiplexer bei der Ausführung testen wollte. Das ist für dich ja nicht wichtig. Grob hätte es etwa so ausgesehen: ffmpeg -i meinscript.avs NUL (dann hätte ffmpeg aber vielleicht beanstandet, dass es nichts zu tun hat).

  • Jetzt könntest du noch probieren, ob z.B. avs2pipemod auch so leicht verwendet werden kann. Das wäre ein viel kleineres Programm und lädt selbst wahrscheinlich schneller als das riesige ffmpeg.

  • "Wisst ihr eine schnellere Lösung ein Script per CMD aufzurufen?"


    wenn du via batch sachen parallel ausfüren willst,

    dann:

    Code
    start "" "programm" -command "input" "output"

    bzw.

    Code
    start "" /b "programm" -command "input" "output"

    ggf. empfielt sich hier noch "/BELOWNORMAL" oder sogar "/LOW"

    hat aber den nachteil, dass keine abhänigkeiten erlaubt sind,

    sonnst gibt es kollisionen im arbeitsablauf

    wenn du aber jedes frame getrennt ansteuerst,

    dann könnte man via script ~150 prozesse gleichzeitig starten,

    bzw. einen loop einbauen, der die treadanzahl limitiert

    alternativ verweise ich gern zu powershell, oder VBS,

    dass man via batch script erzeugen/starten kann...

    aber ich habe den verdacht, dass eh nicht das script das problem verursacht,

    sonndern die zu verarbeitenen programme.

    ich frage mich, warum must du ~150 einzel aufrufe tätigen?

    und warum kannst du das nicht in einem arbeitsaufruf erzeugen?

  • Zitat

    ich frage mich, warum must du ~150 einzel aufrufe tätigen?

    Weil ich mir nicht anders zu helfen weiß. Ich baue gerade eine Lösung für DAIN (Thema hier)

    Ich habe eine Liste (TXT-Datei) wo alle Szenenübergänge eines Videos aufgelistet sind. Dain hat beim Rendern der Zwischenbilder an den Szenenübergängen unschöne Matschbilder erzeugt. Ich will diese Matschbilder austauschen gegen ganz einfache Blend-Bilder.

    Mein Tool macht (nach grober Durchsicht ob die Szenen auch alle passen) folgendes:

    0. Gehe ich die Textdatei und suche dir die Framecodes der nächsten Szene raus, die Bilder die Dain erzeugt sind alle nach Framecodes durchnummeriert

    1. Nimm an Hand des Framecodes das letzte Bild der vorigen Szene -> kopiere es in einen Unterordner mit dem Namen "Ende.png"

    2. Nimm erstes Bild der aktuellen Szene -> kopiere es in einen Unterordner mit dem Namen "Anfang.png"

    3. Führe das statische AV-Script aus

    Code
    a=ImageSource("Ende.png", end=0)
    b=ImageSource("Anfang.png", end=0)
    c=Layer(a, b, "fast")
    c=ImageWriter(c.ConvertToRGB32(), file="Blend%00d.png", start=0 , end=1, type= "png")
    return c.info

    was ein Blend0.png erzeugt

    4. Kopiere das Blend0.png über das aktuelle von Dain erzeugte "Matschbild".

    5. Fange wieder bei 0. an

    bei 151 Szenen im Video macht er das eben 150 mal.

    Das Programm ist soweit schon fertig. Natürlich noch nicht ausgereift aber als Werkzeug erstmal ganz gut.

    Das Programm gibt mir auch einen Einblick auf die Szenenübergänge, da kann man sehen, ob es wirklich ein Szenenübergang ist oder ob der "Erkenner" nur eine große inhaltliche Veränderung im Bild als neue Szene erkannt hat. Dann kann man entscheiden ob man das interpolierte Dain-Bild behalten will oder ein Blendframe mehr Sinn macht, weil angenehmer fürs Auge....

Jetzt mitmachen!

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