import cv2
cap = cv2.VideoCapture(0) # 0번 카메라 연결
if cap.isOpened:
file_path = './record.avi' # 저장할 파일 경로 이름 ---①
fps = 30.0 # FPS, 초당 프레임 수
fourcc = cv2.VideoWriter_fourcc(*'DIVX') # 인코딩 포맷 문자
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
size = (int(width), int(height)) # 프레임 크기
out = cv2.VideoWriter(file_path, fourcc, fps, size) # VideoWriter 객체 생성
while True:
ret, frame = cap.read()
if ret:
cv2.imshow('camera-recording',frame)
out.write(frame) # 파일 저장
if cv2.waitKey(int(1000/fps)) != -1:
break
else:
print("no frame!")
break
out.release() # 파일 닫기
else:
print("can't open camera!")
cap.release()
cv2.destroyAllWindows()
<코드 읽기>
VideoCapture 객체 생성
제대로 생성되었는지 확인 후 객체의 프레임의 크기를 불러 저장한다.
VideoWriter 객체를 저장할 파일명, 인코더, fps, 크기를 설정하면서 선언해준다.
VideoCapture 객체를 재생하면서 읽어오는 프레임 하나씩을 VideoWriter 에 저장해준다.
<new!>
cv2.VideoWriter_fourcc(c1, c2, c3, c4) - 입력받은 글자들을 4자리 코드로 연결해 반환, 위 코드에서는 " * "를 통해 한번에 입력받았다.
FourCC 개념에 대해서 먼저 알고 있어야 이해를 할 수 있는 코드이다.
FourCC는 주로 AVI파일의 영상 코덱을 구분할 때 쓰인다고 한다.
DIVX, XVID, MJPG 등이 사용 가능했다.
참조: https://ko.wikipedia.org/wiki/FourCC
cv2.VideoWriter(filename, fourcc, fps, frameSize) - 영상 쓰기 객체
filename - 저장될 파일 명
fourcc - 코덱 정의자
fps - 프레임 속도
frameSize - 프레임 크기
<사담>
코드를 실행해 보니 프레임 속도가 살짝 다른 듯 했다.
이 간극을 어떻게 처리해야 할 지 고민해 봐야 할 듯.
불러올 영상의 fps로 지정하는 건 방법이 아닌 듯 하다.
'OpenCV' 카테고리의 다른 글
[OpenCV_10_11_사각형 그리기] (0) | 2022.12.11 |
---|---|
[OpenCV_01_10_선 그리기] (0) | 2022.12.11 |
[OpenCV_01_08_사진 찍기] (0) | 2022.12.10 |
[OpneCV_01_07_프레임 크기 수정하기] (0) | 2022.12.09 |
[OpenCV_01_06_프레임 지정해서 영상 읽기] (0) | 2022.12.09 |