使用OpenCV的Python接口獲取網(wǎng)絡(luò)攝像頭視頻并保存

OpenCV是一個非常好用的計算機視覺庫,功能也非常強大牲距。我們可以基于它的Python接口叮喳,只需要寫不到100行的代碼就能實現(xiàn)從網(wǎng)絡(luò)攝像頭中抓取視頻并保存成標(biāo)準(zhǔn)格式的視頻文件睁宰,當(dāng)然,你也以直接通過它的C++接口來寫嘱么,以下是Python的接口代碼示例狮含,有興趣的同學(xué)可以參考下:

#-*- coding = utf-8 -*-
import time
import cv2

print cv2
RTSP_URL    = 'rtsp://admin:admin@192.168.0.111:554/h264/ch1/sub/av_stream'   # your camera's rtsp url
DURATION    = 30   # how many time in seconds you want to capture
OUTPUT_FILE = 'capture_video.mp4'

cap         = cv2.VideoCapture(RTSP_URL)
#fourcc      = cv2.VideoWriter_fourcc('h','2','6','4')
fourcc      = 0x21
#fps         = cap.get(cv2.CAP_PROP_FPS)
fps         = 25
size        = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
saver       = cv2.VideoWriter(OUTPUT_FILE, fourcc, fps, size)

print "rtsp_url = %s, fps = %d, size = %s"%(RTSP_URL, fps, size)

got_first_frame = False
frame_count = 0
while True:
    ret, frame = cap.read()
    if not(ret):
        continue
    frame_count += 1
    print "%s: frame %d received" % (time.time(), frame_count)
    if got_first_frame == False:
        start_time = time.time()
        got_first_frame = True

    saver.write(frame)
    now = time.time()
    if int(now - start_time) > DURATION:
        break

我拿的是海康螢石的攝像頭測試是可以work的曼振,其中的rtsp url要根據(jù)你的實際情況進行修改几迄,另外獲取它的FPS值有點問題,所以直接寫死成25了冰评。

這段代碼有兩個地方需要特別說明下:

  • 如果你使用的是'pip install opencv-python'方式安裝CV庫的話映胁,由于GPL協(xié)議的問題,默認(rèn)是不支持H.264編碼的集索,所以你需要自己手動重新編譯opencv庫屿愚,并把h264的編碼功能加上去,詳見:https://stackoverflow.com/questions/33134985/cv2-videowriter-will-not-write-file-using-fourcc-h-264-with-logitech-c920-pyth
    說明务荆。
  • 即使你重新編譯了OpenCV庫,并把H264 Encoding的功能加上去后穷遂,還有一個坑是在fourcc賦值時不能寫成cv2.VideoWriter_fourcc('h','2','6','4')函匕,這好像是OpenCV庫的一個BUG,詳見:https://stackoverflow.com/questions/34024041/writing-x264-from-opencv-3-with-ffmpeg-on-linux
    說明蚪黑,解決辦法是直接寫成fourcc=0x21盅惜。
  • 因為編碼比較耗性能,所以如果你運行的機器性能不怎么樣的話忌穿,網(wǎng)絡(luò)視頻接受的速度將會大于編碼的速度抒寂,這時候會產(chǎn)生丟幀的現(xiàn)象,推薦的解決方案是實現(xiàn)兩個線程掠剑,其中一個線程負(fù)責(zé)從網(wǎng)絡(luò)攝像機中取視頻流并解碼屈芜,解碼后的圖片發(fā)送到一個隊列中去,另外一個線程負(fù)責(zé)從這個隊列中獲取圖片并進行編碼最后保存成指定封裝格式的視頻文件朴译。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末井佑,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子眠寿,更是在濱河造成了極大的恐慌躬翁,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盯拱,死亡現(xiàn)場離奇詭異盒发,居然都是意外死亡例嘱,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進店門宁舰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拼卵,“玉大人,你說我怎么就攤上這事明吩〖溲В” “怎么了?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵印荔,是天一觀的道長低葫。 經(jīng)常有香客問我,道長仍律,這世上最難降的妖魔是什么嘿悬? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮水泉,結(jié)果婚禮上善涨,老公的妹妹穿的比我還像新娘。我一直安慰自己草则,他們只是感情好钢拧,可當(dāng)我...
    茶點故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著炕横,像睡著了一般源内。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上份殿,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天膜钓,我揣著相機與錄音,去河邊找鬼卿嘲。 笑死颂斜,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的拾枣。 我是一名探鬼主播沃疮,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼放前!你這毒婦竟也來了忿磅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤凭语,失蹤者是張志新(化名)和其女友劉穎葱她,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體似扔,經(jīng)...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡吨些,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年搓谆,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片豪墅。...
    茶點故事閱讀 39,745評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡泉手,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出偶器,到底是詐尸還是另有隱情斩萌,我是刑警寧澤,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布屏轰,位于F島的核電站颊郎,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏霎苗。R本人自食惡果不足惜姆吭,卻給世界環(huán)境...
    茶點故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望唁盏。 院中可真熱鬧内狸,春花似錦、人聲如沸厘擂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽刽严。三九已至瘪撇,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間港庄,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工恕曲, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鹏氧,地道東北人。 一個月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓佩谣,卻偏偏與公主長得像把还,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子茸俭,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,652評論 2 354

推薦閱讀更多精彩內(nèi)容