파이썬/OpenCV

CV2로 IPCAMERA 영상을 동영상으로 저장 해보자

코샵 2022. 11. 16. 23:15
반응형
먼저 코드를 보여드리고 설명드리겠습니다
import cv2
import os, datetime

class capture():
    def __init__(self,ip,id,pw,rport,):
        self.ip = ip
        self.id = id
        self.pw = pw
        self.rport = rport
        self.url = f'rtsp://{id}:{pw}@{ip}:{rport}/cam0_0'
  
    def video(self):
        cap = cv2.VideoCapture(self.url)
        fourcc = cv2.VideoWriter_fourcc(*'XVID')
        width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
        height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
        fps = 15

        t = datetime.datetime.now().strftime('%Y-%m-%d-%H-%M-%S') + '.avi'
        if not os.path.isdir('C:\Video') : os.mkdir('C:\Video')
        path = os.path.join('C:\Video',t)
        out = cv2.VideoWriter(path, fourcc, fps, (width,height))

        while True:
            _, frame = cap.read()
            out.write(frame)
            
            frame = cv2.resize(frame, dsize=(0,0), fx=0.5, fy=0.5, interpolation=cv2.INTER_AREA)
            cv2.imshow('recoding',frame)

            k = cv2.waitKey(1) & 0xff
            if k == 27: break

        cap.release()
        out.release()
        cv2.destroyAllWindows()

test = capture('192.168.0.48','root','root','554')
test.video()
코드설명
fourcc = cv2.VideoWriter_fourcc(*'XVID')
  • 비디오를 저장할 코덱을 지정하는 부분입니다 
  • DIVX ( DIVX MPEG-4) , FMP4 ( FFMPEG MPEG-4) , X264 (H.264/AVC) , MJPG (Motion-JPEG)  등이 있습니다
  • 코덱마다 지원하는 확장자들이 다릅니다 avi mov mp4 등 
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = 15
  • 영상의 높이, 넓이를 가져는 부분입니다
  • 동영상 파일로 저장할 때 해상도를 지정해 줄 변수입니다
  • fps 는 1초에 몇장의 이미지를 저장할지 지정한 변수입니다
t = datetime.datetime.now().strftime('%Y-%m-%d-%H-%M-%S') + '.avi'
if not os.path.isdir('C:\Video') : os.mkdir('C:\Video')
path = os.path.join('C:\Video',t)
out = cv2.VideoWriter(path, fourcc, fps, (width,height))
cv2.VideoWriter(filename, fourcc, fps, frameSize, isColor)
filename : 비디오 파일 이름 ( 파일의 경로가 포함되어 있어야 합니다)
fourcc : 코덱명
fps : 초당 프레임 수 
frameSize : 프레임 크기. 튜플로 지정해 주어야 합니다
isColor : True일시 컬러, False 흑백. 기본값은 True
  • t는 동영상 파일의 이름을 지정한 변수입니다 저는 datatime 모듈을 이용해 현재시간의 연-월-일-시-분-초.avi로 저장할 것입니다
  • 두번째줄은 C드라이브에 Video 폴더가 있는지 검사하고 없으면 폴더를 생성하는 부분입니다
  • path는 동영상 파일 저장 경로입니다. 
  • out 변수의 설명은 위 VideoWriter 설명란에 있습니다 
out.write(frmae)
  • 현재 이미지(frame)를 out에 저장합니다
frame = cv2.resize(frame, dsize=(0,0), fx=0.5, fy=0.5, interpolation=cv2.INTER_AREA)
  • 제 카메라 해상도가 FHD(1920*1080)로 모니터 화면을 가득 채워서 imshow로 보여질 이미지 사이즈를 줄여줬습니다
  • 자세한 설명은 다른 포스팅에서 따로 하겠습니다
out.release()

드디어 제대로 사용할 곳이 생겼습니다 

영상을 저장하고 닫는 부분입니다

 

그대로 가져다 fps만 카메라 설정값에 맞춰서 사용하시면 문제 없습니다