1. 帧率
帧率(FPS):每秒钟播放的帧数
两种方法,上代码
rtsp = 'videoData/test_video.flv'
# 初始化摄像头
cap = cv2.VideoCapture(rtsp)
fourcc = cv2.VideoWriter_fourcc(*'XVID')
fps = cap.get(5) # 这个是获取视频帧率
print(fps) # 25.0
print(cap.get(cv2.CAP_PROP_FPS)) # 25.0
2. 计算视频时长
# 2. 计算视频时长
def get_video_duration(filename):
cap = cv2.VideoCapture(filename)
if cap.isOpened():
rate = cap.get(5)
frame_num =cap.get(7)
duration = frame_num/rate
return duration
return -1
fileName = "videoData/test_video.flv"
duration = get_video_duration(fileName)
print(duration) # 89.68 秒
1. 通过帧数间隔截取视频帧
1.如果你想直接**通过帧数间隔截取**视频帧,那直接使用可以使用下面的代码:**
# 3. 通过帧数间隔截取视频帧
def capturePictureOnFrames(fileName):
c = 1
frameRate = 100 # 帧数截取间隔(每隔100帧截取一帧)
cap = cv2.VideoCapture(fileName)
print(cap.isOpened())
while (True):
ret, frame = cap.read()
if ret:
if (c % frameRate == 0):
print("开始截取视频第:" + str(c) + " 帧")
# 这里就可以做一些操作了:显示截取的帧图片、保存截取帧到本地
cv2.imwrite("./capture_image/" + str(c) + '.jpg', frame) # 这里是将截取的图像保存在本地
c += 1
cv2.waitKey(0)
else:
print("所有帧都已经保存完成")
break
capturePictureOnFrames(fileName)
image-20210906145253247
2. 通过时间间隔截取
1. 如果你想**通过时间间隔截取**视频帧,可以做一个时间到帧数的变换:**
假如你想每隔10秒截取一帧,那么就相当于你要每隔( FPS * 10 )帧截取一帧图像!
# 4. 通过时间间隔截取
def capturePictureOnTimes(fileName):
cap = cv2.VideoCapture(fileName)
c = 1
timeRate = 10 # 截取视频帧的时间间隔(这里是每隔10秒截取一帧)
FPS = cap.get(5)
while (True):
ret, frame = cap.read()
if ret:
frameRate = int(FPS) * timeRate # 因为cap.get(5)获取的帧数不是整数,所以需要取整一下(向下取整用int,四舍五入用round,向上取整需要用math模块的ceil()方法)
if (c % frameRate == 0):
print("开始截取视频第:" + str(c) + " 帧")
# 这里就可以做一些操作了:显示截取的帧图片、保存截取帧到本地
cv2.imwrite("./capture_image/" + str(c) + '.jpg', frame) # 这里是将截取的图像保存在本地
c += 1
cv2.waitKey(0)
else:
print("所有帧都已经保存完成")
break
cap.release()
image
3. 生成连续视频文件
直接上代码
# coding: utf-8
import datetime
import cv2
import os
#rtsp = 'rtsp://admin:admin@191.164.3.160:554/1/1'
rtsp = 'videoData/test_video.flv'
# 初始化摄像头
cap = cv2.VideoCapture(rtsp)
fourcc = cv2.VideoWriter_fourcc(*'XVID')
size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
fps = cap.get(5) # 这个是获取视频帧率
frame_count = 0
count = 0
while cap.isOpened():
isSuccess, frame = cap.read()
if isSuccess:
if frame_count % 120 == 0 or frame_count == 0:
frame_count = 0
count += 1
i = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
filename = 'continuityVideo/'+str(i) + '-' + str(count) + '.avi'
print(filename)
video_writer = cv2.VideoWriter(filename, fourcc, fps, size)
video_writer.write(frame)
frame_count = frame_count + 1
print(frame_count)
if isSuccess:
cv2.imshow('show', frame)
else:
video_writer.release()
portion = os.path.splitext(filename)
newname = portion[0] + '.mp4'
os.rename(filename, newname)
break
if frame_count % 120 == 0:
video_writer.release()
portion = os.path.splitext(filename)
newname = portion[0] + '.mp4'
os.rename(filename, newname)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
输出结果:
image-20210906150238808
网友评论