No código abaixo, estou adicionando vários filtros a cada imagem.
Para ilustrar o problema, eu removi o filtro drawbox
de [2:v]
.
Aqui está o vídeo do código abaixo: link
Você notará que a primeira transição é cortada em preto antes que a próxima imagem seja ativada. Em seguida, a segunda transição (da imagem 2 para a imagem 3) se desvanece. No entanto, se eu adicionar o filtro drawbox
novamente em [2:v]
, ele será cortado em preto e desaparecerá na segunda transição, assim como o primeiro.
Então, minha pergunta tem duas partes:
- Por que a caixa de transferência está quebrando o crossfade e fazendo com que um corte fique preto antes do desbotamento?
- Como posso colocar a caixa translúcida atrás do texto, mantendo o efeito de crossfade que é visto na segunda transição?
Aqui está o código:
ffmpeg \
-i images/25_test/31630738_0.jpg \
-i images/25_test/31630738_4.jpg \
-i images/25_test/31630738_6.jpg \
-i images/25_test/31630738_8.jpg \
-filter_complex \
"[0:v]format=yuva420p, \
scale=iw*10:ih*10, \
zoompan=z='min(zoom+0.0015,1.5)':d=500:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)':s=640x480, \
drawbox=y=0:[email protected]:width=iw:height=48:t=max, \
drawtext='fontfile=fonts/OpenSans-Bold.ttf':text='Front':fontcolor=white:fontsize=24:x=20:y=16, \
fifo \
[zoom_0]; \
[1: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, \
drawbox=y=0:[email protected]:width=iw:height=48:t=max, \
drawtext='fontfile=fonts/OpenSans-Bold.ttf':text='Kitchen':fontcolor=white:fontsize=24:x=20:y=16, \
fade=t=in:st=0:d=1:alpha=1, \
setpts=PTS+5/TB, \
fifo \
[zoom_1]; \
[2: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, \
drawtext='fontfile=fonts/OpenSans-Bold.ttf':text='Entrance':fontcolor=white:fontsize=24:x=20:y=16, \
fade=t=in:st=0:d=1:alpha=1, \
setpts=PTS+10/TB, \
fifo \
[zoom_2]; \
[3: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, \
drawbox=y=0:[email protected]:width=iw:height=48:t=max, \
drawtext='fontfile=fonts/OpenSans-Bold.ttf':text='Pool':fontcolor=white:fontsize=24:x=20:y=16, \
fade=t=in:st=0:d=1:alpha=1, \
setpts=PTS+15/TB, \
fifo \
[zoom_3]; \
[zoom_0][zoom_1]overlay=0:0:enable='between(t,5,15)'[overlay_0_1]; \
[overlay_0_1][zoom_2]overlay=0:0:enable='between(t,10,20)'[overlay_1_2]; \
[overlay_1_2][zoom_3]overlay=0:0:enable='between(t,15,25)' \
" videos/out.mp4
Abaixo está uma versão simplificada que ainda mostra o problema.
Para testar o código, insira imagens de 640x480.
Você verá o corte e depois desaparecerá.
Em seguida, remova os filtros drawbox
e você verá o crossfade como deveria aparecer.
ffmpeg \
-loop 1 -t 10 -i images/25_test/31630738_0.jpg \
-loop 1 -t 10 -i images/25_test/31630738_4.jpg \
-filter_complex \
"[0:v]format=yuva420p, \
drawbox=y=0:[email protected]:width=iw:height=48:t=max \
[zoom_0]; \
[1:v]format=yuva420p, \
drawbox=y=0:[email protected]:width=iw:height=48:t=max, \
fade=t=in:st=0:d=1:alpha=1, \
setpts=PTS+5/TB \
[zoom_1]; \
[zoom_0][zoom_1]overlay=0:0:enable='between(t,5,15)' \
" out.mp4
Deixe-me saber se você precisar de mais alguma informação.
Obrigado!