Crie um vídeo com 5 imagens com efeito fadeIn / out no ffmpeg

19

Com 5 imagens eu tenho que criar um vídeo de 60 segundos no ffmpeg, cada imagem tem que ser exibida por 15 segundos. depois de 15 segundos, a primeira imagem tem que desvanecer e a segunda imagem tem que desaparecer, depois que a segunda imagem tem que desvanecer, a terceira imagem tem que desaparecer ... etc. Por favor me guie como posso conseguir isso usando comandos ffmpeg.

    
por user384847 29.10.2014 / 13:16

2 respostas

40

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

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

Usarmeltda MLT Multimedia Framework pode ser mais fácil para essa tarefa:

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, como melt -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.

por 31.10.2014 / 00:09
1

Eu escrevi um script bash geral que leva em um caminho para uma pasta de imagens , e gera um vídeo de crossfade com ffmpeg:

link

O script essencialmente observa as imagens em uma pasta e imprime um comando que é semelhante à resposta de @LordNeckbeard acima e executa o comando. Este script ajuda quando você tem muitas imagens em uma pasta e não quer digitar manualmente um comando longo deprimente.

    
por 01.05.2016 / 07:34