fondu enchaîné entre 2 vidéos avec ffmpeg

27

J'ai essayé d'obtenir une transition de fondu enchaîné entre 2 clips vidéo à l'aide de ffmpeg, mais j'ai échoué jusqu'à présent. Je suis nouveau sur ffmpeg et je me fie principalement à peaufiner ce que je peux trouver dans la documentation et les exemples existants en ligne. D'après ce que j'ai lu jusqu'à présent, l'utilisation du filtre de fusion ou de superposition devrait aider à réaliser ce que je recherche, mais je ne peux pas comprendre les détails de la ligne de commande pour le faire fonctionner.

Les filtres de fondu et de concaturation sont parfaits pour le fondu sortant de la vidéo 1, le fondu d'entrée vers la vidéo 2 et pour concaténer les transitions de type clip 2 en 1, mais j'apprécierais de l'aide pour obtenir une commande pour passer de la vidéo 1 à la vidéo 2 sans aucune aller au noir entre les deux. Je n'ai trouvé aucun exemple pour ce problème, peut-être que je cherche les mauvais mots-clés ...?

Plus particulièrement, mes vidéos sont des mp4 (vidéo h264, pas de son, au cas où cela compte), chacune dure 5 secondes et je suis après une transition d'env. 4,5 secondes de vidéo 1 à 0,5 secondes de vidéo 2.

Semblable à ce que fait ce tutoriel en utilisant MLT et les cadres (voir 2:25 pour un exemple de fondu), bien que je cherche un moyen de le faire juste dans ffmpeg sans appeler d'autres progs. http://www.youtube.com/watch?v=3PRZ9L_KLdI

Tout pointeur ou peut-être une ligne de commande pour obtenir un fondu comme celui-ci serait très apprécié, merci beaucoup!

Mugba
la source
connexes superuser.com/questions/223678/... | stackoverflow.com/questions/7565962/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Réponses:

23

Je suggère de faire de cette façon:

  • Créez un fond noir avec la même durée et la même résolution que la vidéo de sortie.
  • Ajouter un canal alpha à chaque vidéo
  • Ajoutez un fondu à l'effet alpha à chaque vidéo
  • Utilisez la superposition sur chaque vidéo avec un fond noir

Ainsi, la commande pour ajouter un fondu enchaîné à 2 vidéos (5 sec) chacune devrait être:

ffmpeg -i 1.mp4 -i 2.mp4 -f lavfi -i color=black -filter_complex \
"[0:v]format=pix_fmts=yuva420p,fade=t=out:st=4:d=1:alpha=1,setpts=PTS-STARTPTS[va0];\
[1:v]format=pix_fmts=yuva420p,fade=t=in:st=0:d=1:alpha=1,setpts=PTS-STARTPTS+4/TB[va1];\
[2:v]scale=960x720,trim=duration=9[over];\
[over][va0]overlay[over1];\
[over1][va1]overlay=format=yuv420[outv]" \
-vcodec libx264 -map [outv] out.mp4

Cela fera disparaître la première vidéo en alpha à la 4ème seconde (st = 4) pendant 1 seconde (d = 1), fondra la seconde à 0 seconde (st = 0) pendant 1 seconde (d = 1) et déplace son affichage temps avant à 4 sec (+ 4 / TB). Ensuite, nous venons de couper 9 secondes de couleur noire, de l'adapter à la taille de la vidéo et de superposer le contenu.

J'espère que ça aide.

ptQa
la source
Salut @ptQa, merci beaucoup, l'effet de fondu enchaîné fonctionne comme un charme. Bien que ce qui se passe dans la vidéo de sortie, c'est qu'elle ne montre qu'une section en haut à gauche des vidéos originales et que le reste du cadre est manquant. J'ai regardé la résolution, l'entrée est de 960 x 720 et la sortie est de 320 x 240, mais elle ne réduit pas la vidéo entière, coupe plutôt une section de 320 x 240 en haut à gauche et montre que dans la vidéo de sortie, le reste de les vidéos d'entrée sont manquantes. Y a-t-il un ajout à votre ligne de commande qui empêche cela?
Mugba
Oh, je l'ai, vous devez également mettre à l'échelle la couleur noire à la résolution que vous souhaitez obtenir. Voir la réponse mise à jour. J'ai ajouté une échelle pour filtrer le graphique.
ptQa
Cela l'a résolu, merci. J'ai téléchargé un exemple de vidéo montrant le fondu enchaîné au cas où quelqu'un voudrait le voir en action, youtu.be/JqorgXAjjTo
Mugba
Même problème; J'ai une variante de ce travail sur une partie de ma propre vidéo - merci. Question: Comment cela pourrait-il être modifié pour également effectuer un fondu enchaîné sur les pistes audio des vidéos, en suivant le même modèle que le fondu vidéo?
Jim Miller
1
BTW, je pense qu'il y a une erreur dans l'exemple de commande de la réponse - elle devrait l'être -i 1.mp4 -i 2.mp4..., non?
Jim Miller
7

Voici comment j'ai fait:

  • version ffmpeg N-77197-gdf2ce13
  • 2 vidéos de 4 secondes chacune.
  • Besoin de le rejoindre avec un fondu entre eux.
  • les vidéos sont à 25 ips.

1) Ajouter un fondu (clair à foncé) à la fin du 1er et un fondu (foncé à clair) au début du 2e:

ffmpeg -i 1.mp4 -y -vf fade=out:76:24 1f.mp4

ffmpeg -i 2.mp4 -y -vf fade=in:0:25 2f.mp4

76:24 signifie que le fondu en sortie commencera l'image 76 et se terminera 24 images plus tard = 1 s en fondu.

0:25 signifie que le fondu commencera l'image 0 et se terminera 25 images plus tard.

2) Fusionnez les 2 vidéos

Tout convertir en TS

ffmpeg -i 1f.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts 1f.ts

ffmpeg -i 2f.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts 2f.ts

Fusionner

ffmpeg -i "concat:1f.ts|2f.ts" -bsf:a aac_adtstoasc -c copy output.mp4

Grâce à:

http://www.bogotobogo.com/FFMpeg/ffmpeg_fade_in_fade_out_transitions_effects_filters.php

Erwan
la source
6
Ce n'est pas un fondu enchaîné.
Gyan
4
Ce que @Mulvya a dit. Un fondu enchaîné fait fondre un clip en même temps qu’un autre fondu. Le premier clip voit sa transparence augmenter régulièrement pendant la durée du fondu enchaîné; la seconde voit sa transparence diminuer régulièrement.
intuition
7

ffmpeg-concat est le moyen le plus simple d'accomplir ce que vous voulez et vous permet d'utiliser un tas de transitions OpenGL sexy, la valeur par défaut étant le fondu enchaîné.

ffmpeg-gl-transition est un filtre ffmpeg personnalisé qui vous permet d'utiliser GLSL pour effectuer une transition en douceur entre deux flux vidéo. Ce filtre est beaucoup plus facile à utiliser et à personnaliser que les alternatives répertoriées ici.

Ce filtre prend en charge une grande liste de types de transition, la valeur par défaut étant le fondu enchaîné.

./ffmpeg -i 0.mp4 -i 1.mp4 -filter_complex "gltransition=duration=4:offset=1.5" out.mp4
fisch2
la source
4
Avez-vous envisagé de soumettre un patch à FFmpeg?
llogan
1
Je le ferai certainement, j'ai juste besoin de résoudre quelques petits problèmes et de tester plus en premier. Bon appel!
fisch2
est-ce dans le FFmpeg officiel? Je n'arrive pas à le localiser
kraftydevil