¿Cómo puedo usar FFmpeg para agregar un ticker/texto variable a un video en vivo?

¿Cómo puedo usar FFmpeg para agregar un ticker/texto variable a un video en vivo?

Puedo agregar texto a un video en mi disco duro, antes de transmitirlo... usando el comando.

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

Ahora, quiero agregar diferentes textos en distintos momentos. Debe leerse desde un archivo que tenga el formatoel formato: Por ejemplo

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

¿Hay alguna manera de hacer que ffmpeg lea el archivo y agregue texto en momentos específicos? Eventualmente, me gustaría agregar un símbolo de cotización en vivo a un video antes de transmitirlo.

Respuesta1

Deel código fuente del drawtextfiltro(desde libavfilter/vf_drawtext.cel árbol de origen), parece haber un textfileparámetro que puede especificar una ruta a un archivo que contiene la cadena a dibujar (en lugar de configurar el textparámetro como en su ejemplo). Es posible que desees experimentar pasándole una ruta de archivo como textfiley actualizando el archivo mientras visualizas la salida de vídeo.

También necesitaría otro programa/demonio ejecutándose en paralelo para actualizar el archivo (que solo contendría el texto actual que se mostrará), pero este programa sería bastante trivial suponiendo que pudiera sincronizarlo con el reloj del sistema.


Alternativamente, puede modificar el drawtextfiltro en sí para mostrar una cadena particular basada en el código de tiempo actual (queesdisponible para filtros FFmpeg). Si bien esto requeriría modificar el código fuente del filtro y volver a compilarlo desde cero, también evitaría el uso de un programa/demonio separado ejecutándose en paralelo (ya que su propio código sería invocado cada vez que FFmpeg intente dibujar una cadena).

Sin embargo, suponiendo que el textfileparámetro funcione (léase: se actualiza en cada fotograma), probablemente sería un mejor método, ya que un demonio simple para actualizar el archivo de texto podría escribirse en un lenguaje de secuencias de comandos como Python.

información relacionada