Maison  >  Article  >  développement back-end  >  Comment utiliser Python pour convertir entre les formats MP4 et GIF

Comment utiliser Python pour convertir entre les formats MP4 et GIF

王林
王林avant
2023-04-27 10:31:141870parcourir

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")

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)

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")

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")

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer