본문 바로가기
python

파이썬 영상을 gif 파일로 전환하기

by 타닥타닥 토다토닥 부부 2023. 10. 11.
반응형

파이썬 영상을 gif 파일로 전환하기

비디오를 80개의 프레임으로 잘르고 750, 480 사이즈로 축소한 후 test_gif 디렉션에 jpg 파일로 저장하고,

jpg 파일을 gif 로 전환합니다.

 

1. 프레임을 jpg 파일로 저장하기

import cv2
import os

# 파일경로 설정
video_file_name = "20231002/record_test.mov"
gif_file_name = "20231002/record_test.gif"
video2frame_direction = "20231002/test_gif"

# 비디오 파일 열기
cap = cv2.VideoCapture(video_file_name)

# 비디오 프레임 갯수 세아리기
frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))

# 원하는 프레임 갯수 지정
desired_frame_count = 80

# 원하는 이미지 사이즈 지정
desired_width = 750
desired_height = 480

# 프레임 사이 interval 계산
frame_interval = frame_count // desired_frame_count

# 프레임 확인 순서 확인을 위한 frame_iter_number 선언
frame_iter_number = 0

# 전체 프레임까지 각 프레임을 훑어 보지만 frame_interval 만큼 스킵하고 각 프레임을 jpg로 저장
while frame_iter_number < frame_count:
    ret, frame = cap.read()
    if not ret:
        break

    if frame_iter_number % frame_interval == 0:
        frame = cv2.resize(frame, (desired_width, desired_height))
        #output_frame_count += 1
        output_filename = os.path.join(video2frame_direction, f"frame_{frame_iter_number:04d}.jpg")
        cv2.imwrite(output_filename, frame)
    frame_iter_number += 1

# 객체 변수 초기화 및 닫기
cap.release()
cv2.destroyAllWindows()

 

2. jpg 를 gif 로 변환

from PIL import Image
import os

# jpd 이미지 불러 오고 순서대로 정렬하기
image_paths = [ff for ff in os.listdir(video2frame_direction) if "jpg" in ff]
image_paths = sorted(image_paths)

# 이미지 프레임 리스트 생성
frames = []

# jpg 이미지를 불러와서 프레임 리스트에 담기
for image_path in image_paths:
    img = Image.open(os.path.join(video2frame_direction, image_path))
    frames.append(img)

# 프레임 리스트를 gif 파일로 저장하기
frames[0].save(
    gif_file_name,
    save_all=True,
    append_images=frames[1:],
    duration=100, # 프레임간 시간 지연을 위해 duration을 키워주세요 / 밀리초 단위 (예: 200ms = 0.2초)
    loop=0
)

 

3. gif 전환 결과

반응형

댓글