Forum: PC-Programmierung Timecode aus Video über RS232 ableiten


von Andi M. (andi_macht)


Lesenswert?

Hallo zusammen!

Mein erster Beitrag auf Mikrokontroller.net, ich bin sehr gespannt ob 
mir wer weiterhelfen kann: Ich möchte gerne ein Video abspielen, das mir 
zu den Zeitpunkten x und y ein Ausgangssignal (jedweder Art) zur 
Verfügung stellt, das ich zum triggern einer Aktorik (per Arduino) 
weiterverarbeiten kann.

Der erste Versuch, dafür die Tonspur zu nutzen war nur mit mäßigem 
Erfolg verbunden. Es ist zu hörbar und zu unsicher in der Erkennung. Der 
zweite Ansatz ist nun, die Abspielzeit des Videos zu nutzen. Nach etwas 
Recherche ist mir dabei der Timecode aufgefallen, der sich sogar 
framegenau nutzen lässt.

Kennt ihr eine Möglichkeit, diesen Timecode "live" bei der 
Videowiedergabe auf der RS232 o.ä. darzustellen? Zielhardware kann ein 
Mini-PC mit Windows oder auch ein Raspberry sein.

Vielen Dank schon mal für mögliche Antworten und Hilfe! :)
Andi

von Klaus H. (klummel69)


Lesenswert?

Probiers mal mit ffplay. Das ist ein Consolen Player aus dem ffmpeg 
Paket.
(für Linux und Windows verfügbar).

Gibt den Timecode in der Console aus. Das kannst du ggf per Pipe an die 
Schnittstelle weiterleiten.

von Oliver S. (oliverso)


Lesenswert?

Andi M. schrieb:
> Kennt ihr eine Möglichkeit, diesen Timecode "live" bei der
> Videowiedergabe auf der RS232 o.ä. darzustellen?

Willst du da den Timecode jedes Frames übertragen, nur um dann ein- oder 
zweimal im ganzen Video drauf zu reagieren?

Ich hätte mir da wohl was mit avisynth auf dem Abspielcomputer 
gebastelt, das dann an den gewünschten Stellen eine Aktion triggert.

Oliver

von Axel R. (axlr)


Lesenswert?

Andi M. schrieb:
> Der erste Versuch, dafür die Tonspur zu nutzen war nur mit mäßigem
> Erfolg verbunden. Es ist zu hörbar und zu unsicher in der Erkennung.

Zeig mal. Wäre das erste, was mir einfiele. einen kurzen 16Khz Burst mit 
informationen über die Phasenlage(0/180°) hört doch niemand. Was hast Du 
denn da gebaut gehabt?

von Klaus H. (klummel69)


Lesenswert?

Ergänzung zu ffplay

Theoretisch könnte man Steuercodes als Untertitel in das Video einbauen.
Ggf kann man die Steuerbefehle des Arduinos direkt integrieren und spart 
den Umweg über Timecodes.

Untertitel einbauen ist einfach.
Weiss allerdings nicht ob ffplay auch Untertitel auf die Console 
ausgeben kann.

von Εrnst B. (ernst)


Lesenswert?

Alternativ mit

https://processing.org/

einen Video-Player mit Arduino-Anbindung zusammenstöpseln.

Hier ist Beispiel-Code
https://processing.org/tutorials/electronics/#code
https://processing.org/tutorials/video/#recorded-video

von c-hater (Gast)


Lesenswert?

Andi M. schrieb:

> Ich möchte gerne ein Video abspielen, das mir
> zu den Zeitpunkten x und y ein Ausgangssignal (jedweder Art) zur
> Verfügung stellt, das ich zum triggern einer Aktorik (per Arduino)
> weiterverarbeiten kann.

Womit genau willst du das Video abspielen?

> Der erste Versuch, dafür die Tonspur zu nutzen war nur mit mäßigem
> Erfolg verbunden. Es ist zu hörbar und zu unsicher in der Erkennung.

Dann hast du was falsch gemacht. DTMF z.B. kann leise bis knapp über die 
Hörschwelle machen und ist trotzdem mit recht höher Sicherheit 
erkennbar. Natürlich muss dafür der Empfänger ziemlich aufwendig sein.

> Der
> zweite Ansatz ist nun, die Abspielzeit des Videos zu nutzen. Nach etwas
> Recherche ist mir dabei der Timecode aufgefallen, der sich sogar
> framegenau nutzen lässt.

Man könnte als auch einfach die Frames zählen, anstatt aufwendig den 
Timecode aus dem Video zu extrahieren, meinst du nicht?

Wie auch immer: der entscheidende Punkt ist, womit genau abgespielt 
werden soll. Daraus ergibt sich, an welche Infos man herankommen kann. 
Und daraus ergibt sich, was man wie in das Video als Schaltbefehl packt 
(oder ob man einfach eine sowieso bestehende Eigenschaft des Videos 
benutzt).

