Did I get your attention? I've been playing with Morgan MJPEG2000 codec since Ian-T brought it to my attention a couple of weeks ago. JPEG2000 and wavelet based compression has been on my radar for a while now, but I didn't know anyone had done a decent windows codec other than Cineform. I'd like to share my results with everyone since now that I've found my intermediate codec I think other people might be interested in my experiences.
So, first of all, what makes wavelet codecs so great?
1. very high quality for the bandwidth
2. scalable quality vs speed on playback
3. what I like to call "wavelety goodness". When pushed too far, the artifacts wavelet codec DO have are so organic looking the eye doesn't really see them as such.
That's the gist of it. But another thing I like, about MJPEG2000 at least, is that it supports 4:4:4 RGB. (Cineform doesn't except for the "pro" level kit)
I'm not even going to really compare Cineform NEO-HDV and Morgan MJPEG2000 except for in one area: Price. This is because Morgan has pretty much 100% of the same features as Cineform NEO-HDV only it ISN'T crippled in stupid ways like being limited in resolution and color model support.
Cineform NEO-HDV $249 (8bit YUV 4:2:2 only. Limited to 1440x1080)
Morgan MJPEG2000 $30 (8bit YUV 4:2:0, 4:2:2, and RGB 4:4:4 no resolution limit)
Just by the above one liner, if you are like me you probably immediately recognize the potential of Morgan MJPEG2000 vs Cineform NEO-HDV
Since I'm cheap, Cineform was not much of an option at $249. $249 only buys NEO-HDV and it's the lowest end option. (The version of Cineform that actually has the mix of features I want is NEO-2K-Edit and it costs $799!)
From here on I'm just going to talk about Morgan MJPEG2000 and how kick ass I think it is. I've dismissed Cineform NEO-HDV as too expensive at this point.
One of the greatest features of Morgan MJPEG2000, short of the quality, is the fact that it allows for fast "draft mode" type decoding. (Like Cineform) It's basically tune-able to any level required to get real-time performance out of your hardware. Quality goes down as speed goes up. But that's ok for when you are just editing "off line". When you need to do your final render you switch the quality level back to full quality mode, hit "make movie" in your NLE and go to bed. Unless you are making The Lord of the Rings Uber Special Frodo Eats Even More Mushrooms Edition, you movie is probably gonna be done rendering when you wake up in the morning. So, it's fast enough in full quality mode to be practical. (7-10fps) It probably wouldn't be fast enough for editing (in HD) at full quality unless you have a blazing fast machine. But in this online/offline type of workflow it is just fine. I can use full quality in SD res on my machine no problems though, if that gives you an idea of where it stands, speed-wise.
Morgan MJPEG2000 has really crappy documentation so it took me a while to figure out how to use it properly. Basically, it allows you to dial up and down the "quality" on decode by setting how many "layers" it decodes. It works with any VFW software since the setting done system wide for the codec. You use the "Quick Config" panel as your interface for these settings.
The trick is the layers have to be in the media to begin with. You need to make the media with layers, otherwise there wont be any when it comes time to decode. (My mistake in my first experiments was to not make ANY layers. I didn't know what they were and they SOUNDED expensive, to I turned them off) Now I use 10 layers and it seems to be a good number. 10 layers means 10 levels of quality to choose from. On my machine (Athlon 64X2 4600+) I can get real-time 24p from HDV res stuff with 6 of 10 layers. At that level the quality is barely lossless. FAR more than required for just interactive editing. Really, layer 1 of 10 is just fine for off-lining.
I'm attaching a screen shot of the panel. It should make the way the feature is implemented more clear now that I've explained the gist of it. There is a very convenient start bar menu for pulling up this panel. Or you can launch it from the start menu. Setting the quality level at any time is easy. It works brilliantly.
The draft quality video comes in full-resolution to whatever software you're using. It's just a lower quality. But it's lower quality in a nice way, kind of smooth you know... "wavelety"... rather than blocky. Considering that the view port of the "out monitor" is usually low res, it makes no sense to decode the full quality while editing anyway.
The setting named "Levels" provides a different function and that is the number of pyramids / wave domains in the file. Based on my reading about JPEG2000, 5-6 should be a pretty good number of "Levels". I think as long as you don't go with some insane number either way (like 1 or 30) it should be ok to tweak it. I haven't had time to experiment so I don't know how much tweaking this will help or hurt compression. If anyone does learn anything about this, I would love to hear about it.
"Reversible" and "Irreversible" are in reference to RGB to YCbCr color transformation. I use RGB 4:4:4 myself, so this isn't an issue for me personally. But if you are using 4:2:2 or 4:2:0 this setting could effect you. I believe the correct setting to use for normal video (that is, just compressing YCC from a YCC source with no color transform) would be "Irreversible". This is a mode similar to rec709. I haven't tested the YCC modes much to be honest since it's my preference to get into RGB ASAP and stay there until final transcode. (Coming from a CG, compositing background I'm just more confident staying in a RGB world) I can say the YCC modes do work.
My observation so far has been that the compression efficiency of JPEG200 is so great the difference of working in RGB and YCC, in terms of disk space and speed, is totally nominal. This is another reason I'm so in love with this codec.
For the bandwidth, the quality possible with MJPEG2000 is just stunning. I can only just start to see artifacts at 10:1 with the naked eye, and that's flipping back and forth between it and uncompressed. The only way I could really visualize the lossy-ness (even at 10:1) was to setup a comp to compare the two using "difference" and then really boosting the diff with a "levels". Only then was I able to see the magnitude of the loss kind of building up at each successive compression level. It does start to build up after about 10:1 or 20:1 But it doesn't start to get artificial looking until about 50:1 or more. (At least on HV20 footage. Higher quality input footage might not compress so well... more on that in a bit!)



Reply With Quote


I never thought of trying anything that obvious.
