Prinsip menukar mp4 kepada gif sebenarnya sangat mudah, iaitu membaca bingkai fail mp4 dan kemudian menggabungkannya menjadi gif. Ia boleh dilakukan dengan mudah menggunakan dua perpustakaan cv2 dan 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")
Selepas pelaksanaan selesai, didapati saiz fail gif telah meningkat dengan mendadak:
Anda boleh cuba mengoptimumkan saiz gif dengan mengurangkan bilangan bingkai Sebagai contoh, video ini mempunyai jumlah Terdapat 60 bingkai Jika kita hanya mengambil 30 bingkai, saiznya akan dikurangkan kepada separuh; berfungsi untuk menapis gambar bernombor genap untuk sintesis, dan saiz minimum dimampatkan daripada 3.9M kepada 2M.
Selepas menulis kod ini, saya mendapati terdapat satu lagi perpustakaan hebat, moviepy, yang boleh dilakukan dengan 2 baris kod
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)
moviepy telah merangkum butiran pelaksanaan dengan sangat mudah, dan kemudian dengan syarat Sebilangan besar parameter boleh dikonfigurasikan oleh pembangun sendiri. Tetapi fail yang ditukar menggunakan moviepy ialah 9M Saya percaya bahawa parameter boleh digunakan untuk mengoptimumkan dan melaraskannya.
Anda harus mengakui bahawa ekosistem Python penuh dengan perpustakaan dan terdapat pelbagai jenis roda cari.
Sudah tentu, anda juga boleh menukar gif kepada format MP4 Contohnya, jika anda melihat beberapa gif lucu, tukarkannya kepada mp4 dan letakkannya pada platform video pendek.
rreeeeAtas ialah kandungan terperinci Cara menggunakan Python untuk menukar antara format MP4 dan GIF. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!