Apabila saya menulis artikel pada akaun rasmi terakhir, saya menghadapi masalah untuk memasukkan fail video ke dalam akaun rasmi. Video yang sangat kecil perlu disemak oleh platform apabila dimuat naik sebagai video dimainkan, ia tidak langsung seperti GIF.
Jadi saya ingin mencari alat untuk menukar mp4 kepada gif. Selepas mencari dalam talian, terdapat banyak alat dalam talian, tetapi terdapat pelbagai kaedah yang memerlukan iklan, manakala yang lain memerlukan anda mengimbas kod QR terlebih dahulu. Laman web asing lebih baik, mereka tidak mempunyai banyak helah.
Saya rasa Python pasti boleh menangani masalah seperti ini Lagipun, Python yang maha kuasa boleh melakukan segala-galanya kecuali tidak melahirkan anak. Dengan cara ini, saya akan menjadikannya sebagai alat dalam talian kemudian, yang sesuai untuk diri saya dan boleh digunakan oleh orang lain.
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 secara mendadak:
Anda boleh mencuba untuk mengoptimumkan saiz gif dengan mengurangkan bilangan bingkai , contohnya, video ini mempunyai jumlah 60 bingkai Jika kita hanya mengambil 30 bingkai, saiznya akan dikurangkan kepada separuh; logiknya adalah menggunakan fungsi enumerate untuk menapis nombor genap gambar untuk disintesis, dan saiz minimum dimampatkan daripada 3.9M kepada 2M.
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 merangkumkan butiran pelaksanaan dalam a; cara yang sangat mudah, dan kemudian Sebilangan besar parameter disediakan untuk pembangun mengkonfigurasi diri mereka sendiri. Tetapi fail yang ditukar menggunakan moviepy ialah 9M Saya percaya bahawa parameter boleh digunakan untuk mengoptimumkan dan melaraskannya.
def mp4_to_gif2(): clip = VideoFileClip("demo.mp4") clip.write_gif("output2.gif")
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.Akhirnya, jika anda tahu serba sedikit tentang operasi, bukankah bagus untuk menjadikannya sebagai alat dan menggantungnya dalam talian untuk menjadi artifak yang menarik peminat?
Atas ialah kandungan terperinci Menggunakan Python untuk menukar format MP4 dan GIF adalah sangat mudah!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!