使用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反转视频的主要内容,如果未能解决你的问题,请参考以下文章

使用 OpenCV 在 Python 中反转图像

python+openCV (入门级)车道线检测 学习笔记

设置窗口可调整大小Python_OpenCV读取视频和图片

使用Numba加速OpenCV Python视频流代码。提升6.5倍性能

教程 | 如何使用DockerTensorFlow目标检测API和OpenCV实现实时目标检测和视频处理

基于OpenCV的视频处理 - 人脸检测