Home >Backend Development >Python Tutorial >Using Python to convert MP4 and GIF formats is incredibly easy!
The last time I wrote an article on the official account, I encountered a problem. It was too cumbersome to insert video files into the official account. A very small video had to be reviewed when uploaded as a video to the platform, and it was not as straightforward as a GIF when played.
So I wanted to find a tool to convert mp4 to gif. After searching online, there are many online tools, but there are various methods. Some of them require advertisements, while others require you to scan a QR code first. Foreign websites are better, they don’t have so many tricks.
I think Python can definitely handle this kind of problem. After all, the omnipotent Python can do everything except not having children. In this way, I will make it into an online tool later, which is convenient for myself and can be used by others.
The principle of converting mp4 to gif is actually very simple, that is, reading the frames of the mp4 file and then merging them into a gif. You can easily get it done using the two libraries cv2 and 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")After the execution is completed, it is found that the size of the gif file has increased sharply:
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)The implementation logic is to use the enumerate function to filter even-numbered pictures for synthesis, and the minimum size is compressed from 3.9M to 2M. After writing this code, I found that there is another awesome library, moviepy, which can be done with just 2 lines of code;
def mp4_to_gif2(): clip = VideoFileClip("demo.mp4") clip.write_gif("output2.gif")moviepy has encapsulated the implementation details very simply, and then provided A large number of parameters can be configured by developers themselves. But the file converted using moviepy is 9M. I believe that parameters can be used to optimize and adjust it.
def convert_gif_to_mp4(): import moviepy.editor as mp clip = mp.VideoFileClip("demo.gif") clip.write_videofile("output.mp4")Finally, if you know a little bit about operations, wouldn’t it be nice to make it into a tool and hang it online to become a fan-attracting artifact?
The above is the detailed content of Using Python to convert MP4 and GIF formats is incredibly easy!. For more information, please follow other related articles on the PHP Chinese website!