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é :
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.
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!