Problem in saving frames with getMovieFrame

Hi,

I am currently trying to get screenshots of the frames of a movie component (a 30s mp4 video). I would like to record a mp4 video of what happens in the screen, but I’m having some problems:

In the mp4 file video properties I can see that it has 30fps, so I would expect 900 frames shown in total by Psychopy. But, if I write print(frameN) in the Each Frame* section of the code component, the output is 1799.

In the code component, I tried to use win.getMovieFrame() in Each frame, and win.saveMovieFrames(“video.mp4”) in End Routine to create a video of the screen, but the video generated lasts more than 30s (33s), and it is composed by only 1023 frames (print(frameN) in the Each Frame* outputs 1023).

In addition, I tried to use win.getMovieFrame() and win.saveMovieFrames(“long”+ str(frameN) + “.png”) in Each Frame*, in order to save as an image file a screenshot of every frame. In this case, if I write print(frameN) in the Each Frame code section while creating the video, only 905 images are created.

Moreover, in the outputs there is written:
“6.5824 WARNING Multiple dropped frames have occurred - I’ll stop bothering you about them!”

That is the code. I would like the video stimulus position to change every 2s. Here two lists of random values are generated, one for the x and another for the y position values. Given that the video lasts 30s and it has 1799 frames, I multiplied 15 random numbers generated in the for loop 120 times. In this way, for 120 frames (about 2s) the positions should remain the same.


image

and in End routine I have written: win.saveMovieFrames(“video.mp4”)

What could be the problem?
(I don’t know if it may have something to do with it, but I’m trying to do this from my laptop, so I don’t have a very efficient graphic card)

Thank you in advance!!

Blockquote In the mp4 file video properties I can see that it has 30fps, so I would expect 900 frames shown in total by Psychopy. But, if I write print(frameN) in the Each Frame* section of the code component, the output is 1799.

Well, you video card runs with 60 Hz. To put it simply, it “shows” each frame of your video twice. Thus you end up with 1799 frames (30,000 ms / 1799 frames = 16.67 which is approximately your computer refresh rate).

best wishes Jens