編碼格式
視頻容器中,一般有視頻和音頻數據,它們采取的編碼方式不一樣。
視頻常見的編碼方式通常有: x264、h264、mpeg-4
音頻常見的編碼方式通常有: mp3、AAC、flac
編碼的目的主要是為了高效存儲和傳輸,如果你不采用編碼壓縮的話,那么視頻可以看做是一系列的圖片序列,體積會非常大
FPS 幀率
我們讀初中物理時,大概了解過電影畫面一秒鍾 24 幀,其實對應的就是 24 fps,frame per second,有些手機有高速攝像的功能,原理就是能夠 1 秒鍾拍攝 960 張圖片,然后用正常的速度放映出來,所以細節比較多。fps 越高,細節越好,體驗也越好,但是文件容量也越高
播放:
import cv2 cap = cv2.VideoCapture("1.mp4") #打開視頻 while (1): ret, frame = cap.read() # 讀取一幀視頻 # ret 讀取了數據就返回True,沒有讀取數據(已到尾部)就返回False # frame 返回讀取的視頻數據--一幀數據 cv2.imshow("capture", frame) # 顯示視頻幀 if cv2.waitKey(40) & 0xFF == ord('q'): # 等候40ms,播放下一幀,或者按q鍵退出 break cap.release() # 釋放視頻流 cv2.destroyAllWindows() # 關閉所有窗口
寫入視頻文件:
import cv2 cap = cv2.VideoCapture("1.mp4") ret, frame = cap.read() height=frame.shape[0] width=frame.shape[1] fps = cap.get(cv2.CAP_PROP_FPS) #返回視頻的fps--幀率 size=cap.get(cv2.CAP_PROP_FRAME_WIDTH) #返回視頻的寬,等同於frame.shape[1] size1=cap.get(cv2.CAP_PROP_FRAME_HEIGHT) #返回視頻的高,等同於frame.shape[0] video = cv2.VideoWriter('2.mp4', cv2.VideoWriter_fourcc('m', 'p', '4', 'v'), fps, (width,height)) #創建視頻流對象 """ 參數1 即將保存的文件路徑 參數2 VideoWriter_fourcc為視頻編解碼器 fourcc意為四字符代碼(Four-Character Codes),顧名思義,該編碼由四個字符組成,下面是VideoWriter_fourcc對象一些常用的參數,注意:字符順序不能弄混 cv2.VideoWriter_fourcc('I', '4', '2', '0'),該參數是YUV編碼類型,文件名后綴為.avi cv2.VideoWriter_fourcc('P', 'I', 'M', 'I'),該參數是MPEG-1編碼類型,文件名后綴為.avi cv2.VideoWriter_fourcc('X', 'V', 'I', 'D'),該參數是MPEG-4編碼類型,文件名后綴為.avi cv2.VideoWriter_fourcc('T', 'H', 'E', 'O'),該參數是Ogg Vorbis,文件名后綴為.ogv cv2.VideoWriter_fourcc('F', 'L', 'V', '1'),該參數是Flash視頻,文件名后綴為.flv cv2.VideoWriter_fourcc('m', 'p', '4', 'v') 文件名后綴為.mp4 參數3 為幀播放速率 參數4 (width,height)為視頻幀大小 """ while (1): ret, frame = cap.read() cv2.imshow("capture", frame) video.write(frame) # 向視頻文件寫入一幀--只有圖像,沒有聲音 if cv2.waitKey(40) & 0xFF == ord('q'): # 等候40ms,播放下一幀,或者按q鍵退出 break cap.release() # 釋放視頻流 cv2.destroyAllWindows() # 關閉所有窗口