视频抽帧算法

这段代码定义了一个函数,用于从给定的视频文件中按指定帧率间隔抽取图片并保存到特定路径。它首先检查保存路径是否存在,如果不存在则创建。然后使用OpenCV读取视频,按照设定的帧率间隔保存每一帧为JPEG图片。最后,该脚本遍历指定目录下的所有视频文件,调用此函数进行处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# -*- coding:utf8 -*-
import cv2
import os
import shutil


def get_frame_from_video(_video_name, num_s, _save_path):
    """
    :param _video_name: 输入视频路径
    :param num_s: 保存图片的帧率间隔
    :param _save_path: 抽出的图片保存的位置
    """

    # 保存图片的路径
    path = _video_name.split('.mp4')[0]
    file_name = path.split('/')[-1]
    print(file_name)

    is_exists = os.path.exists(_save_path)
    if not is_exists:
        os.makedirs(_save_path)
        print('path of %s is build' % _save_path)
    # else:
    #     shutil.rmtree(save_path)
    #     os.makedirs(save_path)
    #     print('path of %s already exist and rebuild' % save_path)

    # 开始读视频
    video_capture = cv2.VideoCapture(_video_name)
    fps = video_capture.get(5)
    i = 0
    j = 0

    while True:
        success, frame = video_capture.read()
        i += 1
        if i % int(fps / num_s) == 0:
            # 保存图片
            try:
                j += 1
                save_name = _save_path + file_name + '_' + str(j).zfill(4) + '.jpeg'
                cv2.imwrite(save_name, frame)
            except:
                print('出现未知错误!跳过')

            print('image of %s is saved' % save_name)
        if not success:
            print('video is all read')
            break


if __name__ == '__main__':
    # 视频文件名字

    file_path = '/home/fuxingwen/code_script/data/vidio/'
    save_path = 'image_all/'
    files = os.listdir(file_path)  # 采用listdir来读取所有文件
    files.sort()
    interval = 1  # 设置每秒抽多少帧
    for file_ in files:
        video_name = file_path + file_
        get_frame_from_video(video_name, interval, save_path)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值