12 votes

Création d'une vidéo contenant du texte animé en utilisant uniquement FFMPEG

Je doute que ce soit possible, mais j'essaie de trouver un moyen de

  1. rendre dynamiquement le texte, puis
  2. l'animer éventuellement (simple mouvement de gauche à droite), puis
  3. composite le résultat par-dessus une autre vidéo.

Je sais que FFMPEG est puissant, mais est-il possible de générer du contenu de manière dynamique comme ceci en utilisant FFMPEG seul ? La vidéo serait saisie, mais le texte devrait être entièrement généré à l'aide de FFMPEG.

11voto

llogan Points 50040

Vous pouvez utiliser le filtre de texte .

Texte dynamique

Le texte peut être modifié pendant l'encodage si vous utilisez la fonction textfile et reload options :

  • textfile Un fichier texte contenant le texte à dessiner. Le texte doit être une séquence de caractères codés UTF-8.

  • reload Si la valeur est 1, le fichier texte sera rechargé avant chaque image. Assurez-vous de le mettre à jour de manière atomique, ou il pourrait être lu partiellement, ou même échouer.

Animer

Le texte peut se déplacer en utilisant expressions au sein de la x et y options de texte de dessin. Voir le documentation sur les textes à dessiner pour une liste de constantes et de fonctions.

Edition de la ligne de temps

Certains filtres, tels que drawtext, prennent en charge l'option enable option ce qui signifie que vous pouvez éteindre et allumer le filtre. Vous pouvez voir quels filtres supportent la timeline :

ffmpeg -filters

Beispiel

Si vous avez une vidéo d'entrée que vous voulez superposer avec du texte :

ffmpeg -i input -vf "drawtext=enable='gte(t,3)':fontfile=Vera.ttf:textfile=text.txt:reload=1:y=h-line_h-10:x=(W/tw)*n" output
  • Ceci activera le filtre drawtext après 3 secondes.
  • Chaque fois text.txt est mis à jour, le texte sera modifié
  • Les mots se déplaceront sur l'écran de gauche à droite (je suis nul avec ces expressions mais vous aurez l'idée).

Si vous n'avez pas de vidéo en entrée et que vous souhaitez simplement générer le texte sur fond noir :

ffmpeg -f lavfi -i "color=color=black, drawtext=enable='gte(t,3)':fontfile=Vera.ttf:fontcolor=white:textfile=text.txt:reload=1:y=h-line_h-10:x=(W/tw)*n" -t 5 output

Ici, -t 5 spécifie la longueur totale de la sortie. (Si elle n'est pas spécifiée, l'encodage s'exécuterait indéfiniment.) La couleur de la police est fixée à blanc pour que le texte soit visible.

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