web-dev-qa-db-fra.com

fondu enchaîné entre 2 vidéos en utilisant ffmpeg

J'ai essayé de réaliser une transition en 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 compte surtout modifier 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, utiliser le filtre de fusion ou de superposition devrait aider à atteindre mes objectifs, mais je n'arrive pas à comprendre. les détails de la ligne de commande pour le faire fonctionner.

Les filtres de fondu et de concaténation sont parfaits pour le fondu de la vidéo 1, le fondu en entrée de la vidéo 2 et la concaténation des transitions de type clip 2 en 1 mais j'apprécierais de l'aide pour obtenir une commande permettant de passer de la vidéo 1 à la vidéo 2 sans qu'aucun ne passe au noir entre les deux. Je n'ai pas pu trouver d'exemples pour ce problème, où que ce soit, peut-être que je cherche les mauvais mots clés ...?

Plus spécifiquement, mes vidéos sont au format MP4 (vidéo h264, pas de son, au cas où ça compte), chacune dure 5 secondes et je suis après une transition d’environ. 4.5s de vidéo 1 à 0.5s 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 faire cela dans ffmpeg sans appeler d’autres progs. http://www.youtube.com/watch?v=3PRZ9L_KLdI

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

25
Mugba

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

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

Donc, la commande pour ajouter un fondu enchaîné à 2 vidéos (5 secondes) 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), puis la seconde à 0 seconde (st = 0) pendant 1 seconde (d = 1) et déplacera son affichage. temps écoulé à 4 secondes (+ 4/To). Ensuite, nous venons de couper 9 secondes de couleur noire, de l’adapter à la taille de la vidéo et de la superposer.

J'espère que ça aide.

22
ptQa

Voici comment j'ai fait:

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

1) Ajoutez un fondu sortant (clair à foncé) à la fin du 1er et un fondu entrant (foncé à clair) au début du 2ème:

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 sortant commence à l'image 76 et se termine 24 images plus tard = 1 fondu à la fermeture.

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

2) Fusionner les 2 vidéos

Convertir tout 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

6
Erwan

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 personnalisé ffmpeg qui vous permet d'utiliser GLSL pour une transition en douceur entre deux flux vidéo. Ce filtre est nettement 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
6
fisch2