python - VideoWriter 输出损坏的视频文件
问题描述
这是我保存 web_cam 流的代码。它正在工作,但输出视频文件存在问题。
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
# Define the codec and create VideoWriter object
#fourcc = cv2.cv.CV_FOURCC(*'DIVX')
#out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))
out = cv2.VideoWriter('output.avi', -1, 20.0, (640,480))
while(cap.isOpened()):
ret, frame = cap.read()
if ret==True:
frame = cv2.flip(frame,0)
# write the flipped frame
out.write(frame)
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
# Release everything if job is finished
cap.release()
out.release()
cv2.destroyAllWindows()
解决方案
由于错误的帧速率和帧分辨率,输出文件已损坏。使用此代码:
out = cv2.VideoWriter('output.avi', -1, 20.0, (640,480))
我们将每秒 fps/帧速率设置为 20。这是不正确的。此外,框架的宽度和高度是错误的。我通过从捕获的 web_cam 配置文件中获取 fps、宽度、高度来解决。
cap = cv2.VideoCapture(0) #web-cam capture
fps = cap.get(cv2.CAP_PROP_FPS)
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH) # float
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT) # float
out = cv2.VideoWriter('output.avi', -1,fps, (int(width), int(height)))
推荐阅读
- python - 使用 pandas 读取 CSV 文件时无法正确对齐行和列
- three.js - 如何在 Threejs 中获取更新的缓冲区属性
- python - 新列的多索引计算
- spring-batch - 如何验证 Reader 中的参数以进行查询
- python - 我怎样才能用python画出圆形的形状?
- sql - 经纬度搜索店铺周边的入驻用户
- javascript - ElementsFromPoints 不适用于 ResizeObserver
- firebase - Cloud Firestore - 仍然出现“任何用户都可以写入您的整个数据库”错误
- sql - 如何获取 SQL Server 中两个日期之间的天数?
- android - 通知警报持续声音