我写了一个小程序,允许我通过一个文件对话框选择一个视频文件。选择后,我想显示一种缩略图。为此,我想导入一些图像到一个numpy数组显示这作为一个视频。问题是,在视频加载的过程需要几分钟,这取决于文件大小。所以导入整个视频不是一个选项。所以我正在寻找一种方法来提取图像从视频文件中没有加载整个视频。如果你知道一种方法,加载在一个视频快得多,这将帮助我以及。谢了,塞伯勒斯我试图加载在整个视频,这确实工作,但花了大约5分钟,这是真的不切实际的缩略图。
u91tlkcl1#
要从视频文件中提取图像而不加载整个视频,您可以使用OpenCV或FFmpeg等视频处理库。这些库允许您从视频文件中提取帧,而不必将整个视频加载到内存中。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)
1条答案
按热度按时间u91tlkcl1#
要从视频文件中提取图像而不加载整个视频,您可以使用OpenCV或FFmpeg等视频处理库。这些库允许您从视频文件中提取帧,而不必将整个视频加载到内存中。
OpenCV示例:
FFmpeg示例:
为了更快地加载视频,您可以尝试优化您的视频文件格式和压缩设置,以减少文件大小,使其更容易加载。您还可以考虑使用针对您的特定用例优化的视频编解码器(例如,用于Web视频流的H. 264/H. 265)