Forum: Digitale Signalverarbeitung / DSP / Machine Learning quick&dirty Zeitlupe/Zeitraffer für kürzeste Videoschnipsel


von A. S. (rava)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich möchte das zwar nicht in VHDL lösen, sondern offline auf dem PC, 
aber hier scheinen mir die meisten Videoprozessierer mitzulesen.


Netiquette
Für einige anschauliche Videos meiner Diplomarbeit möchte ich 
automatisiert einen Datenstrom aus Einzelbildern nachbearbeiten. Die 
Einzelbilder (png) wurden mit Matlab erzeugt, allerdings ist das 
Abspielen mit konstanter Framerate eine nervenaufreibende Angelegenheit 
(270k Dateien!!).

Ich konnte keine Software finden, die es mir erlaubt, eine Videodatei zu 
erzeugen und dabei die effektiven Frameraten in png-files/sec variabel 
anzugeben. Also müsste ich das manuell machen, indem ich für die Bilder 
ein Tool zum Preprocessing schreibe. Der Sinn: dann kann einfach 
virtualDub mit konstanter Framerate das gewünschte Video erzeugen.

Beispiel:
Die gewünschte effektive Framerate ergibt sich, weil die Bildserie 
bereits in gut 1600 Blöcke unterteilt ist.
1. Hat ein Block 1-5 Bilder, sollen 10 Bilddateien daraus werden.
2. Hat ein Block 6-200 Bilder, sollen 25 Bilddateien daraus werden.
3. Hat ein Block 201-2000 Bilder, sollen 50 Bilddateien daraus werden.
4. Hat ein Block mehr als 2000 Bilder, sollen 100 Bilddateien daraus 
werden.
Läuft das Video am Ende mit 50fps, dürfte das ganz ansehnlich werden.


Problem
ich muss also pro Block eine Bilderserie interpolieren, um aus einer 
Zahl n von Bildern eine neue Zahl m von Bildern zu generieren. Dabei 
kann in den Fällen 1&2 die Bilderzahl steigen. In den Fällen 2&3&4 
hingegen sinkt die Zahl an Bildern.

Naiv ginge das durch Kopieren und Löschen von Einzelbildern. Aber gibt 
es auch eine Möglichkeit, eine echte Interpolation hinzubekommen? Ich 
könnte mir vorstellen, dass das Video dadurch optisch ansprechender wird 
und weniger "Jitter" auftritt - auch wenn der Begriff hier etwas hinkt.

Mehr als 1-2 Tage Arbeit kann ich allerdings nicht mehr hineinstecken 
(Deadline!). Hat Matlab vielleicht schon solche Funktionen eingebaut? 
Alternativ programmiere ich in einer Sprache in VisualStudio.


So etwas häng sicherlich auch vom Inhalt der Bilder ab:
Im Prinzip sieht man das Standbild eines Labyrinths (bzw. einer beliebig 
gearteten Umgebung mit variablen Überquerungskosten). In diesem 
Labyrinth bewegt sich ein Roboter und erkundet neue Teile der Umgebung. 
Jeder Block entspricht einem Schritt des Roboters (Anhang).
Die Bilder innerhalb des Blockes zeigen die Arbeitsschritte des 
Suchalgorithmus des Roboters. Hierbei werden einzelne Zellen des 
Laybrinths farbig ausgefüllt. Da jeder Block für sich nachbearbeitet 
wird, muss also nur das Ausfüllen von einzelnen Zellen mit verschiedenen 
Farben interpoliert werden.

: Verschoben durch Admin
von Lukas T. (tapy)


Lesenswert?

Also, wenn dein "Zeitraffer" läuft, kannst du einfach alle Bilder, die 
über 50 Frames hinaus gehen löschen. So läuft das beim Zeitraffer. 
Weglassen von Zwischenschritten bzw. Bildern.

Ich würde empfehlen: Schreibe dir ein Python-Skript o.Ä., welches dir 
die Bilder so lange verdoppelt, bis deine Zeitlupenfunktion 50 fps 
entspricht und so lange Bilder aus den zu vollen Ordnern löscht, bis das 
Ganze 50 fps entspricht. Dann hängst du die Bilder hintereinander und 
hast deinen Zeitlupen/-raffereffekt. Ich würde noch jeweils oben rechts 
im Bild die Zeit einblenden.

"Interpolieren" hieße Zwischenbilder generieren (transparent 
übereinander legen), da dein Proggi nicht wissen kann, was da sinnvoll 
zwischen gehört -> Unschärfe wird's werden.

UND. Falsches Subforum. Egal wer hier ließt, hier isses falsch.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.