von Andi M. (andi_macht)


Lesenswert?

Erstmal vielen Dank für die Antworten, das geht genau in die Richtung 
die mir hilft! :) Das Video kann prinzipiell mit allem abgespielt 
werden, ich muss es nur per HDMI vollformatig herrausschicken können.

Mit Processing: Klingt sehr gut! Der Usecase wäre: Taste drücken, Video 
öffnet sich vollformatig auf dem HDMI Ausgang und nach genau x Sekunden 
Spielzeit sendet Processing dann den Trigger auf der COM raus. Wäre 
sowas möglich?

Mit ffplay und Untertitel: Klingt ebenfalls gut! Ich komm nur mit der 
Doku nicht dahinter, ob der Untertitel auf der Console ausgegeben werden 
kann.. Seh ichs nur nicht, oder geht das leider nicht? :/

Viele Grüße,
Andi

: Bearbeitet durch User
von Dergute W. (derguteweka)


Lesenswert?

Moin,

Frueher, als noch mehr Lametta war, war sowas prinzipiell einfacher. 
Heute, wo weniger Lametta aber dafuer viel mehr Audio/Videokompression 
ist, ist's etwas komplexer geworden.
So klassische Sachen, wie SMPTE-VITC oder -LTC werden ueblicherweise 
nicht durch gaengige codecs mitkomprimiert, d.h. die sind dann einfach 
mal weg und der Decoder kann sie nicht mehr wieder dazuzaubern. Dafuer 
kann man in den ueblichen Containerformaten aber auch Daten ausser 
Audio/Video uebertragen, also z.b. auch Zeitinformationen.
Wird also entscheidend sein, was du genau an AV-Material vorliegen hast 
und wie du das genau abspielen willst.

Gruss
WK

von Christian M. (christian_m280)


Lesenswert?

Die Funktion "MovieStatus()" in der Bibliothek "Movie" von PureBasic 
gibt die Framenummer zurück. Die serielle Schnittstelle kannst Du dann 
gleich auch ansprechen.

Gruss Chregu

von Εrnst B. (ernst)


Lesenswert?

Andi M. schrieb:
> Mit Processing: Klingt sehr gut! Der Usecase wäre: Taste drücken, Video
> öffnet sich vollformatig auf dem HDMI Ausgang und nach genau x Sekunden
> Spielzeit sendet Processing dann den Trigger auf der COM raus. Wäre
> sowas möglich?

Ja. Genau für Sowas ist Processing gemacht.

Mach ein "Serial"-Objekt auf, mit port.available()/port.read() liest du 
von deinen COM, wenn das "Start"-Signal kommt: "movie.play()"
(Falls der Start-Tastendruck auch über die Serielle kommt, ansonsten 
kannst du natürlich auch auf das Computer-Keyboard zugreifen.)

https://processing.org/reference/libraries/serial/index.html

Die "movie.time()"-Methode gibt den aktuell abgespielten Zeitpunkt 
zurück, in Sekunden als Float. Beim Überschreiten des gewünschten 
Zeitpunkts schickst du mit port.write("X") deinen Trigger.

Wenn das ganze sowieso auf einem Raspi läuft: Du kannst in Processing 
auch direkt auf dessen GPIOs zugreifen.

https://processing.org/reference/libraries/io/GPIO.html

Wer Ähnlichkeiten zur Arduino-API entdeckt: Ja, da ist wohl ein Projekt 
vom anderen inspiriert worden.

: Bearbeitet durch User
von Purzel H. (hacky)


Lesenswert?

Timecode wird auf einer Tonspur als Bitgezappel aufgezeichnet. Ist auf 
dem Internet dokumentiert. Vorwaerts hoert es sich anders an wie 
rueckwaerts.  Es aendern sich nur wenige Bits von Frame zu Frame.
Beginne bei
https://en.wikipedia.org/wiki/SMPTE_timecode
https://en.wikipedia.org/wiki/Timecode

von Andre (Gast)


Lesenswert?

Andi M. schrieb:
> Zielhardware

Existiert die schon?
Falls nicht, schau dich auch im professionelleren Bereich um. Da gibt es 
Videoplayer, die z.B. für Ausstellungen oder Live Performance genau 
solche Ausgänge und Fernsteuer-Funktionen bieten.

Erstbester Treffer: 
https://www.thomann.de/de/blackmagic_design_hyperdeck_studio_hd_mini.htm

von Wolfgang (Gast)


Lesenswert?

Andi M. schrieb:
> Der erste Versuch, dafür die Tonspur zu nutzen war nur mit mäßigem
> Erfolg verbunden.

Dann könntest du das noch verfeinern.
Schon vor 40 Jahren hat das funktioniert, im den/die Projektor(en) bei 
automatischen Live-Dia Shows zu steuern.
MVF wäre eine Möglichkeit, um den Erfolg zu steigern.

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.