본문 바로가기
프로그램

[파이썬] png 파일로 동영상 만들기

by 오디세이99 2024. 10. 15.
728x90
반응형

파일명을 패턴으로 찾아서 png 파일들로 동영상 만들기

import os
import numpy as np
import imageio
from PIL import Image

# avi로 만들 파일들이 있는 폴더 경로
folder_path = 'E:/RnD/Stock/stockTradeClassify/train_tmp/750_tmp'
out_path = 'E:/RnD/Stock/stockTradeClassify/train_tmp/750_tmp'

file_pattern = "MAX_TEST"

# 폴더에서 파일 리스트 가져오기
file_list = os.listdir(folder_path)

# 파일 이름 패턴에 맞는 파일들만 필터링하기
# filtered_files = [file for file in file_list if file_pattern in file]
filtered_files = [
    file for file in file_list
    if file_pattern in file and file.lower().endswith('.png')
]
# 파일 경로를 포함한 파일 리스트 생성 및 수정 시간 기준으로 정렬하기
filtered_files = sorted(
    [os.path.join(folder_path, file) for file in filtered_files],
    key=os.path.getmtime
)

# 파일들을 읽어와 images 리스트에 저장하기
images = []
for file_path in filtered_files:
    print(file_path)
    img = imageio.v2.imread(file_path)
    img = Image.fromarray(img)
    img = img.resize( (1920, 900))
    img = np.array(img)
    images.append(img)

if images:
    # images 리스트를 이용하여 avi 파일 생성하기
    output_path = os.path.join(out_path, file_pattern + '_ani.mp4')

    # imageio-ffmpeg를 사용하여 avi 파일 생성
    writer = imageio.get_writer(output_path, format='FFMPEG', fps=5, codec='mpeg4')

    for img in images:
        writer.append_data(img)

    writer.close()
    print(f"AVI 파일 생성 완료: {output_path}")

 

 

애니매이션 gif 로 동영상 만들기

import cv2
import imageio

# 변환할 GIF 파일 경로
input_gif_path = 'E:/temp/image_ani.gif'
# 저장할 MP4 파일 경로
output_mp4_path = 'E:/temp/image_ani2.mp4'

# GIF 파일을 imageio로 읽기
gif_reader = imageio.get_reader(input_gif_path)

# 첫 번째 프레임에서 영상의 크기(height, width) 가져오기
first_frame = gif_reader.get_data(0)
height, width, _ = first_frame.shape

# 프레임 속도(fps) 가져오기 (duration은 ms 단위이므로 1000을 나눠 초당 프레임으로 계산)
fps = 1000 / gif_reader.get_meta_data()['duration']

# OpenCV VideoWriter 객체 생성
fourcc = cv2.VideoWriter_fourcc(*'mp4v')  # mp4v 코덱
out = cv2.VideoWriter(output_mp4_path, fourcc, fps, (1920, 900))  # 화면 크기를 1920*900으로 설정

# GIF의 각 프레임을 읽어서 MP4로 저장
for frame in gif_reader:
    # 이미지 크기를 1920x900으로 조정
    frame = cv2.resize(frame, (1920, 900))
    # imageio에서 가져온 이미지는 RGB이므로 OpenCV의 BGR로 변환
    frame_bgr = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)
    out.write(frame_bgr)  # MP4 파일에 프레임 추가

# 모든 작업 완료 후 자원 해제
out.release()
gif_reader.close()

print(f"MP4 파일 생성 완료: {output_mp4_path}")
728x90
반응형

댓글