Cria uma marca d'água em uma trilha separada com o FFmpeg

1

Eu tenho um arquivo PNG (alfa) e um arquivo de vídeo. Eu quero criar um vídeo em que a primeira faixa é a imagem e a segunda faixa é o vídeo (PNG sobre vídeo). O problema é que o PNG não preserva a transparência.

Eu preciso criar uma marca d'água (PNG) em uma trilha separada com o ffmpeg em uma trilha de vídeo.

ffmpeg -i base.mov -i logo.png -map 0 -map 1 output.mov
    
por tostaky 29.05.2012 / 13:09

1 resposta

3

A sintaxe para adicionar uma marca d'água é um pouco diferente. Você precisa de filtros de vídeo para isso, que já vem com o FFmpeg.

Não sei se você pode adicionar uma marca d'água transparente a uma faixa separada. O motivo é que a própria imagem (o "fluxo" de PNG) precisa ser transformada em uma trilha de vídeo real (por exemplo, com x264) - e como os codificadores de vídeo não suportam transparência nesse estágio, você não obterá uma imagem transparente .

A seguir, você adicionará logo.png a base.mov no canto superior direito. Você pode usar os seguintes parâmetros para determinar a posição - no meu exemplo, coloquei apenas dez pixels de distância da borda:

  • main_w (largura do vídeo principal)
  • main_h (altura do vídeo principal)
  • overlay_w (largura do vídeo de sobreposição)
  • overlay_h (overlay video hieght)

O comando do filtro seria então:

movie='logo.png' [logo]; [in][logo] overlay=main_w-overlay_w-10:10 [out]

Transformando isso em um comando FFmpeg completo:

ffmpeg -i base.mov -vf "movie='logo.png' [logo]; [in][logo] overlay=main_w-overlay_w-10:10 [out]" -c:v libx264 -crf 20 out.mov

Os parâmetros -c:v libx264 -crf 20 determinam o codec de vídeo de saída e sua qualidade (onde o CRF provavelmente será de 19 a 24, dependendo da qualidade desejada; quanto menor melhor).

Há uma boa postagem no blog sobre esse assunto aqui: Como para marcar um vídeo usando FFmpeg . Ele entra em detalhes de posicionamento.

    
por 29.05.2012 / 13:21