ホームページ  >  記事  >  バックエンド開発  >  Python を使用して MP4 および GIF 形式を変換するのは非常に簡単です。

Python を使用して MP4 および GIF 形式を変換するのは非常に簡単です。

王林
王林転載
2023-04-12 19:58:141916ブラウズ

前回、公式アカウントで記事を書いたときに、公式アカウントに動画ファイルを入れるのが面倒で、非常に小さな動画を動画としてプラットフォームにアップロードする際に審査が必要になるという問題が発生しました。再生すると GIF ほど単純ではありませんでした。

そこで、mp4 を gif に変換するツールを見つけたいと思いました。ネットで検索すると、オンラインツールはたくさんありますが、広告が必要なものや、最初にQRコードをスキャンする必要があるものなど、方法はさまざまです。海外のウェブサイトのほうが優れていますが、それほどトリックはありません。

この種の問題は Python で間違いなく処理できると思いますが、結局のところ、全能の Python は子供を持たないこと以外は何でもできます。このようにして、後でオンラインツールにして、自分にとって便利で、他の人も使用できるようにします。

mp4 を gif に変換する原理は実際には非常に簡単です。つまり、mp4 ファイルのフレームを読み取り、それらを gif に結合します。 cv2 と PIL の 2 つのライブラリを使用すると、これを簡単に実行できます。

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")

実行が完了すると、gif ファイルのサイズが急激に増加していることがわかります。

Python を使用して MP4 および GIF 形式を変換するのは非常に簡単です。

最適化を試みることができます。フレーム数を減らすことで GIF のサイズを変更します (例: このビデオには合計 60 フレームがあります。30 フレームだけを使用すると、サイズは半分になります;

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)

実装ロジックでは、 enumerate関数を使用して偶数番目の画像をフィルタリングして合成し、最小サイズを3.9Mから2Mに圧縮します。

このコードを書いた後、moviepy という別の素晴らしいライブラリがあることがわかりました。これはわずか 2 行のコードで実行できます。

def mp4_to_gif2():
clip = VideoFileClip("demo.mp4")
clip.write_gif("output2.gif")

moviepy は実装の詳細を非常に簡単にカプセル化しています。多数のパラメータは開発者自身が設定できます。ただ、moviepyで変換したファイルは9Mなのでパラメータで最適化・調整できると思います。

Python を使用して MP4 および GIF 形式を変換するのは非常に簡単です。

Python エコシステムにはライブラリがたくさんあることを認めなければなりません。あらゆる種類の車輪があります。できないことは何もありません。できないことがあるだけです探す。

もちろん、GIF を MP4 形式に変換して戻すこともできます。たとえば、面白い GIF を見つけたら、それを MP4 に変換してショート ビデオ プラットフォームに投稿すると、人気が出る可能性があります。

def convert_gif_to_mp4():
import moviepy.editor as mp
clip = mp.VideoFileClip("demo.gif")
clip.write_videofile("output.mp4")

最後に、運用について少しでも知っているなら、それをツールにしてオンラインに吊るし、ファンを魅了する成果物にするのは素晴らしいと思いませんか?

以上がPython を使用して MP4 および GIF 形式を変換するのは非常に簡単です。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は51cto.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。