视频抽帧转图片——Python脚本

这是一个使用Python和OpenCV库将视频转换为图片的脚本。脚本首先定义了支持的视频格式,然后遍历指定的视频路径,检查每个路径下的文件,对视频文件进行转换,将生成的图片保存到特定的存储目录。如果目录不存在,脚本会自动创建。
摘要由CSDN通过智能技术生成

先上代码:

网上找的脚本python 实现将视频转换为图片

"""
将视频转换为图片,可以为多个文件夹下的图片。
注:在程序使用前需先配置好main中的地址
视频路径:video_path_list = [path1, path2, ...](路径数量可以为[1,n],每个路径下的视频数也可为[1,m])
    paht1                path2             ....
     |------video1.avi      |-----video1.avi
     |------vidoe2.avi      |-----...
     |------....
图片存储路径:image_save_dir = save_path(存储方式则将按以下方式)
    save_path
     | -------path1_name
                |----video1
                        |----jpg1.jpg
                        |----jpg2,jpg
                |----video2
                ...
     |-------path2_name
     ...
"""
import cv2
import os
from pathlib import Path

VID_FORMATS = ('.mov', '.avi', '.mp4', '.mpg',  '.mpeg', '.m4v', '.wmv', '.mkv', '.mp3')


def videos2images(root_video_path, root_save_dir):
    for video_dir_path in root_video_path:
        # 1.检测读取文件路径是否正确
        path_video = Path(video_dir_path)
        if path_video.is_dir():
            print(video_dir_path + '\t ok')
            videos = os.listdir(video_dir_path)
        else:
            print('\033[31mLine36 error: \033[31m' + video_dir_path + 'is not exist!')
            return

        # 2. 生成存储文件夹
        save_name_dir = Path(path_video.name)
        save_name_dir = os.path.join(root_save_dir, save_name_dir)
        if not os.path.exists(save_name_dir):
            os.makedirs(save_name_dir)

        file_count = 0
        for video in videos:
            # 判断是否为视频文件,如果不是视频文件则跳过并进行说明
            if Path(video).suffix in VID_FORMATS:
                file_count += 1  # 视频文件数+1
                save_jpg_dir = os.path.join(save_name_dir, Path(video).stem)
                if not os.path.exists(save_jpg_dir):
                    os.makedirs(save_jpg_dir)
                each_video_path = os.path.join(path_video, video)
                save_dir = save_jpg_dir
            else:
                print('\033[33mLine56 warning: \033[33m' + os.path.basename(video) + ' is not a video file, so skip.')
                continue

            # 3. 开始转换。打印正在处理文件的序号和他的文件名,并开始转换
            print('\033[38m' + str(file_count) + ':' + Path(video).stem + '\033[38m')
            cap = cv2.VideoCapture(each_video_path)

            flag = cap.isOpened()
            if not flag:
                print("\033[31mLine 65 error\033[31m: open" + each_video_path + "error!")

            frame_count = 0  # 给每一帧标号
            while True:
                frame_count += 1
                flag, frame = cap.read()
                if not flag:  # 如果已经读取到最后一帧则退出
                    break
                if os.path.exists(
                        save_dir + str(frame_count) + '_t.jpg'):  # 在源视频不变的情况下,如果已经创建,则跳过
                    break
                cv2.imwrite(save_dir + '\\' + str(frame_count) + '_t.jpg', frame) #图片名字

            cap.release()
            print('\033[38m' + Path(video).stem + ' save to ' + save_dir + 'finished. \033[38m')  # 表示一个视频片段已经转换完成


if __name__ == '__main__':
    # 需要转换的视频路径列表,直达视频文件(自定义修改)
    video_path_list = [r'E:\Code\feature_extraction_svm\video/', r'E:\Code\feature_extraction_svm\video2'] # 两个源文件夹

    # 预期存储在的主文件夹,即'result'文件夹下
    image_save_dir = r'E:\Code\feature_extraction_svm\result2'
    path_save = Path(image_save_dir)
    if not path_save.exists():
        path_save.mkdir()
    # 进行转换
    videos2images(video_path_list, image_save_dir)

结果展示:

成功运行:

 视频所在文件夹:

图片导出位置如下所示:

主程序

视频路径和存储输出路径
原博是支持多个路径 每个路径下多个视频的

video_path_list = [r'video1',r'video2']
image_save_dir = r'results'

判断存储路径是否存在,若不存在则创建。

    if not path_save.exists():
        path_save.mkdir()

进入自定义的转换函数

遍历“路径列表for video_dir_path in root_video_path:

