Q: Where can I get the latest and greatest WMV9 (Microsoft Windows Media VC-1) codec?
A: All versions of Windows since Windows Vista (except “N” European versions) and Windows Server since 2008 include the latest WMV9/VC-1 encoder and decoder DMOs. The Vista encoder DMO is the same as the one that ships in WMP11 for XP. To enable Windows Media codecs in Windows Server you must enable the Desktop Experience feature.
Q: What is VC-1? What is WMV9? What’s the difference?
A: VC-1 is a codec specification as standardized by SMPTE in 421M. WMV9 is an implementation of that specification. Think of it this way: WMV9 is to VC-1 what x264 is to MPEG-4 AVC or DivX is to MPEG-4 ASP. In the context of Microsoft video codecs, WMV9 and VC-1 can be considered one and the same. A fine line can be drawn by saying that WMV9 is VC-1 video in the context of Windows Media: inside an ASF container, or with WMA audio, or with WM DRM, or streaming from WM Servers, etc.
Q: So what’s the big deal with Advanced Profile? Is it a new codec?
A: In some ways it is a new codec… in others, it’s just an extension of the classic WMV9 codec. The SMPTE 421M standard for video compression (nicknamed “VC-1″) was originally based on Microsoft’s Windows Media Video 9 codec. However, a number of changes and improvements were made to the specification as a part of the SMPTE standardization. Three profiles were defined for VC-1: Simple, Main and Advanced Profile. The existing implementation of WMV9 (FourCC: WMV3) already covered Simple and Main profiles so Microsoft only had to add the remaining third profile. Advanced Profile includes new features such as true interlaced encoding support, transport independent bitstreams, resolutions up to 2048×1536 and bitrates up to 135Mbps.
Q: But wait! Didn’t WMP10 ship with a WMV Advanced Profile codec years ago?
A: Indeed it did. Microsoft began working on its implementation of WMV AP before VC-1 spec was finalized. That codec (FourCC: WMVA) shipped with WMP10 (Format SDK 9.5), but as final changes to the VC-1 spec were made, WMVA got out of sync with the official spec. Today WMVA is no longer VC-1 compliant and is generally considered deprecated. If you have any content encoded with WMVA, you should re-encode it to WVC1 at your earliest convenience.
Q: Does the new Advanced Profile codec have a different FourCC?
A: Yes, it does. In order to differentiate it from SP/MP codec (FourCC: WMV3) and the non-VC1-compliant AP codec (FourCC: WMVA) and avoid issues with legacy decoders, the VC-1 compliant WMV9 Advanced Profile codec uses a new FourCC code: WVC1.
Q: Will switching to WMV9 AP improve the quality of my encodings? Should I stop encoding to Main Profile?
A: Just switching from Main Profile to Advanced Profile is not enough to increase quality. Quality is subject to encoder efficiency, not profile level. The differences between profiles – in any codec – are in the feature set and decoder complexity. It is implied that AP content is more difficult to decode than MP content – that’s the whole point of having profiles and levels.
Q: So what’s the advantage of Advanced over Main Profile?
A: Take a look the feature tables at http://en.wikipedia.org/wiki/VC-1 and the one below. AP’s most important features are:
- Interlaced encoding support (both frame and field modes)
- Bitstream encapsulated metadata that allows VC-1 to be placed in almost any file container or transported over any protocol
- Differential quantization which allows macroblocks within a picture to be coded with different quantizers
- Encoding at resolutions different than decode resolutions
For most part, none of that really affects quality if you’re encoding progressive content. Microsoft’s latest version of the WMV9 (WMV3/WVC1) encoder is v11, now available for download with the v11 Player and WMF SDK. If you use this encoder to encode to either Main Profile or Advanced Profile, you ought to be able to get roughly the same quality for both because most of the quality-related optimizations (i.e. B-frames, inloop filtering, ratecontrol, motion estimation, etc.) apply to both MP and AP.
When deciding whether to encode to Main or Advanced profile, you should primarily consider your target playback platform (PC? Xbox? Zune? PocketPC?) and your source (progressive? interlaced? mixed?).
Q: OK, I got the codec. How do I encode with it?
A: All Windows Media codecs are implemented as DirectX Media Objects (DMO) and/or Media Foundation Transforms (MFT). Encoding applications that use DMO/MFT codecs:
- Windows Media Encoder 9 Series – This Microsoft encoder supports nearly every scenario imaginable: offline encoding, live capture & encode, streaming over networks, washing your dishes… It’s all there. The bad news: it’s no longer a supported product so you might have to do some research to find it online. To encode to WVC1, simply create a Custom Session, go to Properties, Compression tab, hit Edit – and select “WMV9 Advanced Profile” from the video codec list. WME9 also supports command-line encoding via the WMCmd.vbs script.
- Many video editing applications such as Sony Vegas, Adobe Premiere and Avid Xpress support exporting to WMV9.
- WMV Muxer/Encoder by DVBPortal – A simple WMV muxer and encoder useful for muxing VC-1 streams into ASF without recompressing. Encoder feature requires .prx profiles which can be customized using the WM Profile Editor from the WME9 package.
- WMNicEnc – Nic’s WMV encoder takes Avisynth input only and supports all the advanced encoding settings of VC-1. Small, easy and effective.
For most part DMO/MFT-based VC-1 encoding applications have been superseded by applications based on the VC-1 Encoder SDK and Smooth Streaming Encoder SDK which don’t rely on any native Windows codecs for support. These products have the VC-1 encoder “baked in.” Examples of these include:
- Microsoft Expression Encoder – Microsoft’s official replacement for the outdated WME9, this application supports VC-1 encoding to both Windows Media and Smooth Streaming formats even in its free version. The retail version adds support for Live Smooth Streaming and H.264/AAC codecs. The product comes with a .NET SDK which enables easy automation and remote operation.
- Professional video encoding products by partners such as Cisco/Inlet, Telestream/Anystream, Digital Rapids, Harmonic/Rhozet, Envivio, Winnov, etc.
Q: How do I configure the advanced settings of WMV9 AP? I don’t see any UI in WME9 to do this!
A: The advanced settings of the WMV9 Advanced Profile codec are available through the standard Windows Media Codec APIs, but are also enabled through registry settings. The registry settings are made available in order to allow legacy encoder applications (such as Windows Media Encoder 9) which are unaware of the new API properties to take advantage of the new settings. Windows Media Encoder has not been updated since Windows Media 9 Series and therefore does not have any user interface elements for the new codec. Yeah, it’s not the greatest and user friendliest interface, but it’s actually how most codecs store their long term settings. Fortunately, there are alternatives:
- WMV9 PowerToy – a tool for configuring all the advanced settings of WMV9 encoder and decoder
- WMCmd.vbs – All you command-line fans can rejoice because the updated wmcmd.vbs supports all the advanced settings via command-line now
- Nic’s WMV Encoder – Nic’s updated encoder now features an Advanced Options pane for configuring all the, well, advanced options
Q: I am trying to use WME9 on Vista and I’m experiencing crashes in cscript.exe and wmenc.exe. What can I do?
A: These are known issues. Microsoft has released a hotfix that addresses the problems.
Q: Cscript.exe fails to initialize the WMEncoder object when I try to use WMCmd.vbs with 32-bit WME9 on XP/Vista x64. Is WMCmd.vbs encoding broken in this scenario?
A: Not at all. The default script interpreter on Windows x64 is 64-bit cscript.exe. WME9 x86 installs 32-bit COM objects (used by WMCmd.vbs). In order to run WMCmd.vbs, you need to use the 32-bit cscript.exe located in \Windows\SysWOW64 or simply run the 32-bit cmd.exe command-prompt which will ensure the 32-bit version of cscript.exe gets invoked.
Q: Should I use the 32-bit or 64-bit version of Windows Media Encoder 9?
A: 64-bit WMV codecs don’t really offer much of a performance improvement (if any at all) over 32-bit WMV codecs. The important thing to keep in mind is that if you want to use WME9 x64 for transcoding, your source decoders will need to be 64-bit too. So unless you’ve got 64-bit versions of XviD, MPEG-2, H.264 and whatever other decoders you want to use – it’s probably not worth the hassle.
In general I would use WME9 x64 only for Server 2003 x64 where WMV9 AP “WVC1″ codec is not officially available at all, and maybe for Vista/Win7 x64 where all codecs are available in both 32-bit and 64-bit versions – so you might as well try both. On XP x64 – you should stick with 32-bit WME9.
Q: WME9 gives me an error when I try to use Avisynth script as source. Does WME9 not support .avs input?
A: It does – sort of. WME9 was developed years ago when Avisynth wasn’t very widely used so the WME9 team never considered explicitly adding Avisynth support. However, due to Avisynth’s similarity to the AVI interface, it’s possible to force WME9 to read Avisynth scripts anyway:
- GUI: Use a custom session and in Properties’ Sources tab select “Both device and file” for source, then choose “Browse for file” for video and/or audio and point to your .avs script.
- WMCmd.vbs: The original command-line encoder script that shipped with WME9 didn’t support .avs inputs, but independent efforts have been made since then to update the script and work around the limitation.
Q: Do these registry settings apply only to Advanced Profile (WVC1)?
A: Depends on which codec version you are using. If you are using WMP11/WMFSDK11 (XP or Vista), the registry settings will affect all 3 profiles – Simple, Main (WMV3) and Advanced (WVC1). However, not all registry settings are valid in every profile. Here is how they map out:
Q: Where can I find out more about VC-1 and WMV9?
A: Check out these links: