Para ingressar com clipes com crossfades - você precisa cuidar de duas coisas - aplicar o fade no momento correto e do tipo correto e atrasar os timestamps de vídeo para que cada vídeo comece no momento correto dentro da montagem final .
Nesse caso, seu primeiro vídeo é de 20s, seu segundo vídeo é de 40s e você deseja um crossfade de 2s. Ao executar crossfades usando o filtro de sobreposição, só precisamos aplicar fade-ins para o vídeo de entrada. Aplicar um fade-out ao vídeo de saída produzirá um mergulho de luminância - às vezes desejável, mas evito-o.
Primeiramente, aplicamos um fade 2s em no início do segundo vídeo.
[1]format=yuva444p,fade=t=in:st=0:d=2:alpha=1,setpts=PTS-STARTPTS+18/TB[va1];
Como o fade é aplicado apenas ao canal alfa, o vídeo precisa ter um canal alfa. Normalmente, os vídeos não, portanto, um filtro de conversão de formato de pixel é aplicado antes do fade para alterar o formato de pixel do segundo vídeo para um que tenha alfa - anote o a
in yuva444p
. Um desvanecimento do tipo in
é aplicado a partir do momento 0
e da duração 2s
ao canal alfa apenas ou seja, os pixels coloridos do vídeo não são afetados.
Agora o segundo vídeo deve ser atrasado. Como o primeiro vídeo tem 20 segundos de duração e um crossfade 2s é desejado, o segundo vídeo deve começar aos 18 anos dentro da montagem. Então o filtro setpts é aplicado
setpts=PTS-STARTPTS+18/TB
O TB se refere à base de tempo e é a unidade na qual os registros de data e hora são armazenados para um fluxo.
Para crossfades de áudio, há um filtro de entrada rápida
[0][1]acrossfade=d=2
Isso define um crossfade de 2 segundos.
Agora podemos montar os dois clipes
ffmpeg -i *clip1.mp4 -i *clip2.mp4 \
-filter_complex \
"[1]format=yuva444p,fade=t=in:st=0:d=2:alpha=1,setpts=PTS-STARTPTS+18/TB[va1]; \
[0][va1]overlay[outv];[0][1]acrossfade=d=2[outa]" \
-map [outv] -map "[outa]" -crf 10 out.mp4