Beiträge von Matt Kirby
-
-
Ich habe mal was mit meinen begrenzten Kenntnissen programmiert.
Da ich ständig auf der Suche nach einem guten Szenenerkenner war und fast alle Tools, die es dazu zu finden gibt, mir zu blöd waren, bin ich bei einem Avisynth-Script von "StainlessS" aus dem englischen Doom9-Forum geblieben. Das hatte meiner Meinung nach die besten Ergebnisse. Das Script spuckt eine Textdatei aus mit Anfangs und Endframes der gefundenen Szenen.
Bloss fand ich es immer umständlich die Textdatei zu durchforsten und Falscherkennungen manuell nachzuschauen. Darum habe ich mir ein kleines Tool gebaut, was diese Txtdatei ausliest und es möglich macht einzelne Szenen anzuspringen und nachzuschauen, ob etwas übersehen wurde oder vielleicht ein Schnitt erkannt wurde, wo gar keiner ist. Daraufhin müsste man die Settings des Avisynth-scripts nochmal anpassen.
Naja, und dann kam mir die Idee, in dem Tool gleich noch die Ausführung des Scriptes zu integrieren. So dass auch eine User ohne Avisynth- Kenntnisse eine Szenenerkennung starten kann.
Das Tool ist nun soweit fertig. Es basiert auf ffmpeg und Avisynth+ 3.7xx.
Da ich nicht weiß, ob ich das Script von StainlessS einfach hier in meinem Tool veröffentlichen darf und da das Tool in Visual Studio 19 programmiert wurde (und ich keine Ahnung von Lizenzen habe, ich verwende eine Studentenversion), werde ich es hier nicht zum Download anbieten. Aber wer mich anschreibt, dem kann ich einen Link nicht verwehren
-
Wollte nur nochmal anmerken, dass es wohl so ist, dass das Dain wirklich nur zwischen zwei Bildern interpoliert. Es nimmt und braucht keine frames mehr drumherum. Für beschleunigte Bewegungen ist das sicher nicht optimal weil es ja einfach das Objekt linear in die "Mitte" setzt aber ich glaube, das fällt bei den kurzen Zeitabständen nicht auf.
-
Naja, an der eigentlichen Interpolation konnte ich nichts aussetzen. Siehe hier:
ZitatEr arbeitet fast schon korrekt mit Eigenheiten:
Das erste KI-Video: hat 637 frames was quasi 319 +318 Zwischenbilder entspricht.
Das passt auch, habe das Bild für Bild verglichen. Weil das letzte Bild keinen Nachfolger hat, kann er auch kein 638. erstellen.
Darum hat er bei der selben Zeitlänge (12,76 sek) ein Frame weniger und darum kommt er auf 49.92 fps. Wenn man die Frames einfach mit 50 fps codiert fehlt ein Zwischenbild (nämlich das was nach dem letzten käme) aber darauf kann man verzichten.
Das zweite Video hat den Szenenübergang-erkenner drinnen. Das Dain berechnet deswegen zwischen den beiden Szenen auch kein Zwischenbild.
Das Video hat also noch ein Frame weniger als das erste Video. 636 Bilder.
Und bei gleicher Zeitlänge (12,76 sek) und 636 Bildern kommt man auf 49,84 fps. Auch diese Bilder könnte man einfach auf 50 fps patchen und es gibt auch keine Ruckler oder sowas.
Aber klar müssen einige Speicherprobleme noch behoben werden.
In der 0.42 soll folgendes kommen:
ZitatMy modifications to interpolate multiple frames at the same time are going well, i'm feeling confident it will be ready for 0.42.
-
Version 0.41 wurde für die Öffentlichkeit freigeschaltet.
https://www.patreon.com/DAINAPP
(nach unten scrollen)
-
Das ist er selber, Rumburak persönlich. 10 Jahre später in der Fortsetzung
-
Mein Programm hat schon Gestalt angenommen:
-
Passt ja alles soweit.
Die 150 Blends erstellen dauert nun 140 Sekunden. Das ist ok für mich.
-
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
Codea=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....
-
Habe auch das jetzt getestet. Es ist genauso schnell wie FFmpeg, fast auf die Sekunde...
-
-
? Finde zu "NUL" nix in den Hilfen
Wie sähe denn für Windows so eine Zeile aus?
-
-
Ja, sowas meinte ich. ABER: Das AVSR analysiert erst 10 Sekunden das Script bevor es loslegt. Also eher ungeeinget wenn man 150 mal ein Frame erzeugen will. Es ist sicher schnell, wenn man mit einem Mal 150 Frames erzeugen will.
-
OK, schaue ich mir mal an
-
OK, mit
ffmpeg -i meinscript.avs
geht es schonmal deutlich schneller...
-
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?
-
Ich habe mal mi dem Tool hier den Gammawert gelöscht. Jetzt funktioniert es auch mit Avisynth ImageSource...
-
-