asd*_*fjk 5 python video screenshot video-processing
这个想法是,用户应该能够从他们的本地机器加载视频,并告诉程序每 5 秒或 30 秒从视频中截取一次屏幕截图。有没有图书馆可以帮助我完成这项任务?关于如何进行的任何想法都会有所帮助。
通过发出以下命令安装 opencv-python(这是一个非官方的 Python 预构建 OpenCV 包):
Run Code Online (Sandbox Code Playgroud)pip install opencv-python
# Importing all necessary libraries
import cv2
import os
import time
# Read the video from specified path
cam = cv2.VideoCapture("C:/Users/User/Desktop/videoplayback.mp4")
try:
# creating a folder named data
if not os.path.exists('data'):
os.makedirs('data')
# if not created then raise error
except OSError:
print('Error: Creating directory of data')
# frame
currentframe = 0
while (True):
time.sleep(5) # take schreenshot every 5 seconds
# reading from frame
ret, frame = cam.read()
if ret:
# if video is still left continue creating images
name = './data/frame' + str(currentframe) + '.jpg'
print('Creating...' + name)
# writing the extracted images
cv2.imwrite(name, frame)
# increasing counter so that it will
# show how many frames are created
currentframe += 1
else:
break
# Release all space and windows once done
cam.release()
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)
上面的答案部分正确,但这里的 time.sleep 根本没有帮助,反而使过程变慢。但是,如果您想在视频的某个时间截取屏幕截图,您需要了解每次执行“ret,frame = cam.read()”时,它都会读取视频的下一帧。视频中的每一秒都有多少帧取决于视频。你可以使用以下方法得到这个数字:
frame_per_second = cam.get(cv2.CAP_PROP_FPS)
Run Code Online (Sandbox Code Playgroud)
因此,如果您需要截取第三秒的屏幕截图,您可以按照上述答案中的方式保留迭代,然后添加
if currentframe == (3*frame_per_second):
cv2.imwrite(name, frame)
Run Code Online (Sandbox Code Playgroud)
这将在第 3 秒截取第一帧的屏幕截图。
| 归档时间: |
|
| 查看次数: |
4914 次 |
| 最近记录: |