使用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()

参考

猜你喜欢

转载自blog.csdn.net/qq_40985985/article/details/126119983