Sunday, March 31, 2013

Quality Test - MSI Afterburner's MJPEG Implementation (Part I) with Hitman: Absolution (Ultra Settings, 1080p)

Update: Added screenshot example of the RTV1 codec 'color banding' issue, with circled areas¹**
Update: Added Quality Test Comparison (Four 1080p samples of Hitman:Absolution) at different Quality Settings²**

Recording with the MJPEG (Motion JPEG) codec, every frame is an independent 'Keyframe 'or 'I-Frame' (short for "Information Frame"), which means it is a type of frame that can be 'cut' or started from in video editing programs (technically, every frame is a JPG picture!). This also allows for faster seeking and rendering in editing applications. MJPEG also requires less overhead (better performance/less 'lag' while recording) than many codecs. As well, the audio captured is PCM ("Uncompressed") with MSI's Afterburner, which means that any video editor should be able to recognize the sound data. Errors in programs like Virtualdub saying "Error initializing audio stream decompression" or Sony's Vegas showing "Stream attributes could not be determined" will not occur and these will open the audio without associated problems.

Testing out MSI's Afterburner as a game recorder and using the built-in MJPEG codec that comes with the program, I fired up some Hitman: Absolution, turned up everything to Ultra, captured some clips and put them together, uploaded it to YouTube, and collected some results with everyone:

This video compilation is a test of a few things:
1) Hitman: Absolution's performance while maxed out (Ultra Settings in game Options)
2) Capture quality of MSI Afterburner and performance/lag of using it
3) H.264/AVC compression quality maintainability
4) Youtube's quality maintainability

Recorded with:
MSI Afterburner
- v.2.3.0
- MJPEG codec, "Full Frame", 80% quality, 30fps
- Audio automatically records into PCM ("Uncompressed") format

Recorded Game: 
Hitman: Absolution @ 1920x1080 (1080p)
- "Ultra" settings (Preset)
- Anisotropic Filtering set to 4xAA
- "Texture Filtering Quality" set to High Quality (i.e.Off/NoFiltering) in Control Center
- "Morphological" Anti-Aliasing (MLAA) setting (AMD/ATi) set to ON
- "Surface Format Optimization" set to OFF in Control Center (AMD/ATi)

Framerate while not recording: ~31-79fps
Framerate while recording: ~28-64fps

I chose some Hitman: Absolution clips for a Quality Test because it was a good example of a recent game (at the time of this writing) that includes both fast movement/action areas on the screen, as well as slow/non-moving parts, including text. It has lots of dark and light areas, high contrast edges, particles (rain/filmgrain/sparks,etc) and tests area panning as well.

I was impressed with MSI Afterburner and it's utilization of the MJPEG codec overall. It seems to be slightly optimized or tweaked somewhat. At 80% Quality (to be in the realm of comparison with Bandicam's MJPEG Preset Default of 'Quality80'), flatter/darker parts were not overly compressed - which would create excessive macroblocking and/or be too smoothed out, normally. This could be partially due to the 'Film Grain' effect within the game, however (seen mainly when the sky or a flat-coloured background is in view).
In other words, there was very little Gibbs Effects aka 'Ringing' ("mosquito noise") around elements such as text when onscreen, and what effects were there, were 'hidden' somewhat by the grain effect. You had to look closely to see it, which is still pretty good for not recording in a 100% Quality setting - but again, the 'Film Grain' effect in this game is contributing to this 'negative effect of the MJPEG codec' not being as visible.
A small amount of Gibbs Effects/Mosquito Noise/Ringing can be seen around and within the UPC symbol  from this frame taken out of the original MJPEG recording. It is about as visible and even seems to be less so in the video itself, due to the "Film Grain" effect present in the game helping to hide it. Click to see Full Size

The very small amount of color banding present in the original recording was somewhat generated by the Game Engine and there is very little of it (what does occur is hidden somewhat with the film grain effect the game has).
In the recorded output, thankfully there is very little, partially because of a higher-quality setting when used and how MJPEG codec handles color dithering; color banding usually won't be seen very much at higher bitrate/quality settings (which means low compression), but will be easily seen at lower bitrate/quality settings (which uses higher compression).
Keeping above 80% quality when recording with the MJPEG codec [I recommend recording at 90% if your system can handle it, as most games do not have the Film Grain effect present in Absolution to help hide compression artifacts, such as color banding, flat color/area macroblocks and Gibbs Effects] if you have the space, it should leave you satisfied with easily-editable captures.

