python으로 avif 변환하기

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

페이지스피트 인사이트에서 블로그를 점검해보니 이미지 로드에 시간이 많이 소요되고 있었다.

이미지 다이어트가 필요함을 깨닫는 순간이었다.

원래는 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의 성능에 대한 내용은 넷플릭스의 공식 블로그를 확인해보자.

avif 확장자는 자본의 논리에 따라 기업에서 계속 밀어주고 있으니 앞으로도 계속 발전할 듯 하다.

블로그에 적용해서 SEO 최적화도 노려보자.

관련 글

학교 업무 자동화 - AI를 이용한 생활기록부 점검 과목별 세부능력 특기사항편
학교 업무 자동화 - AI를 이용한 생활기록부 점검 과목별 세부능력 특기사항편
학교에서 가장 의미없고 힘들며 지루한 업무를 하나 뽑으라고 하면 나는 생기부 점검을 뽑을 것이다.중학교에서는 생활기록부가 그리 중요치 않지만 고등학교에서는 입시와 관련되어 있기 때문에 무척 중요하다.문제는 이런 생기부 점검에서 찾는 것이 고작 단순 오탈자, 기재 금지용...
맥북 유저를 위한 파이썬 OCR 추천
맥북 유저를 위한 파이썬 OCR 추천
학생들 진료 확인서 인식을 위해 안써본 OCR이 없는 것 같다.Tesseract, EasyOCR, PaddleOCR 등 다양한 OCR들을 써보았는데, 한글에 대해 만족할만한 성능을 가진 OCR이 없었다.그런데 최근에 맥북에 있는 라이브 텍스트 기능을 래핑한 파이썬 라이...
YOLO를 이용한 자동 얼굴 모자이크
YOLO를 이용한 자동 얼굴 모자이크
예전부터 카페, 맛집 블로그를 계속 쓰고 있었는데 사진을 올릴 때 마다 얼굴을 모자이크 하는게 너무 귀찮았다. 네이버, 티스토리에서도 자동 모자이크를 지원하지만, 사진이 30개면 30개를 모두 돌아가면서 눌러줘야하고 인식률도 좋지 않았다.그래서 그냥 만들기로 ...
파이썬 멀티 스레딩(병렬실행) 구현하기
파이썬 멀티 스레딩(병렬실행) 구현하기
파이썬으로 코딩을 하다보면 tkinter와 같은 GUI를 구현할 때 문제에 부딪치게 된다.버튼을 눌러 특정 함수를 실행하면 GUI도 같이 멈춰버리는 것.그래서 이걸 멀티 스레딩으로 해결해보기로 했다.1. 멀티 스레딩? 멀티 프로세싱?멀티 스레딩은 하나의 프로세스 안에서...
K-업무포털을 크롤링 할 수 있을까?
K-업무포털을 크롤링 할 수 있을까?
최근 K-업무포털이 공문서 제목을 3개월 단위로 끊어서 보여주는 것을 보며 이런 생각을 해보았다.만약 크롤링으로 공문 제목을 모두 모아서 3개년 치를 엑셀로 만들어 둔다면?filter를 이용해 쉽게 공문서 번호를 검색할 수 있을 것 같았다.결론부터 말하자면 불가능했다....
학교 업무 자동화 - 야간자율학습 출석체크 자동화
학교 업무 자동화 - 야간자율학습 출석체크 자동화
python, spreadsheet를 이용한 출석체크 전산화

댓글을 불러오는 중...

python으로 avif 변환하기 | 힘센캥거루