• 돌아가기
  • 아래로
  • 위로
  • 목록
  • 댓글
Python

IP카메라 영상을 녹화 해보시겠어요?

stopwater 1670

5

10

오늘 도 살짝 시간이 남아 python 코딩으로 IP카메라 녹화하는 방법에 대해 설명을 드리겠습니다.

요즘 뭐 홈카메라 같은것도 많이들 쓰시고 (전 안씀니다...) 혹시나 해서 올려봅니다.

 

요새나오는 제품들은 뭐 하도 기능이 좋아서 자동 백업도 되고 실시간 으로 볼수 있는 APP도 제공되어가지고 별 필요는 없는데요.

별도의 SDK가 없다면 핸들링 하기가 어렵기 때문에 직접 녹화하고 저장소에 관리하면 편할 경우도 있습니다. 

그리고 일반 CCTV용 IP카메라 (뷸렛형, 돔형 등)들은 NVR 이나 DVR (영상녹화장치) 뭐 이런거를 구매해야만 녹화가 되고 하는것들도 있습니다.

 

자 우선 알아야 할 개념 부터 간단히 짚고 넘어가면 

RTSP !!!

이게 중요합니다 Real Time Streaming Protocol 이었던가 그랬던거 같습니다. 

대부분의 시중에 판매되는 IP카메라들은 이 프로토콜을 네트워크 사양에서 지원합니다.  저 기능이 있어야 스트리밍도 되고 그것으로 가져다가 녹화도 뜨니까요!

 

일단은 녹화하기 위해서 여러가지 프로그램이 있는데 FFMPEG라는 프로그램을 쓸겁니다.

설치 방법은 구글에 많이 나와있으니 생략 하도록 하겠습니다. (좀 내용이 많기도 하고요 귀찮아서 그런거 아닙니다.)

 

서론이 길었군요.

카메라로 스트리밍 되는 영상을 보거나 녹화하려면 카메라의 RTSP URL을 알아야 합니다.

통상적으로

rtsp://카메라id:카메라pw@카메라ip:554(rtsp 포트)/스트림경로      <--- 이런식으로 되어있습니다.

예시)

rtsp://admin:admin1234@192.168.0.222:554/cam/realmonitor?channel=1

 

준비 끝...

코딩을 합시다.

 

import subprocess                        #파이썬 스크립트에서 터미널로 FFMPEG를 실행하기 위함

import time                                      #sleep 용

import os                                          #디렉토리 컨트롤을 위함

import threading                          #다채널일 경우 클래스로 만들어 멀티 스레드(라고 쓰고 멀티 프로레스라고 읽습니다 파이썬은)

 

자아 그리고 바로 FFMPEG cmd 를 작성해 볼까요

 

 

rtsp_rul = rtsp://admin:admin1234@192.168.0.222:554/cam/realmonitor?channel=1    #예시 이므로 사용할 주소 쓰시면 됩니다.

cmd = 'ffmpeg -hide_banner -stimeout 100000000 -y -r 30 -rtsp_transport tcp -i "'+ rtsp_url +'" -f segment -strftime 1 -segment_time 00:30:00 -segment_atclocktime 1 -segment_clocktime_offset 1 -segment_format avi -an -vcodec copy -reset_timestamps 1 ./save_video/%Y%m%d%H%M%S_mycam.avi'

 

ㅇ ㅏ 솎아낸다고 솎아 냈는데도 뭐가 기네요 .... 설명 들어가겠습니다.

ffmpeg -hide_banner -stimeout 100000000 -> 첫부분 요기는 rtsp tcp로 인풋 받으실 경우 그냥 쓰시는게 좋습니다.

-y -> 덮어쓰기 옵션입니다. 

-r 30  -> 인풋소스의 프레임레이트입니다. 카메라에 맞게 숫자를 바꿔주시면 됩니다. (생략하셔도 됩니다.)

-rtsp_transport tcp -i '  + rtsp_url + -> rtsp input 소스 지정옵션입니다. (띄어쓰기 주의) 

 

-f segment -strftime 1 -segment_time 00:30:00 -segment_atclocktime 1 -segment_clocktime_offset 1 -segment_format avi

이부분에서는 시간에 맞춰 잘라서 녹화를 하게 해주는 옵션입니다. 30분 단위로 잘라서 avi포멧으로 저장 할 예정입니다. 뭐 대충 이런내용입니다.

 

