Menggunakan Python untuk menukar format MP4 dan GIF adalah sangat mudah!

王林
Lepaskan: 2023-04-12 19:58:14
ke hadapan
1991 orang telah melayarinya

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")
Salin selepas log masuk

Selepas pelaksanaan selesai, didapati saiz fail gif telah meningkat secara mendadak:

Menggunakan Python untuk menukar format MP4 dan GIF adalah sangat mudah!

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)
Salin selepas log masuk
Selepas menulis kod ini, saya mendapati terdapat satu lagi perpustakaan hebat, moviepy, yang boleh dilakukan dengan hanya 2 baris kod

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")
Salin selepas log masuk

Anda harus mengakui bahawa ekosistem Python penuh dengan perpustakaan dan terdapat pelbagai jenis roda cari. Menggunakan Python untuk menukar format MP4 dan GIF adalah sangat mudah!

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!

Label berkaitan:
sumber:51cto.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan