Crie uma marca d'água em uma faixa separada com FFmpeg

Crie uma marca d'água em uma faixa separada com FFmpeg

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

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

ffmpeg -i base.mov -i logo.png -map 0 -map 1 output.mov

Responder1

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

Não tenho certeza se você pode adicionar uma marca d'água transparente a uma faixa separada. A razão é que a própria imagem (o "stream" 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 neste estágio, você não obterá uma imagem transparente .


O seguinte será adicionado logo.pngno base.movcanto superior direito. Você pode usar os seguintes parâmetros para determinar a posição – no meu exemplo, apenas coloquei a dez pixels de distância da borda:

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

O comando de 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 -c:v libx264 -crf 20parâmetros 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 postagem de blog bastante boa sobre esse assunto aqui:Como colocar marca d'água em um vídeo usando FFmpeg. Entra em detalhes de posicionamento.

informação relacionada