通过cv2读取本地视频,获取视频的分辨率,然后读取视频的指定帧保存到新的本地视频中,制作成延时摄影视频。
通过cap.set(cv2.CAP_PROP_POS_FRAMES, keys_frame)语句对特定帧的读取解决了循环遍历所有帧并通过if判断语句保存指定帧耗时过长的问题。
import cv2
out_fps = 30 # 输出文件的帧率
timeF = 240 # 视频帧计数间隔
keys_frame = 0 # 设置起始帧率
参考自【python】opencv教程CV2模块——视频捕获,延时摄影视频、鬼畜表情包密集制作
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)
参考自基于python+opencv提取视频指定关键帧
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()
最终实现效果如下。
【延时摄影】+魅族发布会现场搭建第二期