< All posts | Fediverse | RSS | GitHub | Talks

Mar 21 2015

A peek into the USM format

A game that I really liked the visuals off, Crysis 3 uses a video file format called USM, This is a rather odd to me, since when I am used to pulling games apart for their assets, I am used to BINK video being used for the purpose of in game video, Most games have used this in the past, Including Valve and Unreal Engine games (nearly all of the call of duty’s for example), it also looks like Valve have moved the this format as well with Dota 2.

Looking at the files, the normal probing methods of the format turn up some pretty unhelpful results:

$ file Jailbreak.usm 
Jailbreak.usm: data

And force feeding the file into VLC is even more unhelpful (Loads the file, but see’s a huge amount of unrelated streams, instantly closes the file)

After nearly giving up on this and calling it a losing battle, I opened one of the files into (Totem)[https://wiki.gnome.org/Apps/Videos] and it played nearly perfectly!

Totem Decoding Video Fine

As well as consuming the file fine, it also gave us really important information on how it did, Looks like Totem detects video’s in different ways to VLC, and concluded that the file I gave it was actually a old school mpeg file.

Now the format here is far from perfect, it looks like there is some extra data on some frames causing frame corruption, perhaps a addon packet like Shoutcast does but I have not had time to look into that yet.

Either way here is how you decode that with ffmpeg:

$ ffmpeg -f mpegvideo -i Islands.mp4 -vf scale=640:360 -b:v 1M out.webm
<lots of mpeg decoding errors/barf>
frame=  158 fps= 17 q=0.0 Lsize=    1130kB time=00:00:06.00 bitrate=1542.0kbits/s    
video:1128kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.143888%

and there we go!

You get a webm of the video that should look a little like this: