ffmpeg não aplica marca d'água no primeiro quadro gerado (o wm é aplicado em todos os outros quadros)

2

Estou gerando um monte de jpgs de um filme e quero que a marca d'água seja aplicada a todos os jpgs. Isso funciona bem para todos os quadros, mas o primeiro, e não consigo descobrir o porquê.

Este é o comando que eu uso

ffmpeg -vframes 16 -ss 00:00:01 -i a.mov -t 00:00:17 -r 1 -s 1280x720 -vf "movie=watermark.png,scale=1280:720 [wm];[in][wm] overlay=0:0 [out]" '/tmp/output%d.jpg'

que me fornecerá esses arquivos:

output1.jpg
output2.jpg
output3.jpg
output4.jpg
output5.jpg
output6.jpg
output7.jpg
output8.jpg
output9.jpg
output10.jpg

onde todos eles BUT output1.jpg tem marca d'água aplicada.

Não consigo entender por que o ffmpeg não aplica a marca d'água no primeiro.

Estou usando o ffmpeg 1.2 no debian

    
por JohnSmith 03.07.2013 / 20:53

1 resposta

2

Se você usar -ss antes de -i , ele procurará um quadro-chave. Isso é rápido, mas se não houver um quadro-chave no tempo especificado, ele não terá precisão de quadro e você pode acabar com alguns quadros antes do tempo de pesquisa, o que efetivamente terá carimbos de data e hora negativos. Como sua sobreposição de filme de marca d'água começa no horário 0, os quadros com carimbos de data e hora negativos não terão marca d'água.

Se você mover a opção -ss após o arquivo de entrada, isso é mais lento porque deve processar e descartar todos os quadros até esse ponto, mas procurará o registro de data e hora exato que você especificar e não o deixará com quadros antes do tempo especificado.

Outra opção é manter a busca rápida baseada em quadro-chave e, em seguida, usar o filtro select para eliminar quadros indesejáveis. Por exemplo:

ffmpeg -ss 00:00:01 -i a.mov -t 00:00:17 -r 1 -s 1280x720 -vf "[in] select=gte(t\,0) [sel];movie=watermark.png,scale=1280:720 [wm];[sel][wm] overlay=0:0 [out]" '/tmp/output%d.jpg'
    
por 03.07.2013 / 23:14