![Como posso usar o FFmpeg para adicionar um ticker/texto variável ao vídeo ao vivo?](https://rvso.com/image/1366209/Como%20posso%20usar%20o%20FFmpeg%20para%20adicionar%20um%20ticker%2Ftexto%20vari%C3%A1vel%20ao%20v%C3%ADdeo%20ao%20vivo%3F.png)
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 drawtext
filtro( libavfilter/vf_drawtext.c
na árvore de origem), parece haver um textfile
parâmetro que pode especificar um caminho para um arquivo que contém a string a ser desenhada (em vez de definir o text
parâmetro como no seu exemplo). Você pode experimentar passar um caminho de arquivo como textfile
e 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 drawtext
pró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 textfile
parâ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.