Video Playback
SMS turns a bone-stock PlayStation 2 into a video player. Point it at a movie file on any storage device β a burned disc, a USB stick, an MX4SIO microSD card, the internal HDD, SMB or UDPFS β press one button, and it plays. This page covers every video format SMS understands, how to open a file, the on-screen player controls, how the decoding works under the hood, and how to get the smoothest playback out of the console.
Supported video formats
SMS recognises a video by its container and codec, not merely its extension. The heavy lifting is done by a set of FFmpeg-derived decoders that have been hand-optimised for the PS2's Emotion Engine. The table below lists what plays and the file extensions SMS looks for.
| Container | Supported video codec | Extensions |
|---|---|---|
| AVI | MPEG-4 Part 2 / ASP (DivX, Xvid and Microsoft MPEG-4 v3 tags) | .avi .divx .xvid |
| MP4 / ISO-BMFF | MPEG-4 Part 2 (mp4v) | .mp4 |
| MPEG program stream | MPEG-1 / MPEG-2 | .mpg .mpeg |
.wma is a standalone Windows Media audio route.Audio inside a video (the soundtrack) is decoded by the same engine that plays standalone music files, so a movie can carry an MP3, AAC, AC3, or other supported audio track. For the full audio picture β including playlists and standalone music β see Audio & Playlists.
Exact implementation limits
These are hard limits visible in the current source, not estimates:
| Property | Limit | What it means |
|---|---|---|
| Frame dimensions | Width β€ 1024 and height β€ 1024 | SMS rejects the file if either dimension is greater than 1024. |
| MPEG-1/2 frame rate | 23.976, 24, 25, 29.97, 30, 50, 59.94 or 60 fps | The MPEG sequence-header rate table, including MPEG-2 extensions. |
| Compressed video packet/sample | 2,097,088 bytes | The 2 MiB packet ring minus its mandatory 64-byte allocation overhead. |
| Streams/tracks | 8 total | The container-wide stream table includes video, audio and subtitle tracks. |
| Individual file size | smaller than 4 GiB | File sizes, positions and seeks use 32-bit addressing. |
Hardware-confirmed profiles
The generated repository fixtures were played on a real PS2. Every positive case below played correctly, including seeking/pause/return-to-browser checks, while unsupported modern-codec cases failed as expected.
| Container / codec | Resolution / rate | Encoded profile | Result |
|---|---|---|---|
| AVI / Xvid + MP3 | 640Γ480, 30 fps | 1.5 Mbit/s video; no B-frames; GOP 30; 128 kbit/s MP3 | Passed |
| MPEG-2 PS + MP2 | 640Γ480, 30 fps | 2.5 Mbit/s video; GOP 15; 192 kbit/s MP2 | Passed |
| MPEG-1 PS + MP2 | 640Γ480, 30 fps | 1.15 Mbit/s video; GOP 15; 192 kbit/s MP2 | Passed |
MP4 / mp4v + AAC | 640Γ480, 30 fps | 1.5 Mbit/s video; no B-frames; GOP 30; 48 kHz stereo AAC at 128 kbit/s | Passed |
MP4 / mp4v + AAC | 320Γ240, 30 fps | 600 kbit/s video; no B-frames; GOP 30; 48 kHz stereo AAC at 128 kbit/s | Passed |
| MP4 / H.264 or H.265 + supported audio | Tested negative cases | Unsupported video codec | No video, as expected; supported audio can still play |
This table is the real-time confirmed baseline, not the full accepted range. Higher dimensions up to the 1024-pixel-per-axis source limit remain valid inputs but have not been qualified as universally smooth.
Playing a video
Opening a movie is a three-key affair: pick the device, walk into the folder, press play.
Pick the device
SMS opens on the device menu β the top row of device icons. Use Left / Right to highlight the
device your movie lives on (a massN: device for USB / MX4SIO / HDD-exFAT / i.LINK, an
mmce0: card, the internal hdd0:, a CD/DVD, smb: or udpfs:). If the device you want
is not listed, it may not be started yet β see Devices Overview for the Autostart
toggles and the "Start <device> now" option.
Enter the file list
Press Down to drop into the file menu (the middle browser). Move with Up / Down, page through long folders with L1 / L2, open a folder with β, and step back up one level with β³ (folder β parent β device menu). The status line at the bottom shows the current path on the left and a clock on the right.
Press play
Highlight the video file and press β. SMS reads the file straight from the device and starts playback. When the movie ends β or when you stop it β you land back in the browser exactly where you were.
Player controls
While a video is playing, the pad drives the player directly:
| Button | Action |
|---|---|
| Select | Pause |
| Start | Resume from pause |
| β³ Triangle | Stop playback and return to the file browser |
If the movie has an external subtitle file alongside it, SMS displays it over the picture β see Subtitles for how subtitle files are matched and styled.
How SMS decodes video
SMS earns its "good video on a stock PS2" reputation by splitting the work between the Emotion Engine and a dedicated piece of PS2 hardware β the IPU (Image Processing Unit).
- Decoders derived from FFmpeg. SMS's video and audio decoders started life as parts of the FFmpeg project and were then heavily reworked for the PS2 β moving to a packed image format so the decoder produces macroblocks in the IPU's native layout, and making aggressive use of the scratchpad and DMA. The original author measured roughly a 300% speed-up in video decoding versus stock FFmpeg from these changes.
- The IPU does the colour conversion. Turning decoded frames into a displayable picture (the colour-space conversion, YUV β RGB) is handed to the IPU, which runs it as an interrupt-driven process in parallel with the main CPU still decoding the next frames. Because that step is offloaded, the Emotion Engine is free to spend its cycles decoding β which is exactly why a plain, unmodified PS2 can play good-resolution movies at a good frame rate with no HDD and no extra hardware.
Encoding tips
If you are making files for SMS rather than playing existing ones, a few choices make the difference between flawless playback and a slideshow.
- Start from a tested profile. 640Γ480 at 30 fps with 1.5 Mbit/s MPEG-4 Part 2 video is confirmed in both
AVI/Xvid + MP3 and MP4/
mp4v+ AAC. Lower dimensions or bitrate provide more headroom. - Use a supported codec, not just a familiar extension. For MP4, select MPEG-4 Part 2
(
mp4v), not the much more common H.264 or H.265 encoders. - Avoid expensive tools when compatibility matters most. B-frames, QPel and GMC are implemented but add work. The hardware-confirmed fixtures use no B-frames.
- Defragment on slower devices. On a device with limited read throughput, a heavily fragmented file forces the console to seek constantly, which can starve the decoder. Copying the file back onto a freshly-formatted card or drive so it lands contiguously gives the smoothest reads, which helps most on the slowest media.
- Add subtitles as a separate file. SMS reads external subtitle files rather than baked-in subtitles, so
keep the subtitle track out of the video and drop the
.srt/.subnext to it β details on the Subtitles page.
The exact command used for the confirmed 640Γ480 MP4 profile is:
ffmpeg -i INPUT.mp4 -c:v mpeg4 -vtag mp4v -b:v 1500k -bf 0 -g 30 \ -s 640x480 -c:a aac -b:a 128k -ar 48000 -ac 2 \ -movflags +faststart OUTPUT.mp4
Limitations
SMS is a stock-console player, and a few historic limits come with that. Knowing them up front saves a lot of "why won't this play" head-scratching.
- Codec support is deliberately narrow. There are no H.264, H.265, VP9, AV1 or WMV video decoders.
- Interlaced is supported, but not part of the current fixture baseline. The MPEG-4 decoder contains interlaced field/DCT paths, and MPEG-2 supports frame- and field-encoded interlaced video. The published test profiles above are progressive.
- The source ceiling and the real-time ceiling are different. SMS accepts each dimension through 1024, but no single bitrate or resolution below that is guaranteed for every codec-tool and storage combination.
- Large files remain 32-bit addressed. exFAT removes FAT32's filesystem limit, but the SMS file context still limits an individual file to less than 4 GiB.
Why can a stock PS2 play "good-resolution movies" at all?
Because SMS never asks the Emotion Engine to do the whole job. It offloads colour-space conversion to the PS2's IPU as an interrupt-driven, parallel process, and it re-shaped the FFmpeg decoder so its output lands in exactly the format the IPU wants β cutting the traffic between CPU and memory and freeing the main processor to keep decoding. That parallelism, plus scratchpad-and-DMA optimisation, is what let the original author benchmark peak frame rates well above real-time on standard-definition DivX. It is the same architecture this fork still relies on β the fork's work went into reaching those files on more devices (like MX4SIO), not into the decoder itself.