在python中从视频中提取图像而无需加载整个视频

np8igboo  于 2023-03-11  发布在  Python
关注(0)|答案(1)|浏览(130)

我写了一个小程序,允许我通过一个文件对话框选择一个视频文件。选择后,我想显示一种缩略图。为此,我想导入一些图像到一个numpy数组显示这作为一个视频。问题是,在视频加载的过程需要几分钟,这取决于文件大小。所以导入整个视频不是一个选项。所以我正在寻找一种方法来提取图像从视频文件中没有加载整个视频。如果你知道一种方法,加载在一个视频快得多,这将帮助我以及。
谢了,塞伯勒斯
我试图加载在整个视频,这确实工作,但花了大约5分钟,这是真的不切实际的缩略图。

u91tlkcl

u91tlkcl1#

要从视频文件中提取图像而不加载整个视频,您可以使用OpenCVFFmpeg等视频处理库。这些库允许您从视频文件中提取帧,而不必将整个视频加载到内存中。
OpenCV示例:

import cv2

cap = cv2.VideoCapture('video_file.mp4')

fps = cap.get(cv2.CAP_PROP_FPS)

frame_interval = int(fps * 20) # 1 frame every 20 seconds

frame_count = 0
while True:
    ret, frame = cap.read()

    if not ret:
        break

    if frame_count % frame_interval == 0:
        # Do something with the frame
        cv2.imshow('Thumbnail', frame)

    frame_count += 1

cap.release()

FFmpeg示例:

import subprocess

    
    video_path = "/path/to/video.mp4"
    output_path = "/path/to/output/directory"
    frame_rate = 1
    
    command = ["ffmpeg", "-i", video_path, "-vf", "fps={}".format(frame_rate), "{}/%04d.jpg".format(output_path)]

    subprocess.call(command)

为了更快地加载视频,您可以尝试优化您的视频文件格式和压缩设置,以减少文件大小,使其更容易加载。您还可以考虑使用针对您的特定用例优化的视频编解码器(例如,用于Web视频流的H. 264/H. 265)

相关问题