簡體   English   中英

使用 python 從網絡攝像頭修剪(刪除幀)實時視頻

[英]Trim (remove frames from) live video from webcam using python

我有一個捕獲視頻流的網絡攝像頭。 30 秒后,我想從一開始就刪除 1 秒的視頻並繼續捕獲視頻流等等。 簡而言之,我只想保存直播視頻的最新 30 秒。

OpenCV 不提供視頻處理

ffmpeg 修剪視頻但創建了一個新的輸出文件,我不想保留副本。

#Create a video write before entering the loop
#Create a video write before entering the loop
video_writer = cv2.VideoWriter(
    video_file, video_codec, fps, (int(cap.get(3)), int(cap.get(4)))
)

#video_file is the file being saved

start = time.time()
i=0
seconds='1'
while cap.isOpened():


    ret, frame = cap.read()
    if ret == True:
        cv2.imshow("frame", frame)
        if time.time() - start > 10:
            print('video > 10 sec')
        
            subprocess.call(['ffmpeg', '-i', video_file, '-ss', seconds, 'output.avi'])
            break

    # Write the frame to the current video writer
    video_writer.write(frame)
    if i%24 == 0:
        cv2.imwrite('image'+str(i)+'.jpg',frame)
    i+=1
    if cv2.waitKey(1) & 0xFF == ord("q"):
        break
else:
    break
cap.release()
cv2.destroyAllWindows()

我正在尋找的是我們如何能夠播放實時視頻並繼續保存未來的幀,以便視頻不超過 30 秒並保留最新的幀。

您可以使用段復用器

ffmpeg -i input -f segment -segment_time 30 -segment_wrap 2 -reset_timestamps 1 output_%d.avi

這將創建兩個文件: output_0.avioutput_1.avi 每 30 秒,輸出將在這些文件之間交替並覆蓋早期版本。

您可以使用-segment_wrap 1並僅輸出 1 個文件,但您可能會丟失視頻。 例如,在 32 秒停止錄制將使您獲得 2 秒的視頻,而不是 30 秒的視頻 + 2 秒的視頻。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM