python--openCV--视频处理
编码格式
视频容器中,一般有视频和音频数据,它们采取的编码方式不一样。
视频常见的编码方式通常有: 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() # 关闭所有窗口