Programmatically Generate Video or Animated GIF in Python

Les GIFs existent depuis un peu plus de 20 ans et, au cours de cette période, ils sont devenus le format de communication préféré de beaucoup. Ils peuvent essayer d’en dire plus que les mots, non seulement en décrivant une action ou une réponse rapide, mais aussi en imitant le ton et les indices faciaux de la personne ou du groupe qui essaie de faire passer son message de manière divertissante et informative. Cet article de blog explique comment générer par programme une vidéo ou un GIF animé en Python. Je vais vous emmener dans un voyage de création de GIF animés. Nous allons suivre le processus de transformation de votre vidéo en GIF, puis je vous montrerai comment créer un GIF animé. Enfin, je vous montrerai comment créer un GIF animé multi-image à partir de zéro, en utilisant des images ou des séquences.

Sujets abordés dans le billet de blog :

  1. Convertir une vidéo en gif.
  2. Comment créer des gifs animés.
  3. Créez des gifs en utilisant plusieurs images.
  4. Ajout d’un effet de machine à écrire dans un gif.

Conditions préalables :

Python:

Pour créer des GIFs avec Python, vous devez disposer de Python 3.5+ sur votre système. Vous pouvez facilement installer Python sur votre système en allant sur https://www.python.org/downloads/, en téléchargeant et en installant le logiciel.

Imageio:

Imageio est une bibliothèque Python pour travailler avec des images. Ce logiciel est conçu pour être facile à installer et fonctionner sur des machines Windows, Mac et Linux. Il lit et écrit des images animées, des données volumétriques et des formats scientifiques. Il est open-source et peut donc être installé sur n’importe quel appareil équipé de Python 3.5+. En outre, l’interface utilisateur fournit plusieurs mesures statistiques descriptives de base qui vous permettent de choisir le bon type de format de fichier (jpeg, png ou BMP) en fonction de la résolution de l’image et de la densité de pixels requise. Pour installer imageio, utilisez la commande suivante dans votre système

pip install imageio imageio-ffmpeg

Pil:

PIL est l’acronyme de Python Imaging Library. Il s’agit d’une collection d’outils gratuits et open-source utilisés pour manipuler différents types d’images. Cette bibliothèque est principalement conçue pour supporter, lire et enregistrer (ainsi qu’importer) des fichiers SVG et rasters tels que jpeg/BMP/png à différentes résolutions. Certains autres formats d’images comme tiff/xpm seront accessibles via des bibliothèques externes. PIL est disponible pour Windows, Mac OS X, Linux, etc. Pour installer PIL, utilisez la commande suivante dans votre système

pip install pil

Remarque : avant d’installer la bibliothèque PIL, vérifiez que votre système ne possède pas de bibliothèque pillow, car elles ne peuvent pas exister en même temps.

Étape -1 : Convertir une vidéo en GIF

# import dependencies
import imageio
import os

# load the video file
clip = os.path.abspath('sample.mp4')

# create a function
def gifMkaker(inputPath, targetFormat):
    # giving a output path
    outputPath = os.path.splitext(inputPath)[0] + targetFormat

    print(f'converting {inputPath} \n to {outputPath}')

    reader = imageio.get_reader(inputPath)
    # define fps of the gif
    fps = reader.get_meta_data()['fps']

    writer = imageio.get_writer(outputPath, fps=fps)

    for frames in reader:
        writer.append_data(frames)
        print(f'Frame{frames}')
    print('done')
    writer.close()

gifMkaker(clip, '.gif')

Sortie

Étape 2 : créer un GIF animé

Par exemple, nous allons créer un gif animé avec un cercle animé à l’intérieur du carré. 

# import dependencies from PIL import Image, ImageDraw

images = []

width = 700
center = width // 2
color_1 = (255, 255, 255)
color_2 = (0, 0, 0)
max_radius = int(center * 1.5)
step = 8

for i in range(0, max_radius, step):
    im = Image.new('RGB', (width, width), color_1)
    draw = ImageDraw.Draw(im)
    draw.ellipse((center - i, center - i, center + i, center + i), fill=color_2)
    images.append(im)

