使用OpenCV实现图像和视频转换操作!

将视频按FPS拆解成单张图片

使用cv2.VideoCapture

cv2.VideoCapture(video_path)

计算FPS使用,注意部分压缩视频FPS存在丢帧情况,需要进行跳帧处理

fps = int(vidcap.get(cv2.CAP_PROP_FPS))

def video_split():
  video_path = 'test/video/video_01.mp4'
  video_name = video_path[:-4]
  vidcap = cv2.VideoCapture(video_path)
  success,image = vidcap.read()
  fps = int(vidcap.get(cv2.CAP_PROP_FPS))
  count = 0
  while success:
    image = image_process(image)
    cv2.imwrite("%s/%d.jpg" % (video_name, count), image)
    #if count % fps == 0:
    #    cv2.imwrite("%s/%d.jpg" % (video_name, int(count / fps)), image)
    print('Process %dth seconds: ' % int(count / fps), success)
    success,image = vidcap.read()
    count += 1

将单张图片集合合并成视频

使用cv2.VideoWriter

Python资源共享群:484031800

fourcc = cv2.VideoWriter_fourcc(‘D’, ‘I’, ‘V’, ‘X’) #不同视频编码对应不同视频格式(例:’I’,’4′,’2′,’0′ 对应avi格式)

video = cv2.VideoWriter( file_path, fourcc, fps, size)

def video_combine():
    path = 'test/video/video_01/'#文件路径
    filelist = os.listdir(path) #获取该目录下的所有文件名
    filelist.sort(key=alphanum_key)
    fps = 6
    size = (580,420) #图片的分辨率片
    file_path = 'test/video/video_01_out.mp4'#导出路径
    fourcc = cv2.VideoWriter_fourcc('D', 'I', 'V', 'X') #不同视频编码对应不同视频格式(例:'I','4','2','0' 对应avi格式)
    video = cv2.VideoWriter( file_path, fourcc, fps, size)
 
    for item in filelist:
        if item.endswith('.png'):     #判断图片后缀是否是.png
            item = path + '/' + item 
            image = cv2.imread(item)  #使用opencv读取图像,直接返回numpy.ndarray 对象,通道顺序为BGR ,注意是BGR,通道值默认范围0-255。
            video.write(image)        #把图片写进视频
    video.release() #释放

现在编码用到了CV_FOURCC获取编码格式:

CV_FOURCC(‘P’, ‘I’, ‘M’, ‘1’) = MPEG-1 codec

CV_FOURCC(‘M’, ‘J’, ‘P’, ‘G’) = motion-jpeg codec

CV_FOURCC(‘M’, ‘P’, ‘4’, ‘2’) = MPEG-4.2 codec

CV_FOURCC(‘D’, ‘I’, ‘V’, ‘3’) = MPEG-4.3 codec

CV_FOURCC(‘D’, ‘I’, ‘V’, ‘X’) = MPEG-4 codec

CV_FOURCC(‘U’, ‘2’, ‘6’, ‘3’) = H263 codec

CV_FOURCC(‘I’, ‘2’, ‘6’, ‘3’) = H263I codec

CV_FOURCC(‘F’, ‘L’, ‘V’, ‘1’) = FLV1 codec

你可能感兴趣的:(Python)