日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python 摄像头录制帧率_基于opencv和python的可变帧速率IP摄像机视频记录

發(fā)布時間:2024/9/27 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 摄像头录制帧率_基于opencv和python的可变帧速率IP摄像机视频记录 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

首先,我想對我正在做的事情發(fā)表評論。在

我有一個IP攝像機通過一個帶以太網(wǎng)線的路由器連接到我的網(wǎng)絡(luò)(FOSCAM 9800p),我試圖用RTSP協(xié)議錄制一段視頻。我未來的打算是用opencv在中間添加一個小的視頻處理,但目前我想做一些測試來簡單地記錄下來。在

主要的問題是相機每秒傳送的幀數(shù)是可變的,也就是說,有時它傳送到18幀,其他的傳送到22幀,依此類推。當(dāng)以每秒幀數(shù)的固定速率錄制視頻時,最終發(fā)生的情況是,視頻播放的速度超過了應(yīng)有的速度

奇怪的是,當(dāng)我用opencv get(CAP_PROP_FPS)運行時,它返回了一個很大的值,比如180000.0

為了解決這個問題,我們要做的是讀取幀并將它們放入隊列中。從另一個由定時器事件()為了獲得固定的幀速率,我們閱讀它們并嘗試以固定的時間間隔寫入視頻。在

代碼如下:video_capture = cv2.VideoCapture("rtsp://"+user+":"+password+"@"+ip+":"+str(port)+"/videoMain")

if (video_capture.isOpened() == False):

print("Unable to read camera feed")

sys.exit()

frame_width = int(video_capture.get(3))

frame_height = int(video_capture.get(4))

video_writer =cv2.VideoWriter(output_filename,cv2.VideoWriter_fourcc(*'MP4V'), fps_to_save, (frame_width,frame_height))

input_buffer = queue.Queue(20)

finished = False

read_frames = 0

def readFile():

global finished

global read_frames

while not finished:

ret, frame = video_capture.read()

if not ret:

finished = True

while not finished:

try:

input_buffer.put_nowait(frame)

read_frames+=1

break

except queue.Full:

print("queue.Full")

pass

def processingFile():

global finished

written_frames = 0

repeated_frames = 0

time_per_frame_elapsed = 0.0

start_time=time.time()

ticker = threading.Event()

while True:

ticker.wait(time_per_frame-time_per_frame_elapsed)

time_per_frame_start=time.time()

try:

frame = input_buffer.get_nowait()

video_writer.write(frame)

writing_time = time.time()

if written_frames is 0:

start_time = writing_time

written_frames += 1

except queue.Empty:

if written_frames is not 0:

video_writer.write(frame)

writing_time = time.time()

written_frames += 1

repeated_frames += 1

except:

pass

total_elapsed_time = time.time() - start_time

print("total_elapsed_time:{:f}".format(total_elapsed_time))

if total_elapsed_time>time_to_save_seconds:

finished = True

ticker.clear()

print ("Playback terminated.")

break

time_per_frame_elapsed=time.time()-time_per_frame_start

print("Total readed frames:{:f}".format(read_frames))

print("Total frames repated:{:f}".format(repeated_frames))

print("Total frames writed:{:f}".format(written_frames))

tReadFile = threading.Thread(target=readFile)

tProcessingFile = threading.Thread(target=processingFile)

tReadFile.start()

tProcessingFile.start()

tProcessingFile.join()

tReadFile.join()

結(jié)果是接近我們想要的,但有時我們在時間上有顯著的差異。我們用大約10秒的短視頻進行測試,得到9.8秒的錄制時間。在

一開始這似乎不是一個嚴重的問題,但錯誤是累積的,也就是說,如果我們增加時間的增加,以便錄制更長時間的視頻,我們會有更嚴重的問題。在

我們想知道如何解決這種類型的視頻錄制問題的相機傳送幀可變率。這樣做是個好主意嗎?在

什么會產(chǎn)生《泰晤士報》的累積誤差?在

從已經(jīng)非常感謝你!在

大家好!在

總結(jié)

以上是生活随笔為你收集整理的python 摄像头录制帧率_基于opencv和python的可变帧速率IP摄像机视频记录的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。