OpenCV

[OpenCV] 이미지 처리 (비디오)

괜찮나요닝겐 2024. 8. 18. 12:30
728x90
반응형

오늘은 opencv를 이용해서 비디오를 읽고 프레임으로 나누는걸 해보자

 

import cv2
import os

# 비디오 파일 경로
video_path = '/my_dir/input_video.mp4'

# 저장할 디렉토리 경로
output_dir = '/my_dir/frames/'

# 출력 디렉토리 생성
os.makedirs(output_dir, exist_ok=True)

# 비디오 캡처 객체 생성
cap = cv2.VideoCapture(video_path)

frame_count = 0

while True:
    # 프레임 읽기
    ret, frame = cap.read()

    # 프레임을 제대로 읽었는지 확인
    if not ret:
        break

    # 프레임 저장
    frame_filename = os.path.join(output_dir, f'frame_{frame_count:04d}.jpg')
    cv2.imwrite(frame_filename, frame)

    frame_count += 1

# 비디오 캡처 객체 해제
cap.release()

print(f'Total {frame_count} frames saved in {output_dir}')

 

여기서 기본적으로 fps를 30으로 잡고가는데, 만약 그게 싫다면 이렇게 조정하면 된다

import cv2
import os

# 비디오 파일 경로
video_path = '/my_dir/input_video.mp4'

# 저장할 디렉토리 경로
output_dir = '/my_dir/frames/'

# 출력 디렉토리 생성
os.makedirs(output_dir, exist_ok=True)

# 비디오 캡처 객체 생성
cap = cv2.VideoCapture(video_path)

# 원본 FPS 얻기
original_fps = cap.get(cv2.CAP_PROP_FPS)
print(f"Original FPS: {original_fps}")

# 목표 FPS 설정
target_fps = 20.0

# 스킵할 프레임 수 계산
frame_skip = int(original_fps / target_fps)
print(f"Frames to skip: {frame_skip}")

frame_count = 0
saved_count = 0

while True:
    ret, frame = cap.read()

    # 프레임을 제대로 읽었는지 확인
    if not ret:
        break

    # 목표 FPS에 맞춰 프레임 저장
    if frame_count % frame_skip == 0:
        frame_filename = os.path.join(output_dir, f'frame_{saved_count:04d}.jpg')
        cv2.imwrite(frame_filename, frame)
        saved_count += 1

    frame_count += 1

# 비디오 캡처 객체 해제
cap.release()

print(f'Total {saved_count} frames saved in {output_dir} with target FPS of {target_fps}')

 

오늘은 여기까지

 

728x90
반응형