Como posso usar o FFmpeg para adicionar um ticker/texto variável ao vídeo ao vivo?

Como posso usar o FFmpeg para adicionar um ticker/texto variável ao vídeo ao vivo?

Consigo adicionar texto a um vídeo no meu disco rígido, antes de transmiti-lo... usando o 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

Agora, quero adicionar textos diferentes em vários momentos. Deve ser lido a partir de um arquivo que tenha o formato: Por exemplo

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

Existe uma maneira de fazer o ffmpeg ler o arquivo e adicionar texto em horários especificados? Eventualmente, gostaria de adicionar um símbolo de live ticker a um vídeo antes de transmiti-lo.

Responder1

Deo código fonte do drawtextfiltro( libavfilter/vf_drawtext.cna árvore de origem), parece haver um textfileparâmetro que pode especificar um caminho para um arquivo que contém a string a ser desenhada (em vez de definir o textparâmetro como no seu exemplo). Você pode experimentar passar um caminho de arquivo como textfilee atualizar o arquivo enquanto visualiza a saída de vídeo.

Você também precisaria de outro programa/daemon rodando em paralelo para atualizar o arquivo (que conteria apenas o texto atual a ser exibido), mas este programa seria bastante trivial, assumindo que você pudesse sincronizá-lo com o relógio do sistema.


Alternativamente, você pode modificar o drawtextpróprio filtro para exibir uma string específica com base no timecode atual (queédisponível para filtros FFmpeg). Embora isso exija a modificação do código-fonte do filtro e a recompilação do zero, também evitaria o uso de um programa/daemon separado rodando em paralelo (já que seu próprio código seria invocado sempre que o FFmpeg tenta desenhar uma string).

No entanto, supondo que o textfileparâmetro funcione (leia-se: é atualizado a cada quadro), esse provavelmente seria um método melhor, já que um daemon simples para atualizar o arquivo de texto poderia ser escrito em uma linguagem de script como Python.

informação relacionada