Bezeichnung
GetVideoFrame -- konvertiert ein Einzelbild in einen Pinsel (V5.0)
Übersicht
[id] = GetVideoFrame(brushid, frame, videoid[, unit])
Beschreibung
Dieser Befehl kann verwendet werden, um ein Einzelbild eines Videos in einen Pinsel zu konvertieren. Das Video muss zuvor mit dem Befehl OpenVideo() oder der Präprozessor-Anweisung @VIDEO geöffnet worden sein. Im Argument brushid müssen Sie eine ID für den Pinsel übergeben (alternativ können Sie auch Nil für die automatische ID-Auswahl angeben). Im Argument frame müssen Sie festlegen, welches Einzelbild des Videos konvertiert werden soll und im Argument videoid geben sie die ID des Videos ein.

Das optionale Argument unit wird verwendet, um festzulegen, wie der Wert in frame interpretiert werden sollte. Wenn unit auf 0 gesetzt ist, dann wird der Wert in frame als absoluter Einzelbildindex interpretiert. Dies ist auch die Standardeinstellung. Wenn unit auf 1 gesetzt ist, dann wird der Wert in frame als Zeitstempel in Millisekunden angesehen und GetVideoFrame() wird das Einzelbild an diesem Zeitstempel konvertieren. Es wird empfohlen, unit mit dem Wert 1 für den Zugriff auf Einzelbilder zu verwenden, da dies in der Regel viel schneller ist. Wenn Sie trotzdem Einzelbilder durch ihren absoluten Index bestimmen müssen, lesen Sie bitte die untenstehende Warnung.

Bitte beachten Sie, dass der Zugriff auf Einzelbilder durch den absoluten Index ist in der Regel eine sehr aufwendige Operation ist, da Hollywood für die meisten Videoformate den ganzen Weg vom Video durchlaufen muss, bis das angeforderte Einzelbild erreicht ist. Dies erfordert viel Zeit und ist daher nur von begrenztem praktischen Nutzen. Jedoch gibt es einen Sonderfall, wo der Zugriff über den absoluten Index sehr effizient ist, und das wäre beim sequentiellen auslesen der Einzelbilder eines Videos. "Sequentielles auslesen" bedeutet, dass Sie ein Bild nach dem anderen aus dem Video lesen (zuerst Einzelbild 1, dann Einzelbild 2, dann Einzelbild 3, etc). Dies kann sehr schnell erfolgen. Was hingegen wieder viel Zeit in Anspruch nimmt, ist das Auslesen der Einzelbilder in Rückwärtsrichtung (zuerst Einzelbild 10, dann Einzelbild 9, nachher Einzelbild 8, etc.), oder bei großen Sprüngen zwischen den Einzelbilder (Nummer 1, dann Nummer 1000, nachher Nummer 5000 etc.). Sequentielles lesen wird in diesen Fällen effizienter sein.

Um die genaue Anzahl der Einzelbilder eines Videos herauszufinden, können Sie den Befehl GetAttribute() mit dem Objekttyp #VIDEO und dem Attribut #ATTRNUMFRAMES verwenden.

Eingaben
id
ID für den Pinsel oder Nil für die automatische ID-Auswahl
frame
Einzelbild; das Format von diesem Argument wird weiter unten in unit festgelegt
videoid
ID des Videos
unit
optional: Format für das Argument frame; dies kann entweder 0 sein, womit das Argument frame einen absoluten Einzelbildindex beinhaltet oder 1, wodurch das Argument frame einen Zeitstempel in Millisekunden verwendet (Standard ist 0).
Rückgabewerte
id
optional: ID des Pinsels; wird nur zurückgegeben, wenn Nil im Argument brushid übergeben wurde (siehe oben)
Beispiel
my_frame = GetVideoFrame(Nil, 1, 2)
DisplayBrush(my_frame, #CENTER, #CENTER)
Der obige Code speichert das Einzelbild 1 vom Video 2 in einem neuen Pinsel. Der Pinsel wird dann in der Mitte des Displays angezeigt.

Navigation zeigen