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.png
no base.mov
canto 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 20
parâ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.