[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: [pygame] Pygame non-MPEG1 video options?



Hi,
this is the first result in google for 'ffmpeg python piping' search:
http://zulko.github.io/blog/2013/09/27/read-and-write-video-frames-in-python-using-ffmpeg/

it is a good step by step tutorial, it helped me to make my player, however I made it for playing image sequences, not videos, but the approach is exactly the same.
There is one caveat however for linux, popen did not function well with ffmpeg (it makes the console non-responsive when an error occurs), so I need to kill the ffmpeg process manually from the script after a portion of frames is loaded.

Mikhail

On 14 February 2015 at 01:55, Brian Madden <brian@xxxxxxxxxxxxxxxxxx> wrote:
Hi Ted,

Thanks for these ideas! I'll try those settings for ffmpeg, but yeah, I already learned that the movie module isn't in Pygame for Mac.

I'd love an example of the pipe to ffmpeg, either here or off list via my email brian@xxxxxxxxxxxxxxxxxx. I assume that you get the pixels for a frame from ffmpeg and then blit them to a pygame surface manually?

Thanks!
Brian

On Fri, Feb 13, 2015 at 4:27 PM, Ted Hunt <ted.hunt@xxxxxxxxxxxx> wrote:
Hi Brian,

I had a similar problem to you (wrote an app thinking I'd be able to play video, only to later find problems). I did manage to get the movie module in pygame to play HD video. Here's the ffmpeg command I used to encode the video :-

ffmpeg -r 24 -f image2 -i SD%%04d.png -r 24 -g 18 -s 1920x1080 -vcodec mpeg1video -b:v 6000k -minrate 6000K -maxrate 6000k -bufsize 3276800 -intra SD.mpg

I think the trick is using a fixed bit rate. If while encoding ffmpeg reports a buffer underflow, then you'll need to increase the bit rate (always keep -b:v, -minrate and -maxrate the same).

Another problem which you may or may not discover is that not all pygame versions include the movie module. And it's possible that the movie module will be dropped in future versions. Because of this I decided not to use the movie module and instead I open a pipe to ffmpeg to decode my videos. The disadvantage with this is that ffmpeg has to be available to your app. The advantage is that you can use any encoding method ffmpeg supports. If you need an example of opening a pipe to ffmpeg, just let me know.

Cheers,

Ted.



On 14/02/2015 6:41 a.m., Brian Madden wrote:
Hi Everyone,

I have a Python app that's pretty much ready to go. Problem is that we need to be able to play videos. To be honest I never really looked too deep into Pygame's video support. I knew from the docs that it had to be MPEG-1 and that if you wanted audio then it had to have exclusive control of Pygame.media, so I kind of thought, "Ok, that's fine, I'll deal with all that later."

So now it's "later" and I'm dealing with it. :)

Problem is that we cannot get videos converted to MPEG-1 in a way that works reliably. We've gone through all the posts on this list and read a lot. Sometimes the videos play, sometimes not, sometimes we get SDL errors, sometimes we get garbage on the screen.. It's really kind of a mess.

So I've started looking into options for non-MPEG1 videos and I wonder if anyone has successfully done anything?

I found a blog post where a guy wrote a simple app that uses Pyglet to play the video and then for each frame it converts the Pyglet video frame to a Pyglet texture (kind of like Pyglet's version of a Surface), converts the pixels to a ctype, converts the ctype to the format Pygame can use, converts it to an image, then blits it to the Pygame window surface. That technically works but it's far too slow.. for hi-def videos we're only getting about 10fps.

So I wonder if there are any other alternatives? Like can we install SDL2 and use PySDL2 to play the video and somehow convert that to a Pygame surface? (I have no idea if surfaces between SDL1.2 and SDL2 are compatible, or if so if it would be possible to get them into Pygame.)

Or are there any other crazy ideas?

To be honest if we can't figure this out then I think we're going to have to go with something other than Pygame, which would be a lot of work, but I don't know of any other alternatives? Unfortunately I don't know C or C++ so I'm afraid I'm not much help in terms of contributing to Pygame.

Has anyone successfully taken a Python project based on Pygame and converted it to PySDL2? From what I've read it seems like there are many similarities since they're both SDL, but I don't know how much "other" work Pygame is doing, and whether if I recreated any of that in Python it will be fast enough?

Anyway, sorry I'm a bit all over the place. I wonder if anyone has any thoughts to share?

Thanks,
Brian

--
Brian Madden




This email is free from viruses and malware because avast! Antivirus protection is active.





--
Brian Madden