pythonでavifに変換する

힘센캥거루
2025년 1월 13일(수정됨)
52
python

ページスピードインサイトでブログをチェックしたところ、画像のロードに時間がかかっていることがわかりました。

画像のダイエットが必要だと気づいた瞬間でした。

もともとはwebp形式を使用していましたが、avifが圧縮率が高く互換性が良く、さらにアニメーションもサポートしていることを知りました。

そこで一度比較してみました。

pythonでavifに変換する-1

pngファイルをavifに変換したところ、サイズが10倍に縮小されました。

2〜3倍ならわかりますが、10倍は非常に大きいです。

絶対に変えるべきだと思いました。

pythonでavifに変換する-2

pythonを使えばpngをavifに変換したり、avifをpngに変換することが可能です。

まずpipを使って必要なライブラリをインストールします。

pip install pillow pillow_avif imageio

まず、自分の画像はposts/[slug]/*.pngのようなパスに保存されています。

したがって、そのパスに移動してpngファイルをすべてavifに変換すればよいです。

from PIL import Image
import pillow_avif
import imageio
import pathlib

path = pathlib.Path.cwd()
# 現在のパスにあるファイルをすべて確認します。
for folder in path.iterdir():
    if folder.is_dir():
        for file in folder.iterdir():
            # フォルダであれば、フォルダ内のファイルを確認します。
            # 拡張子がjpg、pngなどの画像ファイルである場合に実行します。
            if file.suffix in [".jpg", ".png", ".gif", ".PNG", ".JPG", ".jpeg", ".webp"]:
                img = Image.open(file)
                # gifファイルなら必ずアニメーションです。
                # 各画像をフレームとして保存し変換します。
                if file.suffix == ".gif" :
                    frames = []
                    frame_count = 0
                    try:
                        while True:
                            current_frame = img.convert('RGB')
                            frames.append(current_frame)
                            img.seek(img.tell() + 1)
                    except EOFError:
                        pass
                    imageio.mimsave(f'{file.parent}/{file.stem}.avif', frames, format='AVIF')
                # それ以外の場合は単に拡張子を変換して保存します。
                else:
                    img.save(f'{file.parent}/{file.stem}.avif')

このように変換したところ、5.5MBのアニメーションが500kbになりました。

本当に圧縮率がすごいです。

pythonでavifに変換する-3

avifの性能についてはNetflixの公式ブログを確認しましょう。

avifの拡張子は経済の論理に従って企業がプッシュしているので、これからも発展していくと思われます。

ブログに適用してSEO最適化も狙ってみましょう。

댓글을 불러오는 중...