![concatenando com crossfade vários vídeos (com áudio)](https://rvso.com/image/1568491/concatenando%20com%20crossfade%20v%C3%A1rios%20v%C3%ADdeos%20(com%20%C3%A1udio).png)
Tenho 7 videoclipes curtos, todos do mesmo tamanho, taxa de quadros, etc. Quero concatená-los um após o outro com crossfade de 2 segundos e não perder o áudio. Retirado de um post anterior aqui, tentei apenas concatenar/fazer crossfading dos dois primeiros usando:
ffmpeg -i *clip1.mp4 -i *clip2.mp4 \
-filter_complex "[0]fade=t=out:st=0:d=1:alpha=1,setpts=PTS-STARTPTS[va0]; \
[1]fade=t=in:st=0:d=1:alpha=1,setpts=PTS-STARTPTS[va1]; \
[va0][va1]overlay[outv];[0][1]amix[outa]" \
-map [outv] -map "[outa]" -crf 10 out.mp4
No entanto, isso produz um vídeo que desaparece imediatamente do primeiro vídeo e termina exatamente com a mesma duração do segundo vídeo (que tem 40 segundos). Presumo que isso seja por causa de "st = 0" no primeiro vídeo [0]. No entanto, se eu mudar isso para "st=18" (o primeiro vídeo tem 20 segundos de duração), o vídeo combinado resultante (out.mp4) ainda terá o primeiro vídeo desaparecendo imediatamente (e o vídeo inteiro ainda terá apenas 40 segundos de duração). de 58). No entanto, o áudio do primeiro agora dura 18 segundos (mas agora está sobrepondo o segundo vídeo e seu áudio por 18 segundos). Alguma sugestão do que tentar?
Responder1
Para unir clipes com crossfades - você precisa cuidar de duas coisas - aplicar o fade na hora correta e do tipo correto, e atrasar os timestamps do vídeo para que cada vídeo comece no horário correto na montagem final.
Nesse caso, seu primeiro vídeo tem 20 anos, seu segundo vídeo tem 40 anos e você quer um crossfade de 2 segundos. Ao executar crossfades usando o filtro de sobreposição, precisamos apenas aplicar fade-ins ao vídeo recebido. Aplicar um fade-out ao vídeo de saída produzirá uma queda na luminância - às vezes desejável, mas evito isso.
Então, primeiro, aplicamos um fade de 2semno 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 o fazem, 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 nota alfabética a
em yuva444p
. Um fade de tipo in
é aplicado começando no tempo 0
e na duração 2s
até ocanal alfaapenas ou seja, os pixels coloridos do vídeo não são afetados.
Agora o segundo vídeo deve ser adiado. Como o primeiro vídeo tem 20s de duração e é necessário um crossfade de 2s, o 2º vídeo deve começar aos 18s da montagem. Então o filtro setpts é aplicado
setpts=PTS-STARTPTS+18/TB
A TB refere-se aobase de tempo, e é a unidade na qual os carimbos de data/hora são armazenados para um fluxo.
Para crossfades de áudio, existe um filtro crossfade
[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