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

2

Eu sou capaz de adicionar texto a um vídeo no meu disco rígido, antes que eu o marque ... por 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árias instâncias de tempo. Deve ser lido de um arquivo que tem o formato do formato: Por exemplo

00:00:10 : google
00:00:20 : yahoo
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 ticker ao vivo em um vídeo antes transmitindo isso.

    
por user763410 08.06.2013 / 21:32

1 resposta

1

De o código-fonte do filtro drawtext (de libavfilter/vf_drawtext.c na árvore de origem), parece haver um parâmetro textfile que pode especificar um caminho para um arquivo que contém a string a ser desenhada (em vez de definir o parâmetro text como em seu exemplo). Você pode querer 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 supondo que você pudesse sincronizá-lo com o relógio do sistema.

Alternativamente, você pode modificar o próprio filtro drawtext para exibir uma string específica baseada no timecode atual (que é disponível para filtros FFmpeg). Enquanto isso exigiria modificar o código fonte do filtro e recompilar do zero, ele 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 tentasse desenhar uma string).

No entanto, assumindo que o parâmetro textfile funcione (leia: é atualizado em cada quadro), provavelmente seria um método melhor, pois um daemon simples para atualizar o arquivo de texto poderia ser escrito em uma linguagem de script como o Python.

    
por 09.06.2013 / 07:45