본문 바로가기
Coding

움직이는 GIF 파일을 만드는 소스

by 이담불 2022. 2. 19.

./output 폴더에 있는 이미지 파일을 모아서 움직이는 GIF와 webp 파일을 만들어 주는 파이썬 소스입니다. output 폴더에 동일한 크기의 이미지를 넣어둬야 합니다.

import os, shutil, imageio
from tqdm import tqdm
from PIL import Image
from pathlib import Path as pt

# 폴더 없으면 생성
def createFolder(directory):
    try:
        if not os.path.exists(directory):
            os.makedirs(directory)
    except OSError:
        print ('Error: Creating directory. ' +  directory)

print("** 프로그램 안내 **\n\n| ./output/ 폴더의 이미지 파일을 모아 움직이는 GIF 파일로 만듭니다.\n")

# 초기화 (폴더삭제)
if os.path.exists('./gif'):
    reset_file = input("이전에 만든 파일을 초기화할까요?[y/n]: ")
    if reset_file == 'y':
        shutil.rmtree('./gif')
        print("초기화 되었습니다.\n")

gif_name = input("생성할 GIF 파일 이름: ")
gif_fps = input("프레임 속도(fps): ")

# gif 만들기
createFolder('./gif')
try:
    path = [f"./output/{i}" for i in os.listdir("./output")]
except:
    exit(input("\n[오류] ./output 폴더가 없습니다.(Enter)"))
paths = [Image.open(i) for i in path]
print("\n1. GIF 파일 제작중\n")
imageio.mimsave(f'./gif/{gif_name}.gif', tqdm(paths), fps=gif_fps)

# webp 만들기    
src_f = pt(f'./gif/{gif_name}.gif')
print("\n2. Webp 파일 제작중")
Image.open(src_f).save(pt(src_f).with_suffix('.webp'), 'webp', **{'quality': 100}, save_all=True)

# 끝
exit(input(f"\n./gif/ 폴더에 [{gif_name}.gif]와 [{gif_name}.webp] 파일이 만들어졌습니다.\n\n모든 작업이 완료되었습니다.(Enter)"))