![Wie kann ich mit FFmpeg einem Live-Video einen Ticker/variierenden Text hinzufügen?](https://rvso.com/image/1366209/Wie%20kann%20ich%20mit%20FFmpeg%20einem%20Live-Video%20einen%20Ticker%2Fvariierenden%20Text%20hinzuf%C3%BCgen%3F.png)
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 drawtext
Filters(aus libavfilter/vf_drawtext.c
dem Quellbaum) scheint es einen textfile
Parameter zu geben, der einen Pfad zu einer Datei angeben kann, die die zu zeichnende Zeichenfolge enthält (im Gegensatz zum Festlegen des text
Parameters wie in Ihrem Beispiel). Sie können damit experimentieren, ihm einen Dateipfad als zu übergeben textfile
und 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 drawtext
Filter 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 textfile
Parameter 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.