-an ->오디오 녹화 안함 (어차피 거의 안쓰니

-vcodec copy -> 녹화할때 video codec설정 옵션 입니다. copy는 스트림 옵션을 그대로 사용합니다.

 

-reset_timestamps 1 ./save_video/%Y%m%d%H%M%S_'  + 'mycam.avi'

타임스탬프 리셋 설정과 output 경로 설정입니다.

 

하아... 엄청 기네요. 줄이고 줄였는데... 이외에도 옵션이 엄청 많으니 필요하신 옵션 골라서 넣으시면 되고 

주의 사항으로는 옵션의 순서가 또 중요하니 꼭 확인을 해주셔야합니다. 보통은 input옵션 -> output 옵션으로 흘러갑니다.

 

그다음으로 해당 커맨드를 실행시켜 줍시다.

subprocess.check_output(cmd, shell=True, universal_newlines=True)

녹화가 죽죽 시작됩니다. 프로세스가 사망할때까지

 

합친 코드

 

import subprocess                        #파이썬 스크립트에서 터미널로 FFMPEG를 실행하기 위함

import time                                      #sleep 용

import os                                          #디렉토리 컨트롤을 위함

import threading                          #다채널일 경우 클래스로 만들어 멀티 스레드(라고 말하고 멀티 프로레스라고 읽습니다 파이썬은)

 

rtsp_rul = rtsp://admin:admin1234@192.168.0.222:554/cam/realmonitor?channel=1    #예시 이므로 사용할 주소 쓰시면 됩니다.

cmd = 'ffmpeg -hide_banner -stimeout 100000000 -y -r 30 -rtsp_transport tcp -i "'+ rtsp_url +'" -f segment -strftime 1 -segment_time 00:30:00 -segment_atclocktime 1 -segment_clocktime_offset 1 -segment_format avi -an -vcodec copy -reset_timestamps 1 ./save_video/%Y%m%d%H%M%S_mycam.avi'

 

subprocess.check_output(cmd, shell=True, universal_newlines=True)

 

그리고 스크립트를 실행해주시면 

 

stream1.png.jpg

 

날짜시간_mycam.avi 요런식으로 저장이 될 겁니다.

2021년 10월 07일 17시 39분 46초에 녹화가 시작되었다는걸 알수 있죠.

녹화는 18시00분에 종료되고 새파일로 이어서 녹화가 시작됩니다.

20211007180001_mycam.avi 이런식으로요.

 

필요한 기능들이 있으시면 앞 뒤로 더덕더덕 붙여서 핸들링 하시면 되겠습니다! 

 

뭔가 양에 비해서 내용이 부실 해보이네요. 궁금하신점 질문해주시면 성심껏 답변 드릴게요.

다음번에는 저장된 영상을 python에서 sftp를 이용하여 NAS와 AWS스토리지로 전송해보겠습니다. 

오늘도 좋은 하루 되세요!

신고공유스크랩
10
5명이 추천
profile image 1등
달소 2021.10.07. 18:44

오,,,ip카메라면 다 되는건가요??

신기하네요

라즈베리 파이에 붙이는것도 되나,, 궁금합니다

stopwater 글쓴이 2021.10.08. 10:35
달소

넵 시중에 판매하는 IP카메라들은 대부분되고요. CCTV솔루션을 제공하는 업체(?) 캡스, KT텔레캅 뭐 이런곳에서 제공하는 카메라들은 안됩니다.

라즈베리파이 카메라도 녹화 가능한데 FFMPEG 커맨드의 input 옵션을 바꿔줘야 합니다.

profile image 2등
달소 2021.10.08. 11:12

오호,, 신기합니다 또 한수배우는군요 ㅎㅎ 라즈베리파이5 나오면 이것저것 테스트해보는걸로...

3등
DarkAcid 2021.12.07. 17:06

큭 ㅠㅠ 제가 쓰는 NDI protocol은 FFMPEG 개발진과 문제가 생겨서 삭제가 되버렸어요... :(

DarkAcid 2021.12.11. 14:38

제가 쓰는 프로그램이 srt를 지원하더군요 rtsp 말고 srt로 전 코딩해봐야겠어요!

profile image
핀비 2022.12.17. 02:08

몇달 전에 부모님집에 CCTV 달아드린다고 오드로이드 안 쓰는거에 4TB 하드 물려서 onvif 지원 카메라로 ffmpeg로 hls 스트리밍했었는데 m3u8로 웹에서 라이브 재생표시하면서 파일은 avi가 아니라 뭐로 저장했었거든요. 보통 4대 설치하면 한달이면 1테라 꽉찬다고 해서 넉넉히 4TB로 맞춘건데 6개월이 넘었는데도 3TB 정도 밖에 안 찼어요

삽질을 좀 많이 했었던 기억이 나네요.. 웹페이지를 너무 대충만들어서 (영상들만 띄워놓을 수 있게;;) 나중에 시간날 때 앱이랑 함께 개발하려고요

와카노코 2024.03.26. 11:50
저는 이거 할려면 어떻게 해야되나요 중국 테무 쇼핑몰에서 ip cctv 샀는데요 카메라 이름 아이디 몰라요 핸드폰으로 연결하는 곳에 직렬장치 ekdb_d73e....... 이런게 있구 mac 1c:36:ca .....주소 있습니다 RTSP URL 어떻게 검색해야되나요?

댓글 쓰기 권한이 없습니다. 로그인

취소 댓글 등록

cmt alert

신고

"님의 댓글"

이 댓글을 신고하시겠습니까?

댓글 삭제

"님의 댓글"

삭제하시겠습니까?


목록

공유

facebooktwitterpinterestbandkakao story

주간 조회 수 인기글

주간 추천 수 인기글

분류 제목 글쓴이 날짜 조회 추천
코딩테스트 ㅘ!!!!!! 9 Jasons 23.08.24.15:40 139 +2
코딩테스트 으어... 대회 시작 1시간 하고도 정확히 15분전 2 Jasons 23.08.13.12:45 242 +1
코딩테스트 NYPC 2023 2 Jasons 23.08.09.14:13 172 +1
코딩테스트
image
Jasons 23.08.24.15:40 139 +2
코딩테스트
normal
Jasons 23.08.13.12:45 242 +1
코딩테스트
image
Jasons 23.08.09.14:13 172 +1
Python
normal
mjk 23.08.03.20:22 224 +3
Linux
image
hilee0602 23.04.05.16:34 234 +1
Linux
image
화정큐삼 23.03.19.08:46 301 0
Docker
normal
장작_범댕이 23.02.19.14:21 299 0
정보
image
동기 23.01.16.09:16 220 0
정보
image
달소 23.01.06.14:50 1536 0
정보
image
동기 23.01.04.16:14 205 +2