반응형
파이썬 영상을 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 전환 결과
반응형
댓글