Wie kann ich mit FFmpeg einem Live-Video einen Ticker/variierenden Text hinzufügen?

Wie kann ich mit FFmpeg einem Live-Video einen Ticker/variierenden Text hinzufügen?

Ich kann einem Video auf meiner Festplatte Text hinzufügen, bevor ich es übertrage ... mithilfe des Befehls.

ffmpeg -y -i IMG_0696.MOV -acodec libmp3lame -vcodec msmpeg4 \
-b:a 192k -b:v 1000k -ar 44100 \
-vf "drawtext=text=string1 string2 string3 string4 string5 string6 string7 :expansion=normal:fontfile=/Windows/Fonts/cambriai.ttf: y=0:x=h-(2*lh)-n: fontcolor=white: fontsize=40: box=1: boxcolor=0x00000000@1" \
-an IMG_0696.avi

Nun möchte ich zu verschiedenen Zeitpunkten verschiedene Texte hinzufügen. Diese sollen aus einer Datei im Format gelesen werden: Zum Beispiel

00:00:10 : Google
00:00:20 : Yahoo
00:00:30 : msft
.
.
.
00:00:60 : amzn
.
.
.
00:05:30 : java

Gibt es eine Möglichkeit, ffmpeg dazu zu bringen, die Datei zu lesen und zu bestimmten Zeiten Text hinzuzufügen? Schließlich möchte ich einem Video vor der Übertragung ein Live-Tickersymbol hinzufügen.

Antwort1

Ausder Quellcode des drawtextFilters(aus libavfilter/vf_drawtext.cdem Quellbaum) scheint es einen textfileParameter zu geben, der einen Pfad zu einer Datei angeben kann, die die zu zeichnende Zeichenfolge enthält (im Gegensatz zum Festlegen des textParameters wie in Ihrem Beispiel). Sie können damit experimentieren, ihm einen Dateipfad als zu übergeben textfileund die Datei zu aktualisieren, während Sie die Videoausgabe anzeigen.

Sie würden außerdem ein weiteres parallel laufendes Programm/einen Daemon benötigen, um die Datei zu aktualisieren (die nur den aktuell anzuzeigenden Text enthalten würde), aber dieses Programm wäre ziemlich trivial, vorausgesetzt, Sie könnten es mit der Systemuhr synchronisieren.


Alternativ können Sie den drawtextFilter selbst so ändern, dass er eine bestimmte Zeichenfolge basierend auf dem aktuellen Zeitcode anzeigt (derIstfür FFmpeg-Filter verfügbar). Dies würde zwar eine Änderung des Quellcodes des Filters und eine Neukompilierung von Grund auf erfordern, würde aber auch die Verwendung eines separaten, parallel laufenden Programms/Daemons vermeiden (da Ihr eigener Code aufgerufen würde, wenn FFmpeg versucht, einen String zu zeichnen).

Vorausgesetzt jedoch, der textfileParameter funktioniert (sprich: wird mit jedem Frame aktualisiert), wäre das wahrscheinlich die bessere Methode, da ein einfacher Daemon zum Aktualisieren der Textdatei in einer Skriptsprache wie Python geschrieben werden könnte.

verwandte Informationen