Crossfading Video AND Audio com ffmpeg

3

Essa super-resposta do crossfade entre dois vídeos usando o ffmpeg me pegou até agora, mas agora que tentei muitas soluções e vi todos os links SO, é hora de pedir ajuda a todos.

Estou tentando crossfade 2 vídeos com 10 segundos cada em formato ts com áudio e vídeo ao mesmo tempo.

Os passos são:

  1. Adicionar tela preta de filtro complexo
  2. Diminuir o vídeo 1 após 9 segundos, com 1 segundo de duração do desvanecimento
  3. Fade no vídeo 2 em 9 segundos, com 1 segundo de duração do desvanecimento
  4. Corte a saída do filtro preto para 19 segundos

Isso funciona bem apenas para vídeo, mas quando tento adicionar áudio, não consigo passar por essa mensagem de erro:

Output pad "default" with type audio of the filter instance "Parsed_asetpts_4" of asetpts not connected to any destination

Parece que não estou conectando a saída de áudio corretamente. Eu acho que preciso alterar as [over] linhas para incluir áudio. Mas como faço isso?

'ffmpeg -i vid1.ts -i vid2.ts -f lavfi -i color=black -filter_complex \
"[0:v]format=pix_fmts=yuva420p,\
fade=t=out:st=9:d=1:alpha=1,setpts=PTS-STARTPTS[v0];\
[0:a]\
afade=t=out:st=9:d=1,asetpts=PTS-STARTPTS[a0];\
[1:v]format=pix_fmts=yuva420p,\
fade=t=in:st=0:d=1:alpha=1,setpts=PTS-STARTPTS+9/TB[v1];\
[1:a]\
afade=t=in:st=0:d=1,asetpts=PTS-STARTPTS+9/TB[a1];\
[a0][a1]amix=inputs=2;\ 
[2:v]scale=720x406,trim=duration=19[over];\
[over][v0]overlay[over1];\
[over1][v1]overlay=format=yuv420[outv]" -vcodec libx264 -y -map [outv] final.ts'
    
por Jonathan_W 21.02.2015 / 16:09

2 respostas

6

Isso fará o áudio e o vídeo:

ffmpeg -i segment1.mp4 -i segment2.mp4 -an \
-filter_complex \
"   [0:v]trim=start=0:end=9,setpts=PTS-STARTPTS[firstclip];
    [1:v]trim=start=1,setpts=PTS-STARTPTS[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];
    [0:a][1:a] acrossfade=d=1 [audio]
" \
-map "[output]" -map "[audio]" result.mp4

Isso é basicamente o mesmo que esta resposta , que no entanto cobre apenas o vídeo. DO checkout a resposta, porque é fantasticamente explicado .

Espero que eles adicionem um filtro vcrossfade no futuro ...!

    
por 15.12.2015 / 06:52
1

Faça isso: isso é para desbotar cruzado com dois vídeos

ffmpeg -i big_buck.mp4 -i big_buck.mp4 -an -filter_complex "
[0:v]trim=start=0:end=4,setpts=PTS-STARTPTS[firstclip];  
[1:v]trim=start=1,setpts=PTS-STARTPTS[secondclip]; 
[0:v]trim=start=4:end=5,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]; [0:a][1:a] acrossfade=d=1 [audio]" -map "
[output]" -map "[audio]" result.mp4 -y

funciona apenas para dois vídeos

    
por 14.06.2016 / 12:37