Faire un fondu enchaîné entre deux morceaux de contenu vidéo est en fait assez compliqué dans FFmpeg. Il n'y a pas de filtre «fondu enchaîné» comme il en existe pour l'audio.
Quelle est la manière efficace de procéder?
ffmpeg
video-editing
Mark Gerolimatos
la source
la source
[0:a][1:a] acrossfade=d=1 [audio]
au filtre, puis-map "[audio]"
à la commande et cela a fonctionné. Si vous le souhaitez, faites un test et mettez à jour la réponse!Réponses:
Version TL; DR:
Cet exemple effectue uniquement de la vidéo, en supposant que les deux clips vidéo ont la même résolution, la fréquence d'images, etc. Cela créera un fondu d'une seconde entre fadeoutclip et fadeinclip. Supposons que le fadeoutclip dure 10 secondes. Notez que cela est formaté pour plus de clarté: c'est vraiment une ligne de code.
Version complète:
Voici une explication de ce dont il s'agissait:
Spécification d'entrée ... évidente
Créer un
filter_complex
: en supposant que vous comprenez déjà les complexes de filtres:Nous séparons d'abord les deux flux en deux morceaux chacun en utilisant le filtre de découpage : le contenu et la section de fondu enchaîné. Le fondu sortant est divisé en contenu et section de fondu, tandis que le fondu entrant est coupé en section et contenu de fondu. Total de quatre sections.
Notez que à proprement parler, nous ne devons briser les sections de fondu rayez: Nous pourrions simplement spécifier le fondu et fondu dans les temps pour les deux clips vidéo. Cependant, ce faisant, nous:
overlay
utilisation du filtreChacune de ces quatre sections spécifie: l' heure de début (secondes), l'heure de fin (secondes) et le mystérieux
setpts=PTS-STARTPTS
filtre , qui fait essentiellement démarrer chaque sous-clip vidéo à 0 seconde. Cela sera vital lors de leur recomposition.Notez que les
s=0
spécificateurs sont redondants et que lesetpts
filtre pours=0
ceux-ci est également redondant. Cependant, les deux sont spécifiés de manière redondante pour permettre le changement d'heure de début de 0, sans casser le complexe du filtre. En outre, le deuxième clip de contenu s'exécute jusqu'à la fin, de sorte que lae=
partie (end =) n'est pas spécifiée.Ensuite, nous spécifions le fondu entrant et sortant: Nous ajoutons d'abord un canal alpha (transparence) aux deux sections de fondu en spécifiant un format de pixel de
yuva420p
. Vous pouvez réellement utiliser n'importe quel format qui fournit un canal alpha.Suivant dans ce filtre , nous précisons un sous -complexe à disparaître, et un à fondu. Les
alpha=1
moyens que la vidéo elle - même ne sera pas assombrie, seul le montant de la transparence sera « fade ».st
signifie début,d
durée.Qu'est-ce que c'est?: Le
fifo
filtre garantit qu'il y a de l'espace tampon disponible dans le complexe de filtres. Étonnamment, ce n'est PAS la valeur par défaut. Si vous ne le faites pas, le fondu enchaîné pourrait échouer si la sortie de l'étage ci-dessus dépasse le filtre de superposition ci-dessous. Ouais, je sais ce que tu penses en ce moment. Il s'agit en effet d'un bug FFMPEG .Maintenant, superposez les deux sections de fondu: en vous assurant que les deux sections de fondu enchaîné sont de la même taille, nous n'avons pas à nous soucier des options plutôt désagréables prises par le filtre de superposition (et nous les ignorons donc ici):
Enfin, nous alignons nos trois segments à l'aide du filtre concat .
Et maintenant, mappez le pavé de sortie comme source vidéo.
N'OUBLIEZ PAS de définir le format de pixel À CE QUE VOUS UTILISEZ NORMALEMENT (généralement
yuv420p
), car la section de fondu enchaîné l'aura régléyuv420
sur le canal de sortie! (comme nous ne l'avons pas spécifié, vous pouvez utiliser les arguments de superposition) Bien sûr, si vous le souhaitezyuv420
, alors tout va bien :-)Vous pouvez ensuite recombiner l'audio ultérieurement (en dehors de la portée de cette Q&R)
la source
trim=start=0:end=9
(plutôt quetrim=st=0:e=9,
..Filter setpts has an unconnected output
pour le script. J'ai déjà changé les paramètres de trim pour commencer et terminer.