Just threw a recurboy together and some videos won’t play. I downloaded some particlesintowaves packs for testing and grayscales (640x480) and refractions (1280x720) work but oscillations (720x480) don’t and my own videos (mostly 4:3 800x600) also won’t play. I let it sit after selecting just in case it was a loading issue or something but no dice. I haven’t taken a deep dive into the coding but anyone know if this little dude is picky about resolution? I don’t mind chopping some up but I’d rather not waste the time if there is an easier solution.
let me test with those videos you mentioned and get back to you
Very much appreciated. I doubt I’ll end up with any of those packs on the device but curious if there is something in the config that needs to be modified.
USB adapter finally came in the mail and everything plays beautifully from an external drive so I’ll just continue that way and maybe try to troubleshoot when I need a puzzle.
ok i will still test - nice to know whats happening in there.
in general sd resolution is preferred. and seems like mp4 files play best but i can test on a few different encodings and try narrow it down some more too. gonna try writing a proper FAQ for recurboy at some stage so it will be good to know!
I had a really similar issue and ended up digging into the code and figuring it out. It turns out there is a really longstanding bug in ofOMXPlayer where it’s not properly changing video resolutions.
Based on the resolutions sistermidnight gives I think it’s the same problem. If both video height and width are changing between one video and the next, ofOMXPlayer will set the EGL texture size to the proper resolution for the next video, but if only one of the video height/width changes, like your 640x480 –> 720x480, it’s still stuck on the previous resolution and won’t play. So hopefully cyberboy666 can get that in there soon (also got it added upstream to ofxOMXPlayer). I have a few other recurboy improvements that I’m looking to contribute as well ![]()
As far as best encodings for recurboy, I found something like this is the best for ffmpeg settings for targeting the Pi Zero hardware video decoder. You can let the recurboy itself handle encoding the videos, but in general it’s better to encode them ahead of time to reduce the amount of work the Pi has to do, and so they look better. I have a script I use to do this that I can also share.
ffmpeg -hide_banner -loglevel warning \
-i output.mp4 \
# See below for explanation, but basically handles resolution/cropping (848x640 or 640x480), preserves aspect ratio. 848x640 is used for widescreen since apparently mod 16 resolutions work best?
-vf "scale=iwsar:ih,setsar=1,crop=if(gte(dar,16/9),ih16/9,iw):ih,crop=if(gt(dar,1.5),min(iw,ih848/480),min(iw,ih4/3)):if(gt(dar,1.5),min(ih,iw480/848),min(ih,iw3/4)),scale=if(gt(dar,1.5),848,640):480,format=yuv420p,setsar=1" \
-c:v libx264 \ # H.264 codec
-profile:v main \ # the Pi seems to struggle with High profile, but main still works really well
-level:v 3.0 \ # Constrains bitrate at 10 Mbps, resolution to 780x480. plenty for 480p
-crf 23 \ # H.264 default, good balance of file size/quality
-preset slow \ # Best quality/encode time tradeoff (slower/slowest have diminishing returns), you can also set this to medium if you are impatient or have slow hardware
-pix_fmt yuv420p \ # Standard H.264 pixel format
-g 60 \ # Keyframe interval - once per 60 frames, helps with video seeking
-bf 2 \ # Bframes - get better compression efficiency
-an \ # Remove the audio track
-movflags +faststart \ # metadata at the begining of file, helps playback start faster
-map_metadata -1 \ # Remove metadata, optional
output.mp4
# Filter chain breakdown:
#
# scale=iw*sar:ih, Stretch width by SAR → square pixels
# setsar=1, Declare SAR=1 (pixels are now square)
#
# crop= Cap ultrawide at 16:9:
# if(gte(dar,16/9), if DAR >= 16:9
# ih*16/9, crop width to 16:9
# iw) else keep original width
# :ih, height: always keep original
#
# crop= Crop to exact output aspect ratio:
# if(gt(dar,1.5), if DAR > 1.5 (wide path → 848x480)
# min(iw,ih*848/480), width: trim to 848:480 if wider
# min(iw,ih*4/3)) else (narrow path → 640x480)
# : width: trim to 4:3 if wider
# if(gt(dar,1.5),
# min(ih,iw*480/848), height: trim to 848:480 if taller
# min(ih,iw*3/4)), else: trim to 4:3 if taller
#
# scale= Scale to target resolution:
# if(gt(dar,1.5),848,640) wide → 848, narrow → 640
# :480, height: always 480
#
# format=yuv420p, Force pixel format (yuv420p)
# setsar=1 Final SAR=1 safety net
cyberboy666 - happy to help write some docs/FAQs for this kind of stuff if interested
thanks a lot @l_i_m_b_s for looking into this! i will def get ur fixes into the next version release.
and also very happy for you to add some FAQ stuff. you should be able to contribute to the wiki here - feel free to add to the page i have or start a new one - whatever makes most sense to you.
let me know if theres any way i can help - and feel free to email me tim@cyberboy666.com also
tim