소스 뷰어
# 18_write_camera_frame.py
import cv2
capture = cv2.VideoCapture(0) # 0번 카메라 연결
if capture.isOpened() == False: raise Exception("카메라 연결 안됨")
fps = capture.get( cv2.CAP_PROP_FPS ) # 초당 프레임 수
delay = round( 1_000/fps ) # 프레임 간 지연 시간
width = int( capture.get(cv2.CAP_PROP_FRAME_WIDTH) ) # 동영상 넓이
height = int( capture.get(cv2.CAP_PROP_FRAME_HEIGHT) ) # 동영상 높이
size = ( width, height ) # 동영상 파일 해상도
fourcc = cv2.VideoWriter_fourcc(*'H264') # 압축 코덱 설정
# 카메라 속성 콘솔창에 출력
print("프레임 해상도:", size )
print("압축 코덱 숫자:", fourcc)
print("delay: %2d ms" % delay)
print("fps: %.2f" % fps)
capture.set(cv2.CAP_PROP_ZOOM, 1) # 카메라 속성 지정
capture.set(cv2.CAP_PROP_FOCUS, 0) # 카메라 포커서 설정
capture.set(cv2.CAP_PROP_FRAME_WIDTH , size[0]) # 해상도 넓이 설정
capture.set(cv2.CAP_PROP_FRAME_HEIGHT, size[1]) # 해상도 높이 설정
# 현재 소스 파일의 폴더 경로
from pathlib import Path
dir = Path( __file__ ).resolve().parent
# 동영상 파일 개방 및 코덱, 해상도 설정
filename = dir.joinpath( "img/write_video.mp4" )
writer = cv2.VideoWriter( filename=filename, fourcc=fourcc, fps=fps, frameSize=size )
if writer.isOpened() == False: raise Exception("동영상 파일 쓰기 불가")
while True: # 무한 반복
ret, frame = capture.read() # 카메라 영상 받기
if not ret: break # 최근접 루프 탈출
if cv2.waitKey( delay ) >= 0: break # 최근접 루프 탈출
writer.write( frame ) # 프레임을 동영상으로 저장
cv2.imshow( "View Frame from Camera" , frame)
pass
writer.release() # 쓰기 동영상 파일 자원 해제
capture.release() # 캡쳐 카메라 자원 해제
print( f"동영상 저장이 완료되었습니다. {filename.name}" )