介绍
- 在绝大多数的目标检测项目中,都是使用opencv这个开源的计算机视觉库来进行图片、视频或者摄像头的读写。
- 主要是VideoWriter对象,这里需要几个重要参数,输出文件名、宽width、高height、帧率fps和fourcc。除了fourcc,其它几项都很好理解
- 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下载
下载之后放在代码的同级目录下即可。
运行结果
完整代码
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()