溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python怎么實(shí)現(xiàn)視頻分解成圖片及圖片合成視頻

發(fā)布時(shí)間:2022-04-02 10:45:40 來源:億速云 閱讀:614 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹了Python怎么實(shí)現(xiàn)視頻分解成圖片及圖片合成視頻的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡(jiǎn)單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇Python怎么實(shí)現(xiàn)視頻分解成圖片及圖片合成視頻文章都會(huì)有所收獲,下面我們一起來看看吧。

    一、python視頻拆分+圖片合成(源碼一)

    Python怎么實(shí)現(xiàn)視頻分解成圖片及圖片合成視頻

    1.python視頻拆分

    import cv2
     
    def video2frame(videos_path,frames_save_path,time_interval):
     
      '''
      :param videos_path: 視頻的存放路徑
      :param frames_save_path: 視頻切分成幀之后圖片的保存路徑
      :param time_interval: 保存間隔
      :return:
      '''
      vidcap = cv2.VideoCapture(videos_path)
      success, image = vidcap.read()
      count = 0
      while success:
        success, image = vidcap.read()
        count += 1
        if count % time_interval == 0:
          cv2.imencode('.jpg', image)[1].tofile(frames_save_path + "/frame%d.jpg" % count)
        # if count == 20:
        #   break
      print(count)
     
    if __name__ == '__main__':
       videos_path = r'E:\py\python3.7\test\test98youhuashiping\shipingchaifen\1.mp4'
       frames_save_path = r'E:\py\python3.7\test\test98youhuashiping\shipingchaifen'
       time_interval = 2#隔一幀保存一次
       video2frame(videos_path, frames_save_path, time_interval)

    2.python圖片合成

    import cv2
    import os
    import numpy as np
    from PIL import Image
     
     
    def frame2video(im_dir,video_dir,fps):
     
        im_list = os.listdir(im_dir)
        im_list.sort(key=lambda x: int(x.replace("frame","").split('.')[0]))  #最好再看看圖片順序?qū)Σ?
        img = Image.open(os.path.join(im_dir,im_list[0]))
        img_size = img.size #獲得圖片分辨率,im_dir文件夾下的圖片分辨率需要一致
     
     
        # fourcc = cv2.cv.CV_FOURCC('M','J','P','G') #opencv版本是2
        fourcc = cv2.VideoWriter_fourcc(*'XVID') #opencv版本是3
        videoWriter = cv2.VideoWriter(video_dir, fourcc, fps, img_size)
        # count = 1
        for i in im_list:
            im_name = os.path.join(im_dir+i)
            frame = cv2.imdecode(np.fromfile(im_name, dtype=np.uint8), -1)
            videoWriter.write(frame)
            # count+=1
            # if (count == 200):
            #     print(im_name)
            #     break
        videoWriter.release()
        print('finish')
     
    if __name__ == '__main__':
        im_dir = r'E:\py\python3.7\test\test98youhuashiping\shipingchaifen\pho/'#幀存放路徑
        video_dir = r'E:\py\python3.7\test\test98youhuashiping\shipingchaifen/test.mp4' #合成視頻存放的路徑
        fps = 30 #幀率,每秒鐘幀數(shù)越多,所顯示的動(dòng)作就會(huì)越流暢
        frame2video(im_dir, video_dir, fps)

    提示:路徑中不要出現(xiàn)中文和特殊字符,且書寫要規(guī)范!!

    二、python視頻拆分+圖片合成(源碼二)

    Python怎么實(shí)現(xiàn)視頻分解成圖片及圖片合成視頻

    import cv2
    import numpy as np
    import os
    os.chdir(r'E:\py\python3.7\test\test98youhuashiping\chaifen')
    
    ##讀取視頻,并逐幀分解成圖片
    cap = cv2.VideoCapture('1.mp4')  #打開一個(gè)視頻
    isOpened = cap.isOpened() #判斷是否打開
    print(isOpened)
    
    #獲取視頻的相關(guān)信息,視頻的每一幀圖片的寬度都是一致的
    fps = cap.get(cv2.CAP_PROP_FPS) #幀率,即每秒鐘由多少張圖片組成
    width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) #獲取寬度
    height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) #獲取高度
    print(fps,width,height)  #輸出相關(guān)信息
    
    i = 0  
    while (isOpened):
        #讀取視頻的前兩秒的圖像,共計(jì)2*int(fps)張
        if i ==int(fps)*2 :  
            break
        else:
            i = i+1
        (flag,frame) = cap.read() #讀取每一張 flag frame
        filename = 'image'+str(i)+'.jpg'
        #將讀取的圖片寫入文件中,
        if flag == True:
            cv2.imwrite(filename,frame,[cv2.IMWRITE_JPEG_QUALITY,100])  #確定圖片質(zhì)量,100算是高的
    print('end!')   
    
    ##讀取零散圖片(上面分解的圖片),并將其合成視頻
    img = cv2.imread('image1.jpg')
    imginfo = img.shape
    size = (imginfo[1],imginfo[0])  #與默認(rèn)不同,opencv使用 height在前,width在后,所有需要自己重新排序
    print(size)
    
    #創(chuàng)建寫入對(duì)象,包括 新建視頻名稱,每秒鐘多少幀圖片(10張) ,size大小
    #一般人眼最低分辨率為19幀/秒
    videoWrite = cv2.VideoWriter('2.mp4',-1,10,size) 
    
    for i in range(1,40):
        filename = 'image'+str(i)+'.jpg'
        img = cv2.imread(filename,1)  #1 表示彩圖,0表示灰度圖  
        
        #直接寫入圖片對(duì)應(yīng)的數(shù)據(jù)
        videoWrite.write(img)  
    
    videoWrite.release() #關(guān)閉寫入對(duì)象
    print('end')

    三、python視頻拆分(源碼三)

    Python怎么實(shí)現(xiàn)視頻分解成圖片及圖片合成視頻

    import cv2 #導(dǎo)入opencv模塊
    import os
    import time
     
    def video_split(video_path,save_path):
        '''
        對(duì)視頻文件切割成幀
        '''
        '''
        @param video_path:視頻路徑
        @param save_path:保存切分后幀的路徑
        '''
        vc=cv2.VideoCapture(video_path)
        #一幀一幀的分割 需要幾幀寫幾
        c=0
        if vc.isOpened():
            rval,frame=vc.read()
        else:
            rval=False
        while rval:
            rval,frame=vc.read()
            # 每秒提取2幀圖片
            if c % 2 == 0:
                cv2.imwrite(save_path + "/" + str('%06d'%c)+'.jpg',frame)
                cv2.waitKey(1)
            c=c+1
     
    DATA_DIR = r"E:\py\python3.7\test\test98youhuashiping\ceshi\mp4" #視頻數(shù)據(jù)主目錄
     
    SAVE_DIR = r"E:\py\python3.7\test\test98youhuashiping\ceshi\pho2" #幀文件保存目錄
     
    start_time = time.time()
    for parents,dirs,filenames in os.walk(DATA_DIR):
        #if parents == DATA_DIR:
        #    continue
     
        print("正在處理文件夾",parents)
        path = parents.replace("\\","//")
        f = parents.split("\\")[1]
        save_path = SAVE_DIR + "//" + f
        # 對(duì)每視頻數(shù)據(jù)進(jìn)行遍歷
        for file in filenames:
            file_name = file.split(".")[0]
            save_path_ = save_path + "/" + file_name
            if not os.path.isdir(save_path_):
                os.makedirs(save_path_)
            video_path = path + "/" + file
            video_split(video_path,save_path_)
     
    end_time = time.time()
    print("Cost time",start_time - end_time)

    關(guān)于“Python怎么實(shí)現(xiàn)視頻分解成圖片及圖片合成視頻”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“Python怎么實(shí)現(xiàn)視頻分解成圖片及圖片合成視頻”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI