Crossfading Video Y Audio con ffmpeg

3

Esta respuesta de superusuario Crossfade entre 2 videos utilizando ffmpeg me ha llegado tan lejos, pero ahora que he probado muchas soluciones y he visto todos los enlaces SO, es hora de pedirles ayuda a todos.

Estoy tratando de fundir 2 videos de 10 segundos cada uno en formato ts con audio y video al mismo tiempo.

Los pasos son:

  1. Añadir filtro complejo pantalla negro
  2. Fade out video 1 después de 9 segundos, con 1 segundo de duración de fade
  3. Se desvanece en el video 2 a 9 segundos, con 1 segundo de duración de fundido
  4. Recortar la salida del filtro negro a 19 segundos.

Esto funciona bien solo para video solo, pero cuando intento agregar audio, no puedo pasar este mensaje de error:

Teclado de salida "predeterminado" con tipo de audio de la instancia de filtro "Parsed_asetpts_4" de asetpts no conectados a ningún destino

Parece que no estoy conectando la salida de audio correctamente. Creo que necesito alterar las líneas [sobre] para incluir audio. Pero, ¿cómo hago esto?

`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`
Jonathan_W
fuente
Debe incluir la salida de consola completa que aparece después de que se complete su comando.
llogan
Funciona bien aquí.
Timothy Gu

Respuestas:

6

Esto hará tanto audio como video:

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

Esto es básicamente lo mismo que esta respuesta , que sin embargo solo cubre el video. Verifique la respuesta, porque es fantásticamente explicado .

Esperemos que añadan un vcrossfade Filtrar en el futuro ...!

Merc
fuente
2
(Probablemente demasiado tarde, pero bueno para la posteridad ...)
Merc
1

Haz esto: Esto es para cross fade con dos videos.

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 solo para dos videos

Harsh Bhavsar
fuente