如何减慢使用 cv2 捕获的视频?
How to slow down a video captured with cv2?
我的代码的问题是视频保存后,它被加速了很多,我注意到如果我改变 cv2.waitkey() 中的整数值,视频改变速度,但是即使我将它设置为 1,它仍然会加速
import pyautogui
import os, cv2, threading
import numpy
import time
#paths
path_videos = os.chdir('C:/Users/mypcname/Desktop/screenrec/videos')
codec = cv2.VideoWriter_fourcc(*'XVID')
video_file = cv2.VideoWriter(os.getcwd()+ '\' + 'VIDEO2' + '.avi', codec, 23.976, (1920, 1080))
def rec_loop():
global rec, path_videos, path_frames, frame_number, codec, video_file
while True:
#takes BGR screenshot and makes it in a NumPy array
capture = pyautogui.screenshot()
frame = numpy.array(capture)
#converts BGR screenshot into RGB
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
#shows the recording screen live
cv2.imshow('REC', frame)
video_file.write(frame)
#cancel recording
if cv2.waitKey(250) == ord('Q'):
break
cv2.destroyAllWindows()
video_file.release()
rec_thread = threading.Thread(target=rec_loop)
rec_thread.start()
几件事...
您似乎启动了一个新线程,然后并行执行任何操作,因此表面上看这不是很明智。
您可能会发现 pyautogui
每秒只能捕获大约 2-3 帧,因此您只能以该速率将它们传递给视频制作者,因此它们看起来会加速.您可以在创建输出文件之前捕获 2-10 帧并计算您达到的速率并将其传递。
您将能够通过 ffmpeg
获得更好的帧率,如果
这就是你想要的。
我的代码的问题是视频保存后,它被加速了很多,我注意到如果我改变 cv2.waitkey() 中的整数值,视频改变速度,但是即使我将它设置为 1,它仍然会加速
import pyautogui
import os, cv2, threading
import numpy
import time
#paths
path_videos = os.chdir('C:/Users/mypcname/Desktop/screenrec/videos')
codec = cv2.VideoWriter_fourcc(*'XVID')
video_file = cv2.VideoWriter(os.getcwd()+ '\' + 'VIDEO2' + '.avi', codec, 23.976, (1920, 1080))
def rec_loop():
global rec, path_videos, path_frames, frame_number, codec, video_file
while True:
#takes BGR screenshot and makes it in a NumPy array
capture = pyautogui.screenshot()
frame = numpy.array(capture)
#converts BGR screenshot into RGB
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
#shows the recording screen live
cv2.imshow('REC', frame)
video_file.write(frame)
#cancel recording
if cv2.waitKey(250) == ord('Q'):
break
cv2.destroyAllWindows()
video_file.release()
rec_thread = threading.Thread(target=rec_loop)
rec_thread.start()
几件事...
您似乎启动了一个新线程,然后并行执行任何操作,因此表面上看这不是很明智。
您可能会发现
pyautogui
每秒只能捕获大约 2-3 帧,因此您只能以该速率将它们传递给视频制作者,因此它们看起来会加速.您可以在创建输出文件之前捕获 2-10 帧并计算您达到的速率并将其传递。您将能够通过
ffmpeg
获得更好的帧率,如果 这就是你想要的。