无法跨试验播放 MP4 视频序列
Posted
技术标签:
【中文标题】无法跨试验播放 MP4 视频序列【英文标题】:Fail to play sequence of MP4 videos across trials 【发布时间】:2020-06-17 08:28:24 【问题描述】:我有 10 次试验和两个条件(在试验中随机分配),包括播放光流 mp4 电影或随机流 mp4 电影。为了加载和播放 mp4,我使用了 visual.MovieStim3
nBlocks = 4
nTrials = 10
nb_conditions = np.arange(1,3) # We have two conditions : condition 1 is Optic flow and condition 2 is Random flow
conditions = nb_conditions.repeat(nTrials/2) # 5 times condition1 and 5 times condition2
conditions_rand = np.random.permutation(nb_conditions) # Randomize the order of the conditions
# --- Load optic flow and random flow movies ---
optic_flow_movie = visual.MovieStim3(win, ‘optic_flow.mp4’)
random_flow_movie = visual.MovieStim3(win, ‘random_flow.mp4’)
# --- iterate through trials and play movies---
for trialcount in range(nTrials):
for Nframes in range(700):
if conditions_rand[trialcount] == 1:
optic_flow_movie.draw()
elif conditions_rand[trialcount] == 2:
random_flow_movie.draw()
win.flip()
win.close()
它开始播放 conditions_rand 数组上的第一个视频,然后以随机的时间间隔显示第二个视频,然后屏幕在冻结时再次长时间黑屏。因为它不会抛出任何错误,所以我不知道它为什么会这样。非常感谢您的帮助!
【问题讨论】:
您的代码看起来不错 - 不幸的是,这些电影播放性能问题通常与操作系统/显卡/您使用的MovieStim
类的版本之间的交互有关。在此处的支持论坛上报告了一个类似的问题:discourse.psychopy.org/t/… 我认为解决方案是在每次播放之前重新实例化电影,但在您的情况下,这会引入时间故障,因为您需要电影立即交替从一个到另一个。可能值得在该论坛上发布此内容
同样对于性能问题,重要的是视频的像素尺寸不大于正在播放的窗口的像素尺寸,否则只会浪费内存和处理周期。可能不是这样,但只是想我会检查一下。
最后,只有一个可能的编码建议:在两个 for
循环之间插入 optic_flow_movie.seek(0)
和 random_flow_movie.seek(0)
,这样电影在再次播放之前会重新设置到它们的起始帧。
@MichaelMacAskill 将建议的两条线放在 for 循环之间解决了问题,非常感谢您的帮助!
感谢您的反馈,很高兴这有效。评论可以随时删除,所以我现在将其发布为答案,作为未来读者的指南。
【参考方案1】:
尝试插入:
optic_flow_movie.seek(0)
random_flow_movie.seek(0)
在两个 for 循环之间,因此每部电影在再次播放之前都会重置为其起始帧。
【讨论】:
安装最新版本的 PsychoPy 后,我遇到了同样的问题。我有 10 次试验,两个视频随机交替。试了两次后,窗口冻结,没有报错。 我发现在每个条件下播放正确数量的电影重复的唯一方法是在optic_flow_movie.draw()
之前添加optic_flow_movie.play()
,在random_flow_movie.draw()
之前添加random_flow_movie.play()
。通过添加.play()
,会出现另一个问题,即视频在每次试验中动画化之前都会冻结 2 秒。我真的很感谢这个问题的帮助,我尝试了很多东西,但我仍然卡住了......谢谢:)以上是关于无法跨试验播放 MP4 视频序列的主要内容,如果未能解决你的问题,请参考以下文章