Opencv学习笔记(十一):opencv通过mp4保存为H.264视频

文章目录

  • 介绍
  • 如何解决
  • 运行结果
  • 完整代码

介绍

  1. 在绝大多数的目标检测项目中,都是使用opencv这个开源的计算机视觉库来进行图片、视频或者摄像头的读写。
  2. 主要是VideoWriter对象,这里需要几个重要参数,输出文件名、宽width、高height、帧率fps和fourcc。除了fourcc,其它几项都很好理解
  3. FourCC是一个4字节码,用来表示视频编码器,网站 fourcc.org
    列出了所有可用的编码器。在VideoWriter中既可以写成*‘MJPG’,也可以写成’M’, ‘J’, ‘P’, ‘G’。但是并不是说,所有的编码器都可以使用。
    4.h264编码器对于opencv来说是不支持的,如果强行使用此类型会出现以下错误

[ERROR:0] global /build/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp (2774) open Could not open codec libopenh264, error: Unspecified error

如何解决

为解决以上问题,可通过使用cisco开源的openh264。
首先我们要去https://github.com/cisco/openh264/releases,找到对应版本的dll下载
Opencv学习笔记(十一):opencv通过mp4保存为H.264视频_第1张图片
下载之后放在代码的同级目录下即可。

运行结果

在这里插入图片描述

完整代码


import cv2
cap = cv2.VideoCapture('test.mp4')
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = cap.get(cv2.CAP_PROP_FPS)
fourcc = int(cv2.VideoWriter_fourcc(*'avc1'))
out = cv2.VideoWriter('output.mp4', fourcc, fps, (width,  height))
count = 0
while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        print("read over or error!")
        break
    out.write(frame)
    cv2.imshow("result", frame)
    if cv2.waitKey(1) & 0xFF == 27:  # 按q退出
        break
out.release()
cap.release()
cv2.destroyAllWindows()

你可能感兴趣的:(#,Opencv,opencv,计算机视觉,学习)