1.检测读取文件路径是否正确

 # 1.检测读取文件路径是否正确
        path_video = Path(video_dir_path)
        if path_video.is_dir():
            print(video_dir_path + '\t ok')
            videos = os.listdir(video_dir_path)
        else:
            print('\033[31mLine36 error: \033[31m' + video_dir_path + 'is not exist!')
            return

python系列13:python中Path常用功能

path_video = Path(video_dir_path)
拉出单个路径地址判断
.is_dir()判断路径是否存在
若存在路径赋值给videos
若不存在输出警告

'\033[31mLine36 error: \033[31m' + video_dir_path + 'is not exist!' 意为
(31m:前景色红色)Line36 error: 地址is not exist!

如图所示:

该错误为绝对路径具体到某个视频,把黄线处删除即可

参考文章:【脚本解析笔记】将视频转为图片_是孑然呀的博客-CSDN博客

### 回答1: Java可以通过使用相关的第三方库来实现视频文字提取。其中,使用Tesseract OCR库是一种常见的方法。 首先,我们需要将视频换为图像序列。可以使用FFmpeg工具将视频换为一系列图像帧。这一步骤可以通过Java的Runtime类来执行外部命令来完成。 然后,我们可以使用Tesseract OCR库来对每一帧图像进行OCR识别,将图像中的文字提取出来。Tesseract是一个开源的OCR引擎,可以识别图片中的文本,并将其换为可编辑的文本格式。可以使用Tesseract的Java API来实现这个过程。 将每一帧图像传递给Tesseract进行OCR识别,可以通过将图像加载到Java中,然后将其换为Tesseract所需的格式,如TIFF或JPEG。可以使用Java的图像处理库,如Java Advanced Imaging (JAI)或OpenCV来完成这个步骤。 接下来,将处理后的图像传递给Tesseract进行文本提取。Tesseract将图像中的文本识别出来,并将其换为可编辑的文本格式。可以使用Tesseract的Java API中的方法来实现这个步骤。 最后,将提取的文字保存到文件或数据库中,以供后续处理和分析使用。可以使用Java的文件操作API来实现这个步骤。 综上所述,通过使用Java和相关的第三方库,如FFmpeg和Tesseract OCR,我们可以实现视频文字的提取。这个过程包括将视频换为图像序列,对每一帧图像进行OCR识别,将提取的文字保存到文件或数据库中。 ### 回答2: 要实现Java中的视频文字提取,可以按照以下步骤进行: 1. 首先,需要使用Java的多媒体库,如FFmpeg或JavaCV,引入相关依赖。 2. 根据视频文件的路径,使用库提供的类和方法加载视频文件,并准备进行处理。 3. 接下来,需要将视频分解成一系列的帧。可以使用库提供的类将视频分解成图像序列,每一帧都是一个图像。 4. 对每一帧图像进行文字提取。可以使用OCR(光学字符识别)技术,通过处理每一帧图像,提取其中的文字信息。Java中有很多OCR库,如Tesseract OCR和AparOCR等,可以根据需要选择合适的库。 5. 对提取到的文字进行整理和处理。可以根据需求,对文字进行过滤、去重、排序等操作。 6. 最后,可以将提取到的文字保存到文件或数据库中,或进行其他后续处理。 需要注意的是,视频文字提取是一个相对复杂的任务,需要借助一些专门的库和算法,并且对计算机视觉和光学字符识别等领域有一定的了解。在实际应用中,还需要根据具体场景和需求进行调优和优化。 ### 回答3: Java可以通过使用一些开源库和工具来实现视频文字提取。其中最常用的是使用OCR(光学字符识别)技术。 首先,需要将视频换为图像序列。可以使用FFmpeg等工具将视频拆分为一系列帧图像。这些图像在Java中可以使用像JavaCV或OpenCV这样的库进行处理。 接下来,使用OCR库如Tesseract,Google Cloud Vision API或百度OCR等来识别图像中的文字。这些库可以将图像中的文字换为可用的文本。 在图像中识别到的文字可能有误识别或错误。因此,可以使用文本处理技术来进一步净化和改进识别结果。例如,可以使用NLP(自然语言处理)技术来处理文本,进行拼写纠错、语义分析和关键字提取等操作。 最后,将得到的文本进行整理和存储,以便进行后续分析或应用。可以将提取到的文字保存到数据库中,或者导出为文本文件等。 需要注意的是,视频文字提取是一个复杂的任务,其结果受多种因素影响,包括视频的质量、光照条件、文字大小和字体等。因此,在实际应用中需要进行多次尝试和优化,以获得更准确和可靠的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值