4 votes

Crossfading Vidéo ET Audio avec ffmpeg

Cette réponse de Super Utilisateur crossfade entre 2 vidéos en utilisant ffmpeg m'a amené jusqu'ici, mais maintenant que j'ai essayé de nombreuses solutions et vu tous les liens SO disponibles, il est temps de vous demander de l'aide.

Je tente de faire un fondu enchaîné entre 2 vidéos qui durent chacune 10 secondes en format ts avec audio et vidéo en même temps.

Les étapes sont :

  1. Ajouter un filtre complexe écran noir
  2. Faire disparaître la vidéo 1 après 9 secondes, avec une durée de fondu de 1 seconde
  3. Faire apparaître la vidéo 2 à 9 secondes, avec une durée de fondu de 1 seconde
  4. Rogner la sortie du filtre noir à 19 secondes

Cela fonctionne bien pour la vidéo seule, mais lorsque j'essaie d'ajouter de l'audio, je n'arrive pas à dépasser ce message d'erreur :

Le tampon de sortie "default" avec le type audio de l'instance du filtre "Parsed_asetpts_4" de asetpts n'est connecté à aucune destination

Il semble que je ne connecte pas correctement la sortie audio. Je pense que je dois modifier les lignes [over] pour inclure l'audio. Mais comment puis-je faire cela ?

`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`

0 votes

Vous devriez inclure la sortie complète de la console qui apparaît après que votre commande est terminée.

0 votes

Tout fonctionne bien ici.

0 votes

7voto

Merc Points 206

Cela fera à la fois de l'audio et de la vidéo :

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

C'est essentiellement la même chose que cette réponse, qui ne couvre cependant que la vidéo. Allez voir la réponse, car elle est fantastiquement expliquée.

En espérant qu'ils ajouteront un filtre vcrossfade à l'avenir...!

2 votes

(Probablement trop tard, mais bon pour la postérité...)

1voto

Harsh Bhavsar Points 111

Faites ceci : Cela est pour un fondu enchaîné avec deux vidéos

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

cela fonctionne uniquement pour deux vidéos

1 votes

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X