使用Python,OpenCV反转视频
Posted 程序媛一枚~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Python,OpenCV反转视频相关的知识,希望对你有一定的参考价值。
使用Python,OpenCV反转视频
这篇博客将介绍如何使用Python,OpenCV反转视频,可以通过先把帧都保存下来在反转但太浪费时间和内存,用本文的方法又简洁又快速。
效果图
原始视频:
反转视频:
源码
# 反转视频
# USAGE
# python reverse_video.py --video images/xz.mp4
# python reverse_video.py --video images/xz.mp4 --codec MP4V
import cv2
import argparse
# 构建命令行参数及解析
# -i 输入图片路径
ap = argparse.ArgumentParser()
ap.add_argument("-v", "--video", required=False, default="video/.mp4", type=str,
help="path to input video")
ap.add_argument("-c", "--codec", type=str, default="MJPG",
help="codec of output video,MJPG对应avi,MP4V对应mp4")
args = vars(ap.parse_args())
cap = cv2.VideoCapture(args['video'])
# 获取总帧数
frames = cap.get(cv2.CAP_PROP_FRAME_COUNT)
# 获取每秒帧数
fps = cap.get(cv2.CAP_PROP_FPS)
# 计算视频的宽度、高度
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
# 获取视频最后一帧的位置
frame_index = frames - 1
# 打印总帧数,fps
print("No. of frames are : ".format(frames))
print("FPS is :".format(fps))
# 启动视频写入Writer MJPG对应avi,MP4V对应mp4
fourcc = cv2.VideoWriter_fourcc(*args["codec"])
if ("MJPG" == args["codec"]):
# 以原视频的一半宽高写入新的视频
out = cv2.VideoWriter('out/reversed2.avi', fourcc, fps, (int(width * 0.5), int(height * 0.5)))
elif ("MP4V" == args["codec"]):
# 以原视频的一半宽高写入新的视频
out = cv2.VideoWriter('out/reversed2.mp4', fourcc, fps, (int(width * 0.5), int(height * 0.5)))
# 借助opens() 函数检查一下视频的实例是否ok
if (cap.isOpened()):
while (frame_index != 0):
cap.set(cv2.CAP_PROP_POS_FRAMES, frame_index)
ret, frame = cap.read()
cv2.imshow('frame', frame)
frame = cv2.resize(frame, (int(width * 0.5), int(height * 0.5)))
out.write(frame)
frame_index = frame_index - 1
if (frame_index % 100 == 0):
print(frame_index)
out.release()
cap.release()
cv2.destroyAllWindows()
参考
以上是关于使用Python,OpenCV反转视频的主要内容,如果未能解决你的问题,请参考以下文章
使用Numba加速OpenCV Python视频流代码。提升6.5倍性能