Adicionar uma sobreposição de imagem na frente do vídeo usando ffmpeg


31

Eu tenho muitos vídeos e preciso colocar uma imagem na frente deles por cerca de 5 segundos, mas adicioná-la manualmente e renderizá-la a cada vez levaria muito tempo, por isso estou perguntando se é possível fazê-lo via ffmpeg e se você poderia, por favor, me ajudar com isso, já que não tenho experiência com o ffmpeg. Eu já encontrei alguns comandos, mas nenhum deles funcionou. Este por exemplo.

ffmpeg -itsoffset 5 -i in.mp4 -r 25 -loop 1 -i intro.png -filter_complex "[1:v] fade=out:125:25:alpha=1 [intro]; [0:v][intro] overlay [v]" -map "[v]" -map 0:a -acodec copy out.mp4

1
Você acabou de copiar esse comando ou escreveu de acordo com suas necessidades? Estou perguntando porque esse comando envolve coisas como um desvanecimento e todos os tipos de outras coisas não abordadas na sua pergunta. Você só precisa sobrepor uma imagem ou precisa mais do que isso?
PTS

Copiei de algum lugar, tudo o que preciso é apenas colocar a imagem na frente do vídeo.
Azthy

Respostas:


44

Você pode fazer uma sobreposição de imagem simples usando a seguinte sintaxe:

ffmpeg -i input.mp4 -i image.png \
-filter_complex "[0:v][1:v] overlay=25:25:enable='between(t,0,20)'" \
-pix_fmt yuv420p -c:a copy \
output.mp4

overlay=25:25 significa que queremos posicionar a imagem 25px para a direita e 25px para baixo, originando no canto superior esquerdo (0: 0).

enable='between(t,0,20)' significa que queremos que a imagem seja exibida entre os segundos 0 e 20.

[0:v][1:v]significa que queremos que o primeiro arquivo de vídeo com o qual importamos -i, no nosso caso, input.mp4 ou como o ffmpeg o veja número de arquivo de entrada de vídeo 0, esteja no arquivo de entrada de vídeo 1, no nosso caso image.png. :vsignifica apenas que queremos o vídeo 0 e o vídeo 1. [0:a]significa que queremos a primeira faixa de áudio importada. Que também viria de input.mp4, mas apontaria para a trilha de áudio em vez da trilha de vídeo no arquivo mp4.

Se você deseja uma determinada qualidade / configurações de imagem e não as configurações escolhidas pelo ffmpeg, adicione as opções de codificação de imagem e / ou áudio que deseja usar. O codificador de vídeo padrão será x264. Verifique o guia de codificação H.264 para possíveis configurações.

O -acodec copy/ -c:a copyque você possui em seu comando fe simplesmente reutilizaria o áudio do arquivo de origem. Embora você não possa fazer isso com o vídeo, é claro (neste caso), isso deve ser transcodificado porque estamos criando uma nova fonte de vídeo.

Se você deseja transcodificar o áudio, remova a -c:a copypeça. Pode ser necessário especificar explicitamente um codificador, por exemplo -c:a aac -strict experimental. Consulte o guia de codificação AAC para obter mais informações.


A seguinte iteração do comando acima funcionou para mim no Android, pois o original fornece e erro como aac é um recurso experimental: ffmpeg -i input.mp4 strict -2 -i image.png -filter_complex [0: v] [1: v] overlay = 25: 25: enable = 'entre (t, 0,20)' output.mp4
muneikh

existe alguma maneira de posicionar na parte inferior sem saber a altura? ou extrema direita sem saber a largura?
Chovy

claro, basta analisar o vídeo com ffprobe e extrair as dimensões do vídeo da saída. Talvez haja também uma opção integrada no ffmpeg, mas não estou ciente disso.
PTS

3
Seu comando substitui um fragmento do arquivo de vídeo original, mas um usuário pode querer adicionar (aumentando assim a duração do vídeo) uma imagem antes e / ou depois do vídeo. Por favor, ajuda com isso
Porton

1
@ laurent que depende do seu arquivo de origem e / ou saída. pix_fmt significa formato de pixel. Existem muitos formatos de pixel diferentes disponíveis para codecs diferentes, especificando um para garantir que você não termine com algo que não funcione para você. O yuv420p é o formato de pixel mais suportado no h264, mas também há o yuv422p e o yuv444p, por exemplo.
PTS
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.