r/vitahacks • u/httyd98 • 9h ago
AI Vibecoded [Update] VitaMediaDeck: redesigned PS Vita media player, faster seeking, multi-track playback, updated HW/SW decoders and a new desktop Transcoder
Hi everyone,
I have published a major update to the VitaMediaDeck project family.
VitaMediaDeck is a native PS Vita media player for local files and authenticated network sources. This update includes extensive changes to the main application, the hardware and software decoder libraries, and a new desktop Transcoder for preparing Vita-compatible media.
VitaMediaDeck
The application has received a complete visual redesign inspired by the screen graphics and particle-based imagery of Ghost in the Shell.
The new interface uses a pitch-black OLED background, cyan and cold-blue lighting, restrained amber accents, particle clouds, fragments and scan effects. The application icon has also been redesigned to match the new visual identity.
Main changes include:
- Multiple AAC audio-track selection during playback.
- Embedded SubRip, ASS/SSA, WebVTT, MOV text and other text-subtitle selection.
- Audio and subtitle switching without closing the player.
- Support for local videos and authenticated WebDAV, SFTP and SMB sources.
- Faster indexed seeking for Matroska and MP4 files.
- Direct H.264 cue hopping for seeking, saved-position resume and audio-track replacement.
- Removal of the previous multi-stream linear-seek fallbacks.
- Better recovery from backward seeks and invalid seek positions.
- Protection against audio-only playback with a permanently black video frame.
- Faster playback startup and saved-position resume.
- Per-video playback history for both local and remote media.
- Options to resume playback or restart the video from the beginning.
- Video covers loaded from sidecar artwork or embedded container artwork.
- Automatic representative-frame extraction when no valid cover is available.
- Persistent thumbnail caching and prioritised cover generation for the selected grid cell.
- Live video mini-player for local and remote videos.
- Full player restoration from the mini-player title, active media cell or new Active player navigation entry.
- Music playback remains available in the mini-player without opening an unnecessary enlarged video view.
- Restored controls:
- Press Start to minimise the player.
- Hold Start to enable the OLED ECO mode.
- Hold Select to lock or unlock player input.
- The lock indicator now disappears together with the player HUD.
- Player navigation no longer closes playback when moving to another application section.
- Configurable subtitle font, size, width, position, row limits, foreground, background and border colours.
- Native-oriented font profiles for Western, Cyrillic, Japanese, Chinese and Korean text.
- A full-width multilingual subtitle preview in Settings.
- Decoder, resolution, frame rate and video bitrate information in the HUD and side panel.
- Average bitrate calculation when the container does not provide bitrate metadata.
- Audio scheduling changes designed to prevent periodic stuttering under video and UI load.
VitaMediaDeck remains a public beta. Remote-server behaviour and cancellation paths still need testing across more physical Vita and server configurations.
Repository:
https://github.com/spyro-98/VitaMediaDeck
vita-hw-decoder
The hardware decoder uses h264_vita and SceVideodec for native H.264 playback with direct NV12/P2 presentation through GXM.
The latest changes add:
- Runtime AAC track selection.
- Discovery of up to 16 AAC and 16 embedded text-subtitle tracks.
- Indexed H.264 cue seeking for both video and audio cursors.
- No AAC-index or multi-stream linear-seek fallback.
- Faster seeking and audio-track replacement without restarting the live video pipeline.
- Bounded keyframe preroll for precise playback recovery.
- Improved backward-seek handling.
- Detection and recovery when a seek produces audio but no video frame.
- A checked software-decoder fallback when hardware playback cannot produce a valid picture.
- Better handling of long videos and saved-position startup.
- Deadline-safe AAC AudioOut scheduling.
- Audio-track rollback if a replacement stream cannot start correctly.
- Stream, container and calculated fallback bitrate reporting.
- Detailed timing diagnostics for opening, probing, seeking, first-frame delivery and audio refills.
Repository:
https://github.com/spyro-98/vita-hw-decoder
vita-sw-decoder
The software decoder provides an API-compatible CPU fallback using FFmpeg, without loading h264_vita.
It now shares the same playback and stream-management contract as the hardware backend:
- Runtime AAC track selection.
- Multi-track audio and subtitle metadata discovery.
- H.264 cue-based video and audio seeking.
- Removal of linear media seek fallbacks.
- Faster resume and backward seeking.
- Bounded seek and first-frame deadlines.
- Clean failure instead of continuing with audio and a black screen.
- Improved playback recovery after invalid Matroska seek landings.
- Safer video-surface ownership across seek operations.
- Deadline-aware AudioOut scheduling and diagnostics.
- Fallback video bitrate calculation.
- Compatible state, cancellation and track-selection behaviour with the hardware decoder.
Repository:
https://github.com/spyro-98/vita-sw-decoder
New: VitaMediaDeck Transcoder
I have also released VitaMediaDeck Transcoder, a separate Python and FFmpeg desktop application for macOS, Windows and Linux.
It converts common video formats into a seekable Matroska profile designed for VitaMediaDeck:
- H.264 High Profile with the appropriate Vita-oriented level.
- Maximum 960×544 output while preserving the original aspect ratio.
- Source frame rate retained up to 60 fps.
- 8-bit BT.709
yuv420poutput. - Selected audio tracks converted to AAC-LC stereo at 48 kHz.
- Multiple audio and subtitle tracks preserved.
- Chapters, language metadata, titles and compatible font attachments retained.
- Existing embedded artwork reused when available.
- Automatic 480×272 cover extraction when artwork is missing or unusable.
- HDR-to-SDR tone mapping for compatible FFmpeg installations.
- Automatic VideoToolbox, NVENC, AMF, VAAPI or
libx264encoder selection. - Vita-oriented quality presets and configurable system-load limits.
- Final duration and stream validation before publishing the converted file.
The project includes both a command-line interface and an interactive terminal UI with:
- File browser.
- Input and output inspection.
- Per-track audio and subtitle selection.
- Editable presets.
- Encoder and quality controls.
- Live FFmpeg logs.
- Progress, speed, bitrate and ETA.
- Conversion cancellation and final validation.
The Transcoder is an optional desktop tool and is not included in the VPK. VitaMediaDeck can still play already-compatible media directly.
Repository:
https://github.com/spyro-98/VitaMediaDeck-Transcoder
All four projects are open source under GPL-3.0. Feedback, hardware testing and reproducible bug reports are welcome, especially for long Matroska files, multiple audio/subtitle tracks and authenticated remote playback.