I have a PSP 1000 (the very first model) that I use to playback video on, just for fun.
ffmpeg used to have a preset output for it, but no more. Encoding for the hardware is simple enough, with the right settings.
These playback settings are designed to run with the most recent firmware, version 6.61.
Playback is at 480×272, with a 16:9 aspect ratio.
The video player does have support for chapters, but adding them to the MP4 doesn't have any effect. [Note: when using HandBrake. Probably need to use the proper supported subtitle formats for MP4]
The official manual lists these MPEG4 formats that can be played:
- MPEG-4 Simple Profile (AAC)
- H.264/MPEG-4 AVC Main Profile (CABAC) (AAC)
- Baseline Profile (AAC)
The baseline profile has less features than the main. The x264 encoding settings using the Main profile will set the amount of B-Frames to 3. However, the PSP won't work with any encoding higher than 1. So any changes to the default encoding here reflect that one difference. (also note that the linked article above disables more features than this – I started with his configuration – which worked great – and then tweaked until I found mine)
I haven't tested encoding anything in a higher preset than medium, and don't really want to chase that down since it's such a small display size anyway. If you're looking for better quality, improve the CRF instead. :)
The video player itself for the PSP will list a video as “Unsupported Data” if it can't be played back. However, don't depend on this icon completely as proof of failure. Some files it will show the video icon, but then have “This video cannot be played.” when trying to watch it. An example being where something's encoded with the Main x264 profile alone.
Using HandBrake to encode the video from a DVD, here are the settings used:
- x264 encoder, main profile except limiting to 1 B-Frame
- Set the width to 480, the max display size for the PSP (since these are widescreen movies, it's safe to assume that the width will max out first)
HandBrakeCLI -e x264 --encoder-profile main -x bframes=1 -w 480 -i /dev/dvd -o movie.mp4
The PSP video player control panel has chapter support, but playing back video with HandBrake adding them (
-m) doesn't make a work.
My little brother's favorite PSP game was Star Wars Battlefront II so it seems only appropriate to have a screenshot of the original feature film found on the bonus DVD:
In this case, the height was 208 after autocropping the original video for this movie.
For subtitles, they must be burned into the video directly, either VOBSUB or Closed Captioning will work.
HandBrakeCLI -e x264 --encoder-profile main -x bframes=1 -w 480 --subtitle-burned 1 -i /dev/dvd -o movie.mp4
I don't know a lot about aspect ratios, but I do know that DVDs use the entire picture frame to encode more video, even though it is played back at a different aspect ratio. The same thing can be done here – the PSP can display a max of 480×272, which is higher than the 208 originally set to.
Using the same source, which is a letterboxed 4:3 original source, I rip it with the full size and width of 480×272, then use mp4box to re-insert the aspect ratio. I'm not sure how to do this with Handbrake yet.
HandBrakeCLI -e x264 --encoder-profile main -x bframes=1 -w 480 -l 272 --subtitle-burned 1 -i /dev/dvd -o movie.mp4 mp4box -par 1=4:3 movie.mp4
avconv is simple enough, using the same encoding parameters.
It also seems appropriate to use Sony's “eye candy” presentation as a sample input source.
youtube-dl -f mp4 https://www.youtube.com/watch?v=jfdMo4b0U_Y
- Scale video to maximum width of 480, automatically adjust height to same aspect ratio
- Use x264 encoder, main profile except limit B-frames to 1
- x264 medium preset for encoding level
- Drop # of audio channels to 2 (stereo), although in this sample it's already set to 2
avconv -y -i Sony_Bravia_-_Eye_Candy_HD_1080p-jfdMo4b0U_Y.mp4 -vf scale=480:-1 -c:v libx264 -x264-params bframes=1 -profile:v main -ac 2 bravia.mp4