Comment utiliser Python pour convertir entre les formats MP4 et GIF

王林
Libérer: 2023-04-27 10:31:14
avant
1879 Les gens l'ont consulté

Le principe de la conversion de mp4 en gif est en fait très simple, c'est-à-dire lire les images du fichier mp4 puis les fusionner en un gif. Cela peut être facilement réalisé en utilisant les deux bibliothèques cv2 et PIL.

import glob

import cv2
from PIL import Image


def convert_mp4_to_jpgs(input_file):
# 先将mp4文件的所有帧读取出保存为图片
video_capture = cv2.VideoCapture(input_file)
still_reading, image = video_capture.read()
frame_count = 0
while still_reading:
cv2.imwrite(f"output/frame_{frame_count:03d}.jpg", image)
# read next image
still_reading, image = video_capture.read()
frame_count += 1


def convert_images_to_gif(output_file):
# 读取目录下图片,用Pillow模块的Image和所有图片合并
# 成一张gif
images = glob.glob(f"output/*.jpg")
images.sort()
frames = [Image.open(image) for image in images]
frame_one = frames[0]
frame_one.save(output_file, format="GIF", append_images=frames[1:],
 save_all=True, duration=40, loop=0)


def convert_mp4_to_gif(input_file, output_file):
convert_mp4_to_jpgs(input_file)
convert_images_to_gif(output_file)


if __name__ == "__main__":
convert_mp4_to_gif("demo.mp4", "output.gif")
Copier après la connexion

Une fois l'exécution terminée, on constate que la taille du fichier gif a considérablement augmenté :

Comment utiliser Python pour convertir entre les formats MP4 et GIF

Vous pouvez essayer d'optimiser la taille du gif en réduisant le nombre d'images. Par exemple, cette vidéo. a un total de 60 images. Si nous ne prenons que 30 images, la taille sera réduite de moitié

frame_one.save(output_file, format="GIF", append_images=[f for i, f in enumerate(frames[1:]) if i % 2 == 0],
 save_all=True, duration=40, loop=0)
Copier après la connexion

La logique d'implémentation est d'utiliser la fonction d'énumération pour filtrer les images paires afin de les synthétiser, et la taille minimale est compressée ; de 3,9M à 2M.

Après avoir écrit ce code, j'ai découvert qu'il existe une autre bibliothèque géniale, moviepy, qui peut être réalisée avec seulement 2 lignes de code ;

def mp4_to_gif2():
clip = VideoFileClip("demo.mp4")
clip.write_gif("output2.gif")
Copier après la connexion

moviepy a encapsulé les détails d'implémentation d'une manière très simple, et fournit ensuite de nombreux éléments ; paramètres permettant aux développeurs de le configurer vous-même. Mais le fichier converti à l'aide de moviepy fait 9 Mo. Je pense que les paramètres peuvent être utilisés pour l'optimiser et l'ajuster.

Comment utiliser Python pour convertir entre les formats MP4 et GIF

Il faut admettre que l'écosystème Python regorge de bibliothèques. Il existe toutes sortes de roues. Il n'y a rien que vous ne puissiez faire, seulement des choses que vous ne pouvez pas trouver.

Bien sûr, vous pouvez également reconvertir les gifs au format MP4. Par exemple, si vous voyez des gifs amusants, convertissez-les en mp4 et mettez-les sur la plateforme de vidéos courtes, ils deviendront peut-être populaires.

def convert_gif_to_mp4():
import moviepy.editor as mp
clip = mp.VideoFileClip("demo.gif")
clip.write_videofile("output.mp4")
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal