通过cv2读取本地视频,获取视频的分辨率,然后读取视频的指定帧保存到新的本地视频中,制作成延时摄影视频。
通过cap.set(cv2.CAP_PROP_POS_FRAMES, keys_frame)语句对特定帧的读取解决了循环遍历所有帧并通过if判断语句保存指定帧耗时过长的问题。
- 调用库及相关参数设置
import cv2
out_fps = 30 # 输出文件的帧率
timeF = 240 # 视频帧计数间隔
keys_frame = 0 # 设置起始帧率
- 本地视频读取及保存视频参数设置
cap = cv2.VideoCapture('S00505-13202690.mp4')
# 获取捕获的分辨率
size =(int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)),
int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
# 设置要保存视频的编码,分辨率和帧率
video = cv2.VideoWriter(
"./time_lapse.mp4",
cv2.VideoWriter_fourcc('M','P','4','2'),
out_fps,
size)
- 读取指定帧并保存到视频文件中
if cap.isOpened():#判断是否正常打开
rval, frame = cap.read()
else:
rval = False
while rval:
cap.set(cv2.CAP_PROP_POS_FRAMES, keys_frame)
rval, frame = cap.read()
video.write(frame)
keys_frame += timeF
# 释放资源并写入视频文件
video.release()
cap.release()
最终实现效果如下。
【延时摄影】+魅族发布会现场搭建第二期