FFmpeg Como posso usar o último quadro do zoompan para um crossfade

3

O código que tenho funciona (sort-of). Para experimentar, introduza duas imagens de 640 * 480px.

Ou, veja um exemplo aqui: link

Você pode assistir a partir de 15 segundos para ver o problema.

Quando você tentar, verá que ele aumenta o zoom, depois desvanece * e mostra a segunda imagem.

* Aqui é onde ocorre o problema. Você notará que assim que o fade começa, o [crossfade] assume o controle. Como o [crossfade] usa a foto original e não o último quadro do zoompan, há um salto de volta para a imagem antes de ela ser ampliada (pelo menos é assim que eu a entendo).

Então, minha pergunta é: como posso usar o último quadro do zoompan (ou continuar o zoompan) para o fade.

Este é o código:

ffmpeg \
-loop 1 -i images/25_test/31630738_0.jpg \
-loop 1 -t 10 -i images/25_test/31630738_4.jpg \
-filter_complex \
"[0:v]trim=start=0:end=9,setpts=PTS-STARTPTS,scale=iw*10:ih*10,zoompan=z='min(max(zoom,pzoom)+0.0015,1.5)':d=1:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)':s=640x480[firstclip]; \
 [1:v]trim=start=1,setpts=PTS-STARTPTS,setsar=1/1[secondclip]; \
 [0:v]trim=start=9:end=10,setpts=PTS-STARTPTS[fadeoutsrc]; \
 [1:v]trim=start=0:end=1,setpts=PTS-STARTPTS[fadeinsrc]; \
 [fadeinsrc]format=pix_fmts=yuva420p,fade=t=in:st=0:d=1:alpha=1[fadein]; \
 [fadeoutsrc]format=pix_fmts=yuva420p,fade=t=out:st=0:d=1:alpha=1[fadeout]; \
 [fadein]fifo[fadeinfifo]; \
 [fadeout]fifo[fadeoutfifo]; \
 [fadeoutfifo][fadeinfifo]overlay[crossfade]; \
 [firstclip][crossfade][secondclip]concat=n=3[output]" \
-map [output] videos/output.mp4

Também há alguns problemas com o alinhamento e o tempo dos dados causados pelo zoompan, mas esses problemas podem estar em outro tópico de pergunta.

Obrigado!

    
por Justin Waulters 28.03.2017 / 04:09

1 resposta

2

Use

ffmpeg \
-i images/25_test/31630738_0.jpg \
-loop 1 -i images/25_test/31630738_4.jpg \
-filter_complex \
"[0:v]format=yuva420p,scale=iw*10:ih*10,zoompan=z='min(zoom+0.0015,1.5)':d=250:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)':s=640x480[first]; \
 [1:v]format=yuva420p,fade=t=in:st=0:d=1:alpha=1,trim=0:10,setpts=PTS+9/TB[second]; \
 [first][second]overlay" out.mp4

O zoompan continua no crossfade. O yuva420p para a primeira imagem não é realmente de fato; adicionado apenas para melhorar a velocidade (um pouco).

O comando acima funciona para mim como está, mas, conforme os comentários, é possível adicionar fifo aos filterchains para evitar quedas de quadros com processadores lentos ou imagens muito grandes.

[0:v]format=yuva420p,scale=iw*10:ih*10,zoompan=z='min(zoom+0.0015,1.5)':d=250:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)':s=640x480,fifo[first]; \
[1:v]format=yuva420p,fade=t=in:st=0:d=1:alpha=1,trim=0:10,setpts=PTS+9/TB,fifo[second]; 
    
por 28.03.2017 / 10:50

Tags