²**Quality Test Comparison - Four examples of various Quality Settings (90%, 70%, 50% and 30%) when using MSI Afterburner's MJPEG Codec in Hitman: Absolution. The differences are most apparent in the middle section, the bricks that the police officer is standing on, and the people milling around to the left of the gazebo, both areas showing colour loss (Posterization) and detail loss (Quantization), more obvious in the 30% sample (bottom). All sources were original output frame extractions from 1080p recordings.
Click to see Full size

[A quick note here that MSI Afterburner's output/recording seems to be somewhat darker than other game recording programs. It even states this in it's own Options, "captured video may appear darker than you see it while gaming" and offers a checkbox that will apply Gamma Correction. Since this article is more about MSI's MJPEG optimization and utilization (performance and ability to maintain visible quality), this 'darker recording' will be explored further in a future Game Recorder Comparison article]

For people trying out any game recording software and finding your recordings are choppy/laggy on playback (that is, when you are looking at the generated/recorded file), you should find that if you use a player/viewer that has Acceleration (GPU, videocard, DirectX processing), it should play back much more smoothly. If your system does not have this option, you can also try converting what is captured to another file temporarily, one with a smaller bitrate/size, and you should then find it will play back that converted file just fine (especially when recording with lossless/high-bitrate codecs).


It was interesting to do some side recording with Afterburner's included RTV1 codec as well*
The Riva Tuner Video codec is an iteration related to older codecs such as Indeo Video and S3TC compression techniques. It is similar to MJPEG and it seems to have very little effect on performance while recording - even performing slightly better than MJPEG at times, which was a nice surprise. Unfortunately, it suffers from 'color banding' (Color Quantization/Posterization) and the result is apparent lower quality, even at high bitrate/quality settings. Although it may not be as obvious in the below comparisons (depending on the settings of your monitor/colors/brightness), and while it certainly does not 'destroy the quality overall' in the game recording, in the captured video the color banding can be very distracting, especially when it includes motion through the color and light changes in an area as you move through it [it may not be to everyone, of course]. The size of the file produced is quite a bit larger than when recording with the MJPEG codec as well, but more on that in a future article..

*As this article is mainly a Test of Afterburner's usage of the MJPEG codec, a future Game Recorder Comparison article will include the RTV1 codec found in MSI's Afterburner and cover it in more detail than here

¹**An example of the RTV1 codec's problem with Color Quantization ('color banding'). This frame is extracted directly from a 100% Quality RTV1 codec recording (Batman: Arkham City Benchmark @ 1080p). The areas that contain the most obvious color banding problem have been highlighted with green circles.

If you are having problems with Color Banding that is not in the game itself, try to use a higher-bitrate setting (higher quality) for the codec you are recording with, resulting in lower compression and lowered loss of details, if you can do so.
[With the RTV1 codec, it appears that it will still remain a little, no matter what...]


Getting back to MJPEG testing with Afterburner, framerate was maintained close to non-recording performance (at ~30-60+fps for this game) when recording. I usually used MSI's Afterburner only as a monitor/controller for the videocards installed and captured with another program such as FRAPS or Bandicam. Using MSI Afterburner alone and having to run one less application in the background to capture no doubt had at least some sort of streamlining affect on performance. It felt that way, slightly.

Clear, crisp textures can be seen in this frame taken from the original MJPEG capture.
MSI's Afterburner and it's utilization of the MJPEG codec seems to be even slightly superior to Bandicam's implementation of it. [Hmm..something that must soon be tested!]
Click to see Full Size

The Average bitrate of the original MJPEG captures was about 30Mbps up to 70Mbps, which meant a writing stream to the disk of up to 8MB/s, which almost any hard drive can handle (recorded onto a drive capable of 150MB/s at the time).
The original generated recording files were about twice the bitrate and size of the final MPEG-4 compressed file uploaded to YouTube, the final file weighing in at about 600MB with a bitstream of 25Mbps on average (it is assumed that almost everyone will compress recorded material into a final output video compilation file of 8-20Mbps or so, for uploading to YouTube/Vimeo/etc (Blu-Ray's standard bitrate is 36Mbps and most video editing application presets go up to 20Mbps by default).
This final utilized bitrate, with the efficiency of H.264/AVC, manages to keep most of the detail that was in the original MJPEG recordings, although sadly, most of the finer detail is lost after uploading, as can be seen in the screenshot comparison below:

Originally used in an earlier article testing out MJPEG on Diablo3 with Bandicam, this screenshot shows examples of the detail loss after uploading to YouTube, when the video is played back at 1080p and 720p. Click to see Full Size 


What was more disappointing was that YouTube feels the need to overly re-compress uploads. Much of the quality is lost, especially things like the film grain, one of the 'first things to go' in temporal video recompression. For instance, at 1:03-1:08 there is visible grain effect maintained in the settings I chose for the final compressed output file, keeping most of the grain from the original MJPEG recording from Afterburner. In the YouTube Video Player after uploading, it can be seen that much of that grain is lost. Another example of this is the dense cornfield against the much flatter sky textures at 1:30-1:36. I kept the complexity of the cornstalks and hard contrasts of the plant details versus the sky on purpose, yet after YouTube's recompressing of the video, the result is blurred and smoothed details that were not like that in the recorded MJPEG video or the final H.264/AVC high-quality video output/final compress. I will attempt other uploads of the data at various settings for experimentation and put it just below this paragraph when an upload does not lose much of the finer details I wish to share**. I understand they must do it to save space (no doubt people upload huge, 'FRAPS-original' size files and recordings sometimes), it is merely unfortunate. At least it then becomes an example of what happens to some of the quality and detail once uploaded to YouTube (the extracted frame above, for example, is from the original MJPEG recording produced by Afterburner). There seems to be no use, at this time, to attempt to upload extremely high quality/fine detail. 
 The file originally uploaded to YouTube, the results of the MSI/MJPEG Quality Test, was previously compressed with a bitrate of 25Mbps. While this bitrate, using high-quality H.264/AVC codec settings, was enough to maintain details such as Film Grain and high contrast edges, much of this detail was lost after YouTube recompressed the uploaded file. 
**Another, higher-bitrate excerpt [in an attempt to compensate for YouTube's recompression] of the original MSI/MJPEG video capture:

This video then, is an attempt to compensate for YouTube's recompression and data loss, by uploading a video stream with a very high bitrate (an average of 60Mbps, up to 80Mbps, higher even than the original recorded data). As such, the duration is much smaller, a mere excerpt of the original intended upload.

Result: Even when a video stream is uploaded with the much higher bitrate, even when the original captured file is uploaded, even when I rendered the capture to a 2160p (4K UltraHD) file and uploaded that to YouTube, YouTube's recompression of the uploaded material (while still watchable) loses far too much detail from the actual upload - at least for high-detail evaluation of a game recorder's produced video streams. This is unfortunate. For now then, I will try to always show frames (screenshots) extracted from the original captured files created by game recording applications in Quality Tests...


Turning up the Recording Quality setting to 100%, the bitrate for MJPEG jumps up to over 275Mbps (over 30MB a second of file size being written to the drive). Quite a jump - and at that bitrate, the size becomes comparable to a YUV codec (or a FRAPS 1080p half-size recording) easily - but the quality ramps up as well. Color dithering and loss of detail is surprisingly near-negligible at 100% Quality with this game, yet the resource demand for using the MJPEG codec [especially MSI's optimization of it] seems to remain small, as MJPEG was already a lightweight codec with somewhat smaller processing being done, to begin with. Today's powerful videocards and CPU's should be capable of pumping out a sequence of lightly compressed JPEG's in a single file [no pun intended] without breaking a sweat. As long as your system isn't chugging along already, adding some MJPEG capturing shouldn't affect it very much. For those of you with slightly older systems with trouble recording in other codecs, give MJPEG a try, it should record smoother for you.

Overall, well done MSI.  /clap

If anyone is looking for a completely free Game Recording program (it might have even come on a disc with your videocard, as mine did) look no further than MSI's Afterburner. Keeping the settings relatively high [especially with the MJPEG codec, to keep compression artifacts low] and/or doing your own tests to see what looks 'good enough' for you, I suspect many people will be happy (if you aren't already) with using Afterburner and the low-resource-demanding and editing-friendly MJPEG codec to record your gaming adventures.

Please note dear reader, that I am not saying "This codec is the best one to record with" or "use this one only". I am merely showing that it is possible, or how to tweak it for quality or file size, as to your own personal tastes. There are many codecs out there to choose from when game recording and although some are more apt for certain types of games than others, overall it is your own choice to do with as you wish - do a few short tests and use what you prefer.

Have fun recording with MSI Afterburner and the MJPEG codec - and See you in the games!

[Note: As noted throughout this article, this testing of MJPEG with Hitman:Absolution alone is not a full test of MJPEG quality maintenance potential, as this game utilizes a "Film Grain" effect, which hides some of MJPEG's weaknesses in maintaining Quality. In a future post (Part II), a more in-depth examination of MJPEG as a video game recording codec, using other games and utilities, will be actualized. See you then!]


  1. Thank you for the extremely detailed information, as someone who frequently records gameplay (but has to upload at a low file size) i like to get the most quality for the lowest size, not only that but the MJPEG codec, like you pointed out is great for editing programs, it made my render times 3x faster!

  2. @Jordz0005 said...
    Thank you for the extremely detailed...

    Great, I'm glad to hear that! I always enjoy hearing that my information has helped someone.