Cross-platform C++ tool to convert CRI Middleware USM video files to MP4.
- Convert VP9 USM files to MP4 (native pipeline, no FFmpeg needed)
- Re-encode VP9 to H.264 via FFmpeg for WMP/player compatibility (
--reencode) - Non-VP9 streams handled by FFmpeg
- Supports batch processing of directories
- Works on Windows and Linux
| Feature | Status |
|---|---|
| VP9 -> MP4 (native) | Working, tested |
--reencode VP9 -> H.264 |
Working, tested |
| ADX/HCA audio decode + mux | Code exists, untested (no VP9+audio USM available) |
| Non-VP9 -> MP4 (FFmpeg) | Working, tested |
- C++17 compiler (GCC 8+, Clang 7+, MSVC 2019+)
- CMake 3.16+
- FFmpeg (required for non-VP9 streams and
--reencodemode)
cmake -B build
cmake --build build --config ReleaseExecutable: build/Release/usm_toolkit.exe
./build.shExecutable: build_linux/usm_toolkit
# Convert VP9 to MP4 (native, fast)
usm_toolkit convert video.usm
# Re-encode to H.264 (WMP compatible, slower)
usm_toolkit convert video.usm -r
# Extract raw streams
usm_toolkit extract video.usm
# Specify output directory
usm_toolkit convert video.usm -o output/
# Convert and cleanup temp files
usm_toolkit convert video.usm -c| Option | Description |
|---|---|
-o, --output-dir <dir> |
Output directory |
-c, --clean |
Remove temporary .m2v and audio files |
-r, --reencode |
Re-encode VP9 to H.264 via FFmpeg (WMP compatible) |
VP9 USM files are converted natively by:
- Demuxing the CRI USM container (CriUsmStream)
- Parsing IVF-wrapped VP9 frames (IvfParser)
- Muxing into ISO BMFF (MP4) with vpcC codec config (NativeMp4Muxer)
ADX/HCA audio decoding to L16 PCM is implemented but not yet validated on real VP9+audio files.
Use --reencode to transcode VP9 to H.264 for maximum player compatibility (requires FFmpeg).
Non-VP9 streams fall through to FFmpeg.
- UsmToolkit - Original C# implementation
- VGMToolbox by snakemeat - USM parsing library
- nlohmann/json - JSON parser (bundled in third_party/)
MIT