• Python截取视频帧


    方式一

    遍历指定目录下所有的视频,按照指定时间间隔截取视频帧

    import os
    import cv2
    import sys
    import time
    
    def save_frame(time_in_sec, file_path):
        # 打开视频文件
        cap = cv2.VideoCapture(file_path)
        # 获取视频的帧率
        fps = cap.get(cv2.CAP_PROP_FPS)
        # 获取视频的总帧数
        total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
        duration = total_frames / fps
        num = 0
        while(num < duration):
            num = num + time_in_sec
            # 计算指定时间对应的帧数
            frame_number = int(num * fps)
    
            # 设置视频的当前帧
            cap.set(cv2.CAP_PROP_POS_FRAMES, frame_number)
    
            # 读取当前帧
            ret, frame = cap.read()
            if ret:
                timestamp = int(time.time())  # 获取当前时间戳
                save_path = f"img\\frame_{frame_number}_{timestamp}.jpg"
                # 保存当前帧为图片
                cv2.imwrite(save_path, frame)
                print("保存成功:" + save_path)
            else:
                print("读取视频帧失败")
    
        # 关闭视频文件
        cap.release()
    
    def traverse_directory(directory):
        for root, dirs, files in os.walk(directory):
            for file in files:
                video_path = os.path.join(root, file)
                print(video_path)
                save_frame(int(sys.argv[1]), video_path)
    
    # 遍历当前目录
    traverse_directory('E:\pro_2_jianke\现场视频数据')
    
    print("运行成功")
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48

    执行方式

    python3 文件名.py  时间间隔
    
    • 1

    方式二

    固定视频,手动输入指定时间点截取视频帧

    import os
    import cv2
    import sys
    import time
    
    
    def save_frame(time_in_sec, file_path):
        # 打开视频文件
        cap = cv2.VideoCapture(file_path)
    
        # 检查视频文件是否成功打开
        if not cap.isOpened():
            print("无法打开视频文件")
            return
    
        # 获取视频的帧率
        fps = cap.get(cv2.CAP_PROP_FPS)
    
        # 计算指定时间对应的帧数
        frame_number = int(time_in_sec * fps)
    
        # 设置视频的当前帧
        cap.set(cv2.CAP_PROP_POS_FRAMES, frame_number)
    
        # 读取当前帧
        ret, frame = cap.read()
        if ret:
            timestamp = int(time.time())  # 获取当前时间戳
            save_path = f"img/1_{frame_number}.jpg"
            # 保存当前帧为图片
            cv2.imwrite(save_path, frame)
            print("保存成功:" + save_path)
        else:
            print("读取视频帧失败")
        # 关闭视频文件
        cap.release()
    
    
    # 遍历当前目录
    file_path = 'E:\pro_2_jianke\\vedio\FullScreen_0_20231229T084812Z_20231229T095535Z.mp4'
    arr = [2, 115, 125, 853, 915, 972, 1076, 1111, 1200, 1319, 1430, 1453, 1800,
           200, 302, 304, 306, 308, 360, 430, 450, 457, 478, 660, 690, 797]
    for item in arr:
        save_frame(item, file_path)
    
    print("运行成功")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    直接执行文件

  • 相关阅读:
    Cesium源码编译使用(weixin公众号【图说GIS】)
    2023-11-01 node.js-electron-环境配置-记录
    算法排序6——快速排序(分治思想)
    NameNode 和 SecondaryNameNode 工作机制
    [JAVAee]IP数据包的组包与分包
    期权策略篇: 实现买方狂欢,让卖方稳赚不赔的策略
    腾讯云服务器安装配置rabbitmq
    Java第7章 类的高级特性
    数据结构与算法--001--时间和空间复杂度
    springSecurity认证功能初体验
  • 原文地址:https://blog.csdn.net/qq_45698181/article/details/136206300