Quero usar o FFmpeg para adicionar uma marca d'água, mas quero que o vídeo tenha a mesma qualidade. Como faço isso?
Tentei usar -vcodec copy -acodec copy
mas estava sem marca d'água:
ffmpeg -y -i treino.mp4 -vf "movie=logo.png [watermark]; [in][watermark] overlay=10:main_h-overlay_h-10 [out]" -vcodec copy -acodec copy video2.mp4
Responder1
Você está usando um filtro e a filtragem requer recodificação, então você não pode usar -vcodec copy
paracópia do fluxoo vídeo. Se você deseja a "mesma qualidade", precisará usar um codificador sem perdas:
ffmpeg -i video.mp4 -i image.png -filter_complex overlay -c:v libx264 -crf 0 -c:a copy -movflags +faststart output.mp4
O arquivo resultante pode ser enorme: isso é esperado para saídas sem perdas.
Seu player ou dispositivo pode não conseguir reproduzir o arquivo sem perdas.
Se você deseja uma saída "visualmente sem perdas", que não é tecnicamente sem perdas, mas parece quase isso, use em
-crf 18
vez de-crf 0
.Não há necessidade defilmefiltro de origem. Basta adicionar sua imagem de sobreposição como entrada, como qualquer outro arquivo, conforme mostrado no meu exemplo.
Como você está usando PHP, presumo que você apresentará os vídeos por meio de download progressivo. Adicione
-movflags +faststart
para que possa iniciar a reprodução antes que o download do arquivo seja completo.