La dernière fois que j'ai écrit un article sur le compte officiel, j'ai rencontré un problème. Il était trop fastidieux d'insérer des fichiers vidéo dans le compte officiel. Une très petite vidéo devait être examinée par la plateforme lorsqu'elle était téléchargée en tant que vidéo. , ce n'était pas aussi direct qu'un GIF.
Je voulais donc trouver un outil pour convertir mp4 en gif. Après une recherche en ligne, il existe de nombreux outils en ligne, mais il existe différentes méthodes. Certaines d'entre elles nécessitent des publicités, tandis que d'autres nécessitent que vous scanniez d'abord un code QR. Les sites étrangers sont meilleurs, ils n’ont pas tellement d’astuces.
Je pense que Python peut certainement gérer ce genre de problème. Après tout, le Python tout-puissant peut tout faire sauf ne pas donner naissance à des enfants. De cette façon, j'en ferai plus tard un outil en ligne, qui me convient et peut être utilisé par d'autres.
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 fait 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 fortement augmenté :
Vous pouvez essayer d'optimiser la taille du gif en réduisant le nombre d'images. Par exemple, ceci. la 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 consiste à utiliser la fonction d'énumération pour filtrer les images paires afin de les synthétiser, et la taille minimale est compressée à partir de celle-ci. 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")
Enfin, si vous en savez un peu plus sur les opérations, ne serait-il pas bien d'en faire un outil et de l'accrocher en ligne pour devenir un artefact attirant les fans ?
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!