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
반응형
'OpenCV' 카테고리의 다른 글
[OpenCV] 이미지 처리 (Laplacian) (0) | 2024.08.18 |
---|---|
[OpenCV] 이미지 처리 (비디오 crop) (0) | 2024.08.18 |
[OpenCV] 이미지 처리 (자동보정) (0) | 2024.08.17 |
[OpenCV] 이미지 처리 (모자이크 & 블러) (0) | 2024.08.17 |
[OpenCV] 이미지 처리 (합성2) (0) | 2024.08.17 |