Python_OpenCV視頻截取並保存


在圖像處理之前,我們需要對拿到手的數據進行篩選,對於視頻,我們需要從中截取我們需要的一段或幾段

整體思路比較簡單,通過設定截取視頻的起止時間(幀數),可以將該時間段內的圖像保存為新的視頻

直接上代碼:

"""
【函數名稱】 13 截取視頻 
【參數】 輸入參數 視頻文件名稱
【詳細介紹】 輸入不同時間段 進行截取拼接
【創建日期】 20191128 by wangxioabei
【修改日期】 NOTE.1: 
"""
def CutVideoFromFile(video_file_name,windows_name = 'videoShowing'):
    cap = cv2.VideoCapture(video_file_name)  # 打開視頻文件
    # 需要明確視頻保存的格式
    fourcc = cv2.VideoWriter_fourcc(*'XVID')
    fps = cap.get(cv2.CAP_PROP_FPS)
    print('幀率:%d'%fps)
    size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)),int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
    out = cv2.VideoWriter('BeltTear.avi',fourcc,fps, size)
    SaveTime = [[38*60+38,39*60+59],[42*60+54,44*60+11],[47*60+8,48*60+24],[51*60+20,52*60+39]]
    print(SaveTime[0][0])
    now_frame = 0
    while (cap.isOpened()):
        ret, frame = cap.read()  # 捕獲一幀圖像
        img_h, img_w, img_ch = frame.shape
        # print(frame.shape)
        if ret:
            # 【1】 不能直接將灰度或二值化的圖片保存成視頻,需要轉換成彩色
            if img_ch==1:
                frame = cv2.cvtColor(frame, cv2.COLOR_GRAY2BGR)
            # cv2.imshow(windows_name, frame)
            for i in range(len(SaveTime)):
                if now_frame > SaveTime[i][0]*fps and now_frame < SaveTime[i][1]*fps:
                    out.write(frame)
                    print(now_frame)
            now_frame += 1
            if now_frame > SaveTime[2][1]*fps:
                break;
            k = cv2.waitKey(1) & 0xFF
            if k == 27:
                break
            # cv2.waitKey(25)
        else:
            break
    cap.release()
    out.release()
    cv2.destroyAllWindows()

其中SaveTime列表 中嵌套的列表為截取視頻的時間s,也可以將其當做參數傳入,即可封裝整個函數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM