DirectShow Playback Guide:Alternative Filters
- further information: DirectShow Playback Guide
As described in the "parent" DirectShow Playback Guide, CCCP is usually the easiest way to get your system working with the wide variety of media types that you are likely to encounter. However, as with everything else under the media "umbrella", there are many alternatives that can be used to achieve the same goals. Sometimes it can be useful to use alternative filters to improve playback quality or to improve playback performance (particularly important with MPEG-4 AVC codecs and older machines).
Below is a list of some of the common alternatives and standalone filters. Many of these are actually components of CCCP, but can all be obtained and used separately. The list below contains both Splitter Filters and Decoder Filters.
FFDShow is a Multi-Format Decoder filter with major Post Processing capabilities. It is essentially a windows DirectShow Filter version of the FFMPEG Codec Project libraries, which are used to support MPEG-2/4 video and audio decoding by many non-DirectShow, cross-platform, applications (such as VLC). Installing FFDSHOW on your system gives you all the power of the FFMPEG codecs in all of the DirectShow player applications installed on your system (including MC of course)! Starting with MC 12.0.266, MC now supports using FFDSHOW as a post processing filter for DVD and TV Tuner playback, which provides some very exciting possibilities.
FFDSHOW acts as a sort of "Swiss Army Knife" filter. It acts as both a Splitter Filter and a Decoder Filter (both Audio and Video). It can be used to decode many video and audio formats beyond it's "original" focus of MPEG-2/4 file types, including: MPEG-4 ASP (Xvid, 3ivX, and DivX) and AVC (H264 and VC1), MPEG-2 (DVD), MPEG-1, H263, VP6 (Flash Video), MP3, AAC, Dolby AC3, FLAC, WMA, and Vorbis among many others. It can also be used to route certain video types through other filters (such as DScaler) for post-processing, and perform many post processing effects itself (de-interlacing, grain removal, noise reduction, sharpening, etc).
FFDSHOW Codec Decode Support
FFDSHOW uses the libavcodec library and several other free, open-source libraries to decode video and audio in a huge variety of common formats. FFDSHOW can also be configured to process and display subtitles, grab screenshots, enable keyboard controls, post-process both audio and video, and split multiple audio streams out of common video container formats. Some of the common media formats that FFDSHOW can handle on it's own are (this is not a complete list):
- Video Codecs
- MPEG-4 Advanced Simple Profile Codecs (ASP or Part 2): DivX, XviD, 3ivx
- MPEG-4 Advanced Video Coding Codecs (AVC, Part 10, or H264): x264, Nero Digital AVC, MainConcept AVC, Apple H264
- WMV: versions 7, 8, and 9
- On2 VP6
- RealVideo: RV10 and RV20
- CamStudio CSCD
- Intel Indeo: versions 2 and 3
- Audio Codecs
How To Obtain FFDSHOW
FFDSHOW is an open source project and, as such, anyone can download the source code from CVS and build their own version of it. As you likely know, the open source model can be great for getting development done on new and exciting projects, but with no one in charge it can devolve into chaos easily. Unfortunately, while development on FFDSHOW is quite active, no one has been officially maintaining or releasing new builds of it for quite some time (Milan Cutka must have gotten a real job or something). So, it can be difficult for users to find a good version as there are too many different versions/builds out there.
This is going to sound quite a bit like a broken record, but the easiest and most reliable method of installing FFDSHOW is via CCCP. CCCP includes FFDShow' (so there is no need to install it separately if you use CCCP). If you choose not to install CCCP, you should still seriously consider installing FFDSHOW because it is so useful for playing back a wide variety of media types. Here's where you can find the various versions of it available for download:
Old Official Builds: A fairly stable but older version can be found here (ffdshow-20051129.exe) This build was last updated in November 2005. It works, but it doesn't contain many of the new and cool features available in more recent builds. I have also experienced some issues with this version of FFDSHOW and MC's thumbnail building routines (though that was with a much older build of MC12 so I can't be sure of the exact root cause). These builds were the last ones released by the old "official" owner of the FFDSHOW project, Milan Cutka.
Celtic Druid: Celtic_Druid is a very helpful and knowledgeable user on Doom9 (among other sites) who has been maintaining regular builds of FFDSHOW on his own. People have had good experience with Celtic Druid's builds, which you can find here. Celtic_Druid normally creates a number of different builds of each version, optimized for different computer architectures. If you don't know which build you need (which version of SSE your CPU supports), then try searching on the Interact Forum for SSE. You should find some discussions on how to determine this there. If anyone feels like digging up that info and adding it to the Wiki, then feel free!
Codecs.com Recent FFDSHOW builds: Codecs.com posts new builds of FFDSHOW quite regularly, usually only a few days after they are available elsewhere. They used to post primarily Celtic_Druid's builds, but it seems like they are now posting builds from the FFDSHOW Tryouts project. One nice thing about the Codecs.com posts is that they include fairly detailed release notes on the download page, and users post reviews of the individual builds (so you can usually tell if one particular build is terribly broken).
FFDSHOW Tryouts: As mentioned above, Milan Cutka has pretty much vanished from the scene since November 2005. While development on the CVS code has continued, it has been difficult to manage the project without the input of the "owner". For this reason, FFDSHOW was forked recently into a new SourceForge project called FFDSHOW Tryouts, and development has continued there. These newer versions can be found at the FFDShow tryouts project page.
Help Using and Configuring FFDSHOW
The ever-helpful AVS Forums has a very good primer on using and configuring FFDSHOW for optimal playback performance and quality: AVS FFDshow Config Primer
One important note is that if you want to play back AVI files with multiple audio streams, FFDSHOW takes some additional configuration.
K-Lite Codec Packs
One popular alternative to CCCP is the set of K-Lite Codec Packs (KLCP) offered by KL Software, the same group that produces QuicktimeAlternative and RealAlternative. There are four different versions of the KLCP: Basic, Standard, Full, and Mega.
There is significant opposition in the community to "codec packs" such as these because they are notorious for causing problems that are extremely difficult to track down. While in theory, different DirectShow filters which all handle the same type of media should not interfere with one another, reality has proven this to be far from the case. That was actually the primary motivation for the creation of the CCCP -- to create an alternative to the commonly used "mega-packs" which were often not thoroughly tested, beta, and often extremely difficult to fully uninstall. The CCCP was created to solve these problems, ensure easy and consistent support, and streamline the process of getting your media to work.
However, of these "mega-packs" the KLCP stands as one of the few examples that is reasonably safe and effective to use, with the possible exception of the mega and full versions (which still install a ton of things that the vast majority of users will never need). The KLCP codec packs have been fairly thoroughly tested, and it does it's best to avoid potential conflicts. One benefit of KLCP over CCCP is that it is updated with new versions of its individual filters more quickly (which is also one of its potential pitfalls), so it does tend to be a bit more "up-to-date" than CCCP. It also includes (in most versions) some extra tools that I strongly recommend you download separately even if using CCCP, such as G-Spot Codec Information Appliance.
One word of caution: even though the KLCP includes many of the same filters as CCCP, because CCCP uses custom configurations and versions of many of its filters, installing KLCP will not achieve the same results as CCCP. Still, if for some reason using the CCCP doesn't work for you, then the K-Lite Standard Codec Pack would be a very good alternative.
The KLCP Standard currently includes:
- Media Player Classic
- FFDSHOW VFW
- Haali Media Splitter
- Gabest MP4splitter
- Gabest FLVsplitter - note: you will need to remove this component and install Celtic Druid's to enable full Web Media support in MC.
- DirectVobSub (VSFilter)
- GSpot Codec Information Appliance
DivX and XviD
DivX is one very popular commercial implementation of the MPEG-4 ASP (Advanced Simple Profile) compression standard. It grew out of an old "hack" of the Microsoft MPEG-4 Version 3 video codec (which was actually not MPEG-4 compliant). This was the old "so-called" DivX ;-) 3.11 Alpha codec originally released back in 1998. From 1998-2002 enthusiasts (mostly over at Doom9.org and it's predecessors) enhanced these filters by creating software tools that unlocked additional potential of the original encoders.
Then, early in 2000, a new company was formed by some of the creators of these tools called DivXNetworks, Inc. The goal was to create a "real" DivX codec via an open-source project called OpenDivX and to help shepherd it's development. To make a long story short, the project eventually forked. DivXNetworks became DivX, Inc. and took the code from the OpenDivX project and developed it into the proprietary DivX 4.0 product. Ever since, the company has continued to develop and commercially release new versions of the codec, focusing on speed and encouraging wider hardware support from set-top players.
Other developers who had worked on the original OpenDivX project took the same code and started the XviD project in response to the closing of the DivX codebase. To protect the project from future hijacking for commercial purposes the XviD project was licensed under the GNU General Public License (a popular open source license used by the Linux kernel). Due to concerns over possible patent infringement, the official XviD homepage does not provide binary versions of the XviD codec, but binary versions (both VFW and DirectShow) are made available by supporting interested parties, especially Koepi. In many recent side-by-side quality comparisons, current versions of the XviD codec were determined to be the highest quality (and usually best performing) MPEG-4 ASP codec available.
These are more correctly called CODECS rather than simple filters, as they are designed to be used to actually create new media files (perform the COmpression part of the CODEC name, as well as the DECompression part). For playback only, FFDSHOW is generally preferred to using either of these two codecs directly because it provides more features, is free, and generally performs better. You generally only want to install DivX or XviD if you are interested in compressing video files yourself using one of the codecs (and if so, you might be better served to investigate newer MPEG-4 AVC based codecs such as x264).
To be very clear, FFDSHOW can handle playback of content created using both DivX and XviD (and any other MPEG-4 ASP compliant codec). If you aren't making your own video files, you don't need to have either of these codecs installed.
Other MPEG-4 Software Decoders
While FFDSHOW is probably the best choice for the vast majority of people, there are certainly lots of other MPEG-4 Software Decoders available. A few of these can be handy in a few specific instances where FFDSHOW isn't optimal. I am not going to include an exhaustive list of all possibilities, but if you're interested, there is a nice list compiled over at Doom9's forums.
CoreAVC is widely regarded as the fastest MPEG-4 AVC (also known as MPEG-4, Part 10 or H264) software decoder. MPEG-4 AVC video is a newer method of compressing video compared to older MPEG-2 (DVD format) and MPEG-4 ASP (XviD/DivX style) codecs. It has a number of great features, but the primary ability of AVC codecs is to provide much higher quality and fewer artifacts at much lower bitrates (filesizes) than the older codecs allowed. So, essentially, AVC codecs allow you to squeeze those files even smaller without loosing any apparent quality from the original.
MPEG-4 AVC codecs are slowly becoming more and more prevalent. A few common AVC codecs you may encounter are: Nero Digital AVC, Microsoft's VC1 (used on HD-DVDs and BluRay discs), and the open-source x264. AVC codecs are often used for compressing HD content as the better compression algorithms allow the compressionist to squish the very data "heavy" HD content into a much smaller file size without sacrificing quality. If you tried to compress HD content using older MPEG-2 or MPEG-4 ASP codecs, you'd end up with either extremely large files or files with bad visual artifacting.
The downside to these codecs are that they require much more from the host CPU to decode the content. In fact, decoding AVC content is often so demanding that some early Pentium 4 CPUs will not even be able to keep up with decoding even Standard Definition content. High Definition 1080p content heavily compressed using x264 or VC-1 can bring even brand new computers to their knees.
If your computer is struggling to decode AVC compressed content, often using CoreAVC as the decoder instead of FFDSHOW can improve performance dramatically. Unfortunately it is a commercial product and is not free, but it does have very good results and is well supported by the community. More information on the CoreAVC decoder products can be found in the Doom9 thread on the subject.
AMD/ATI Avivo H.264
AMD now provides it's own MPEG-4 decoder with AVC support. If you have an AMD/ATI x1300 series video card or better, you may get the best results using the ATI-supported CyberLink H.264 codec, which enables the hardware acceleration features of your AVIVO video card.
The AMD X2000 series of video cards released in May 2007 further improves upon the H264 hardware assisting technology, though information on the software required to enable this new technology is not yet available at the time of this writing (it is likely that it would be via the same CyberLink codec mentioned above). Apparently the new AVIVO engine in many of the HD 2000 series cards can offload 100% of the AVC decoding process from the CPU to the video card's harware (the HD 2900 Series card doesn't include the full offload capabilities of the lower-end cards).
Similar to what ATI/AMD did with their AVIVO initiative, Nvidia included H264 decoding support in hardware in their new midrange GeForce 8500 and 8600 series of video cards, which were released in May 2007. Unfortunately, they have thus far not updated their high-end video cards (including the GeForce 8800 Ultra) to include this technology. You may purchase Nvidia's PureVideo decoders for all supported Nvidia GeForce video cards directly from Nvidia here.
Alternative Container File Source Filters
While many video files are still wrapped in AVI containers (which can be split by built-in Microsoft provided filters), there are a few new and emerging container formats which are becoming more and more common. Again, CCCP handles the following formats on it's own, but here is some information on the individual components.
MPEG-4 Container Family (mp4 / m4a / m4v)
In order to play these types of files in DirectShow engine, you will need not only decoder filters but also splitter filters. Generally FFDSHOW would be the best decoder filter for most MPEG-4 video stream types, but you do need a separate application to "split" the MP4 container format to feed FFDSHOW the stream data.
There are a wide variety of free and commercial splitter (source) filters available which can handle MPEG-4 container formats in DirectShow. This will just briefly address a handful of the most popular ones:
Haali Media Splitter
Haali Splitter is used in CCCP as the default source filter for MP4, OGM, TS, and MKV support. It is also the "official" Matroska (MKV) source filter. Haali can also handle splitting AVI files, though the implementation is a little buggy and not recommended.
One often encountered issue with Haali's splitter is its tendency to pop up error messages when it fails to properly decode a particular stream. This is useful from a developer's perspective because it causes people to report issues so they can be fixed, but from a user's perspective it is less than desirable because it prevents playback until the error dialog is dismissed. Luckily, due to overwhelming demand, an option was added to Haali to allow you to suppress these error dialog boxes.
1. Open the Haali Media Splitter Properties dialog. This is usually found at Start --> Programs --> Haali Media Splitter (or Combined Community Codec Pack) --> Haali Media Splitter Settings.
2. Switch to the Options tab, shown at right.
3. Expand the Interface item in the tree, and choose Display Error Messages.
4. Change the option from Yes to No in the bottom Value field and then click OK to dismiss the dialog box.
MP4splitter is a DirectShow source filter that handles splitting MP4-family files only. It is a component of the Guliverkli project on SourceForge, which was originally created to support the Media Player Classic application created by the Guliverkli head-developer Gabest. The Guliverkli project (and Media Player Classic) is really an amazing accomplishment, the more so that it was mainly done as a one-man-show, and his components are widely used and respected.
Like most of Gabest's filters, mp4splitter is simple and it works. It doesn't offer much at all in the way of configuration, but it is quite reliable. CCCP uses the Haali Media Splitter filter instead mainly because it needs to use Haali to properly support MKV media, not because of a lack of quality in the mp4splitter filter.
3ivx has a commercial (non-free) filter pack that includes all filters (splitter and decoders) needed for mp4 type.
Nero also provides a full, commercial (again, non-free) MPEG-4 implementation as part of it's Nero Digital product. Nero's MPEG-4 decoding products are well respected in the community and quite fast, though their encoders are frowned upon mainly because it is difficult to get them set up to produce good results. One word of caution, many users have reported many issues with Nero7's DirectShow components. For this reason, it may be best to stick with Nero6-era components or to explore other free alternatives.
Matroska Family (MKV/MKA)
Matroska is a modern, extensible open standard A/V container. Matroska is typically found as .MKV files (matroska video) or .MKA files (matroska audio). CCCP is the official codec set for Matroska files, and it is the recommended way to handle these file types.
Haali Splitter is the "official" source filter for Matroska content and is the recommended way to support these file types.
OGG Media Family (OGG/OGM)
OGG is an open-standard, free, media container format similar in many ways to Matroska. The name OGG actually refers to the container file format and can be used for a wide variety of different multimedia types, including video and other metadata. The OGG standard is maintained by the Xiph.org Foundation and is licensed under the BSD License. The OGG standard has been further extended (hacked) to include the OGG Media Format (OGM) which is a similar container format that was extended to contain video streams and provide additional features, such as chapter support and multiple subtitle support. OGM files are functionally very similar to Matroska files, though not quite as flexible due to their "hacked" nature.
The term "ogg" is most commonly used to refer to OGG Vorbis files, which are simply OGG files which "contain" Vorbis encoded audio tracks and metadata. However, just because you have an OGG file, doesn't mean it is necessarily a Vorbis file, as OGG files can contain many other formats of media. A few codecs commonly used in OGG files are: Vorbis, FLAC, Speex, and Theora.
Available Source Filters: While there are a handful of independent OGG DirectShow implementations based on the original Xiph.org code, the general consensus in the community is that Haali's Media Splitter is the best and most reliable source filter for OGG and OGM media types.