Dip to black
Exemplobásico
Exemploemquecadaimageméexibidapor5segundosecadaumatemumdesvanecimentoquedura1segundo.Cadaentradadeimagemtemamesmalargura,alturaeproporçãodeamostra.Seelesvariamdetamanho,consulteoexemplo#3.
ffmpeg\-loop1-t5-iinput0.png\-loop1-t5-iinput1.png\-loop1-t5-iinput2.png\-loop1-t5-iinput3.png\-loop1-t5-iinput4.png\-filter_complex\"[0:v]fade=t=out:st=4:d=1[v0]; \
[1:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v1]; \
[2:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v2]; \
[3:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v3]; \
[4:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v4]; \
[v0][v1][v2][v3][v4]concat=n=5:v=1:a=0,format=yuv420p[v]" -map "[v]" out.mp4
Com áudio
O mesmo que acima, mas com áudio:
ffmpeg \
-loop 1 -t 5 -i input0.png \
-loop 1 -t 5 -i input1.png \
-loop 1 -t 5 -i input2.png \
-loop 1 -t 5 -i input3.png \
-loop 1 -t 5 -i input4.png \
-i audio.m4a \
-filter_complex \
"[0:v]fade=t=out:st=4:d=1[v0]; \
[1:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v1]; \
[2:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v2]; \
[3:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v3]; \
[4:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v4]; \
[v0][v1][v2][v3][v4]concat=n=5:v=1:a=0,format=yuv420p[v]" -map "[v]" -map 5:a -shortest out.mp4
Para imagens de entrada com tamanhos variados ou arbitrários
Como o primeiro exemplo, mas com imagens de entrada que variam em largura x altura. Eles serão acolchoados para caber dentro de uma caixa de 1280x720:
ffmpeg \
-loop 1 -t 5 -i input0.png \
-loop 1 -t 5 -i input1.png \
-loop 1 -t 5 -i input2.png \
-loop 1 -t 5 -i input3.png \
-loop 1 -t 5 -i input4.png \
-filter_complex \
"[0:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,fade=t=out:st=4:d=1[v0]; \
[1:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v1]; \
[2:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v2]; \
[3:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v3]; \
[4:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v4]; \
[v0][v1][v2][v3][v4]concat=n=5:v=1:a=0,format=yuv420p[v]" -map "[v]" out.mp4
- Veja os exemplos em Como redimensionar vídeos para caber no player de tamanho estático se você quiser cortar (preencha a tela) de pad (letterbox / pillarbox), ou se você quiser evitar upscaling.
Opções e filtros usados:
-
-t
para definir a duração em segundos de cada entrada. -
scale
com pad para ajustar as imagens de entrada em um tamanho uniforme e específico (usado no exemplo # 3). -
fade
desaparecer e desaparecer.d
é a duração do fade.st
é quando é iniciado. -
concat
para concatenar (ou "unir") cada imagem. -
format
a saída de um esquema subsampling chroma que seja compatível com os jogadores não FFmpeg baseados se codificar com libx264 (o codificador padrão para a saída MP4, se for suportado por sua compilação).
Crossfade
Usarmelt
da
melt -verbose \
-profile atsc_720p_25 \
001.png out=50 \
002.png out=75 -mix 25 -mixer luma \
003.png out=75 -mix 25 -mixer luma \
004.png out=75 -mix 25 -mixer luma \
005.png out=75 -mix 25 -mixer luma \
-consumer avformat:output.mp4 vcodec=libx264 an=1
-
Use um perfil adequado aos seus arquivos de entrada. Você pode listar perfis com
melt -query profiles
e obter informações sobre um perfil específico, comomelt -query "profile=atsc_720p_25"
. -
out
define a duração de cada imagem. O valor está em quadros. Este exemplo está usando um perfil que define uma taxa de quadros de 25, então 25 quadros são iguais a 1 segundo. -
mix
define a duração do fade. O valor está nos quadros. -
mixer
define o tipo de mixagem. -
Veja a Documentação do MLT e Melt Documentation para mais informações.