Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x cv2:Can';t创建特定持续时间的视频_Python 3.x_Cv2_Psychopy - Fatal编程技术网

Python 3.x cv2:Can';t创建特定持续时间的视频

Python 3.x cv2:Can';t创建特定持续时间的视频,python-3.x,cv2,psychopy,Python 3.x,Cv2,Psychopy,我在用PsychoPy创建持续30秒的网络摄像头视频时遇到问题。取而代之的是,视频的长度约为43秒。我的代码如下(略加编辑): 来自psychopy导入区域设置、视觉、核心、事件、数据、gui、麦克风 进口cv2 #设置计时器: trialTimer=core.Clock() #开始录像: cap=cv2.VideoCapture(0+cv2.cap\u DSHOW) fourcc=cv2.视频编写器_fourcc(*“XVID”) out=cv2.VideoWriter(“{}.avi.”格式

我在用PsychoPy创建持续30秒的网络摄像头视频时遇到问题。取而代之的是,视频的长度约为43秒。我的代码如下(略加编辑):

来自psychopy导入区域设置、视觉、核心、事件、数据、gui、麦克风 进口cv2 #设置计时器: trialTimer=core.Clock() #开始录像: cap=cv2.VideoCapture(0+cv2.cap\u DSHOW) fourcc=cv2.视频编写器_fourcc(*“XVID”) out=cv2.VideoWriter(“{}.avi.”格式(视频路径),fourcc,20.0,(640480)) trialTimer.reset() 而trialTimer.getTime()<30: ret,frame=cap.read() 输出。写入(帧) #停止录像: 第1章释放() out.release() cv2.destroyAllWindows()
视频循环清晰(即不太快或太慢),因此我不太确定如何调整才能将视频长度缩短到30秒。

能否显示时间变量是什么,以及如何获得此变量?它看起来没有更新,因此while循环不满足退出条件我正在通过PsychoPy进行网络摄像头视频捕获,因此计时器变量是一个内置函数。我编辑了这篇文章以更好地反映这一点。我删除了我的答案,因为我知道我认为我理解问题是什么(但不是你如何解决它);基本上,计时器似乎是获取时钟对象的时间,而不是视频。有关详细信息,请参阅。我将
VideoWriter
函数中的第三个参数(fps)更改为29.4333,使视频现在为30秒;然而,它看起来像是在快进。现在我可能只需要处理这个问题。你的循环被限制在最后30秒,但它的迭代速率(因此对图像进行采样)不受限制,也不与相机的帧速率同步。如果您使用的是PsychoPy窗口,则在循环中注入
window.flip()
,将控制循环,使其在每次屏幕刷新(通常为60 Hz)时仅从相机中采集一幅图像,或者您可以在每秒钟刷新时抓取一幅图像,从而以30 Hz的频率录制视频,诸如此类。你能告诉我时间变量是什么,以及你是如何得到它的吗?它看起来没有更新,因此while循环不满足退出条件我正在通过PsychoPy进行网络摄像头视频捕获,因此计时器变量是一个内置函数。我编辑了这篇文章以更好地反映这一点。我删除了我的答案,因为我知道我认为我理解问题是什么(但不是你如何解决它);基本上,计时器似乎是获取时钟对象的时间,而不是视频。有关详细信息,请参阅。我将
VideoWriter
函数中的第三个参数(fps)更改为29.4333,使视频现在为30秒;然而,它看起来像是在快进。现在我可能只需要处理这个问题。你的循环被限制在最后30秒,但它的迭代速率(因此对图像进行采样)不受限制,也不与相机的帧速率同步。如果您使用的是PsychoPy窗口,则在循环中注入
window.flip()
,将控制循环,使其在每次屏幕刷新(通常为60 Hz)时仅从相机中采集一幅图像,或者您可以在每秒钟刷新时抓取一幅图像,从而以30 Hz的频率录制视频,依此类推。
from psychopy import locale_setup, visual, core, event, data, gui, microphone
import cv2

#Set up Timer:
trialTimer = core.Clock()

#Begin Video Recording:
cap = cv2.VideoCapture(0 + cv2.CAP_DSHOW)
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('{}.avi'.format(video_path),fourcc, 20.0, (640,480))

trialTimer.reset()

while trialTimer.getTime() < 30:
    ret, frame = cap.read()
    out.write(frame)

#Stop video recording:
cap.release()
out.release()
cv2.destroyAllWindows()