for i in range(0, max_radius, step):
    im = Image.new('RGB', (width, width), color_2)
    draw = ImageDraw.Draw(im)
    draw.ellipse((center - i, center - i, center + i, center + i), fill=color_1)
    images.append(im)

images[0].save('animated.gif',
              save_all=True, format='GIF', append_images=images[1:], optimize=False, duration=40, loop=0)

Voici la décomposition du code ci-dessus :

  1. Initialiser une liste vide dans la variable image.
  2. Nous avons décrit ici la largeur et le rayon de la couleur du gif.
  3. Créer une boucle for pour le gif afin qu’il s’exécute automatiquement.
  4. Enregistrez les cadres en utilisant format=’GIF’ et append_images=frames[1 :].
  5. Chaque image sera exécutée pendant 40 ms (durée = 40).
  6. L’image GIF tournera en boucle pour toujours (loop=0).

Sortie

Étape 3 : créer un GIF à l’aide d’images

Pour créer un gif animé, il faut d’abord récupérer les images au format .png pour les assembler, les enregistrer dans un seul dossier et les renommer par ordre croissant.

Pour ce tutoriel, vous pouvez utiliser PIL ou convert, deux programmes qui fonctionnent comme des compléments de Python et qui permettent des fonctions de transformation d’images. Vous pouvez également utiliser uniquement Python pour exécuter ces fonctions si vous choisissez de ne pas télécharger de programmes supplémentaires, le code est le suivant :

from PIL import Image
import glob

# Create the frames
frames = []
imgs = glob.glob("*.png")
for i in imgs:
    new_frame = Image.open(i)
    frames.append(new_frame)

# Save the png images into a GIF file that loops forever
frames[0].save('png_to_gif.gif', format='GIF',
              append_images=frames[1:],
              save_all=True,
              duration=300, loop=0)

Sortie

Étape 4 : création d’un fichier GIF avec du texte

Ici, nous créons une sorte de fichier gif animé avec du texte. Il montrera le texte avec un effet d’écriture.

Importer des dépendances

from PIL import Image, ImageDraw, ImageFont
from IPython.display import display, HTML
import os

Configurer l’apparence du fichier gif

def create_image_with_text(size, text):
    img = Image.new('RGB', (600, 70), "black")
    draw = ImageDraw.Draw(img)
    draw.text((size[0], size[1]), text, font = fnt, fill="green")
    return img

Créer les cadres

frames = []

def roll(text):

    for i in range(len(text)+1):
        new_frame = create_image_with_text((0,0), text[:i])
        frames.append(new_frame)
 
fnt = ImageFont.truetype("arial", 36)

Ajoutez le texte que vous souhaitez afficher dans le gif.

TXT = """

Hello

How are you

My name is Neeraj

Welcome to geekyhuman

You can find a great tutorial on python

""".splitlines()

# text is a line of all text
[roll(text) for text in TXT]

Enregistrez-la dans un format gif qui tourne en boucle (loop=0) pour toujours.

frames[0].save('banner_a.gif', format='GIF',
              append_images=frames[1:], save_all=True, duration=60, loop=0)
os.startfile("banner_a.gif")

print('done')

Sortie

Le mot de la fin

Nous espérons que vous avez apprécié ce tutoriel sur la création de GIFs avec Python. Nous avons couvert ici comment convertir une vidéo en GIF, comment créer des GIF à partir d’images, comment créer des GIF animés et comment créer un effet de machine à écrire dans un fichier GIF. En d’autres termes, on peut dire que nous avons appris à générer par programme une vidéo ou un GIF animé en Python. Avec ces connaissances, vous pouvez automatiser la création de vos GIF animés pour le plaisir ou pour les partager avec d’autres. Alors qu’attendez-vous ? Essayez-le dès aujourd’hui en copiant et collant le code dans votre interpréteur Python !

Spread the love
 
   

Laisser un commentaire