# LAV Filters: a DirectShow splitter and decoder set built on FFmpeg

> LAV Filters registers FFmpeg-based DirectShow filters so Windows players can open MKV, MP4, TS and Blu-ray sources. It is a codec layer for existing players, not a player, and it needs administrative rights to install.

**Nevcairiel/LAVFilters** — LAV Filters - Open-Source DirectShow Media Splitter and Decoders

- Repository: https://github.com/Nevcairiel/LAVFilters
- Stars: 9,175 · Forks: 841
- Language: C++
- License: GPL-2.0
- Published: 2026-09-21 · Updated: 2026-09-21 · Language: en
- Canonical page: https://hysenlabs.com/projects/nevcairiel-lavfilters

## The DirectShow gap LAV Filters fills

Windows ships with a media framework, DirectShow, that predates most of the container formats people actually use today. A player built on that framework can only open what the registered filters on the machine can parse. LAV Filters supplies that missing layer: a splitter and a pair of decoders built on libavformat and libavcodec from FFmpeg, so a DirectShow player can open formats it was never written to understand.

The audience is narrow and specific. It is Windows users running a DirectShow-based player: MPC-HC, PotPlayer, Media Portal and similar. The README describes the goal plainly: the filters "will allow you to play virtually any format in a DirectShow player." That sentence also sets the boundary. LAV Filters is not a player. It has no interface of its own, no library window, no playback controls. If you do not already have a DirectShow player installed, this project gives you nothing to click.

The README is honest about maturity in a way many project pages are not: "The filters are still under development, so not every feature is finished, or every format supported." Treat that as the operating assumption rather than a disclaimer.

## Splitter, decoders, and who registers for what

Three components do the work. LAV Splitter opens the container, identifies the streams inside it and hands them to decoders. LAV Audio Decoder and LAV Video Decoder turn those streams into audio and video frames. The splitter registers by default for formats the project has tested and found working at least partially, which the README lists as including MKV/WebM, AVI, MP4/MOV, TS/M2TS/MPG, FLV, OGG and Blu-ray (.bdmv and .mpls).

Registration merit decides which filter a player picks when several are available. The audio and video decoders register "with relatively high merit," according to the README, which should make them the default choice. That is a convention, not a guarantee: most players let the user override the preferred decoder, and a player configured to use something else will keep using it.

The splitter's stream selection is where the design gets opinionated. Video selection is not configurable at all; the README states LAV Splitter "will quite simply pick the one with the best quality." Audio selection takes a list of ISO 639-2 three-letter codes, comma or space separated, tried in order. `eng ger fre` means look for English first, then German, then French. When several tracks match one language, the README says the choice falls to channel count first and codec second, with PCM and lossless codecs ranked above lossy ones.

Subtitle selection has four modes. No Subtitles leaves them off. Only Forced Subtitles pre-selects tracks carrying the forced flag, still respecting language preferences. Default selects subtitles matching your language, and additionally always uses tracks flagged default or forced. Advanced is a small rule language. Each rule pairs an audio language and a subtitle language separated by a colon, so `eng:ger` selects German subtitles when English audio is found. The wildcard `*` matches anything, `off` disables subtitles for that audio language, and flags can be appended with a pipe: `d` for default, `f` for forced, `h` for hearing impaired, `n` for normal. Prefixing a flag with `!` negates it. Rules are parsed left to right and the first match wins. A stream title can be matched with `@`, but only single words, because spaces separate tokens.

## Installing LAV Filters and selecting a subtitle track

The README gives two steps: unpack, then register using the install_*.bat files. Registration requires administrative rights and an elevated shell, which the README states as "Run as Administrator." There is no installer wizard described in the README, and no package manager command. The repository does contain an Inno Setup script, LAVFilters.iss, but the README does not document a prebuilt installer, so treat the unpack-and-register path as the documented one.

Open an elevated command prompt in the unpacked folder and run the install script that matches your build. The README refers to these generically as install_*.bat files; the exact names are not listed in the README, so check the folder contents rather than guessing.

```bash
install_*.bat
```

After running it, the filters are registered with DirectShow. You should see them appear in your player's filter list during playback, and MKV, MP4 or TS files that previously failed to open should now play.

One prerequisite matters before you start. The README warns that some splitters register in a "bad" way and force all players to use them, naming Haali Media Splitter. To give LAV Splitter priority you must either uninstall Haali or rename its .ax file, at least temporarily.

For subtitle behaviour, open the LAV Splitter configuration and pick a mode. The advanced mode takes rules in the syntax described above. This rule set, taken from the README's own examples, loads an English or German forced track when the audio is English and otherwise turns subtitles off, then falls back to English or German subtitles for non-English audio:

```
eng:eng|f eng:ger|f eng:off *:eng *:ger
```

A simpler rule covers the common case of a file whose default and forced flags are set on the same track, which the README notes is a real pattern. This selects German subtitles that carry the default flag but not the forced flag, when the audio is Japanese:

```
jpn:ger|d!f
```

For Blu-ray, the README says to open the index.bdmv file in the BDMV folder on the disc. LAV Splitter detects the longest track, usually the main movie, and starts playing it. Opening a specific .mpls playlist from BDMV/PLAYLIST plays that title instead. Choosing the title from inside the player is described as a future feature, so it is not available now.

## Where LAV Filters is the wrong tool

The most common mistake is expecting LAV Filters to be a media player. It is not, and the README never claims otherwise. If you want something to double-click and watch, you need a player that hosts these filters.

The second limitation is platform. DirectShow is a Windows technology. The build instructions use VS2022 and the repository ships a Visual Studio solution, LAVFilters.sln. The README notes that older Visual Studio versions are not officially supported but may still work. There is no documented path to run this on Linux or macOS, and the related searches around Steam Deck and winetricks are not addressed anywhere in the README. A Steam Deck runs Linux; nothing in the README describes a supported way to register DirectShow filters there.

Third, building from source is not a casual operation. The README states plainly that you must build your own FFmpeg. FFmpeg is included as a submodule pointing to a custom fork with patches for improved compatibility with LAV and DirectShow, hosted at a separate Gitea instance. A script is provided to compile FFmpeg using MSYS2 with MINGW/GCC or MSVC. libbluray is likewise a custom version linked as a submodule. If you only want to watch video, compiling is the wrong path; if you want to patch the filters, you inherit the maintenance of two forked dependencies.

Fourth, the project's own README sets expectations low on completeness. Features are unfinished and some formats are unsupported. That is a moving target rather than a fixed defect, but it means a file that fails today may simply be one the project has not finished with.

## LAV Filters against K-Lite and ffdshow

The comparisons people search for are K-Lite and ffdshow, and the difference is packaging, not function.

K-Lite is a bundle. It collects codecs, filters and often a player into one installer and configures them together. LAV Filters is one component that such bundles frequently include. If you install K-Lite, you are likely running LAV Filters underneath without interacting with it directly. The trade-off is control: a bundle decides what gets registered and in what order, while installing LAV Filters alone leaves those decisions to you and to your player's merit settings.

ffdshow is the older generation of the same idea, a DirectShow decoder set. The architectural difference is the codec library underneath. LAV Filters is built on libavformat and libavcodec from FFmpeg, which is why format coverage tracks FFmpeg's rather than being maintained filter by filter. That is also why the project carries a custom FFmpeg fork: the compatibility patches live in the dependency, not in the filter code.

The FFmpeg comparison is a category error worth naming. FFmpeg is a command-line toolkit and a set of libraries; LAV Filters is a DirectShow registration layer on top of those libraries. Running ffmpeg.exe to transcode a file and registering LAV Filters to play it in MPC-HC are different jobs that happen to share a codebase lineage.

## Licence, forks, and what upgrades cost

LAV Filters is GPL-2.0, and the repository carries a COPYING file at the top level. That matters more here than for a standalone application, because the project links against a custom FFmpeg fork and a custom libbluray, both pulled in as Git submodules. Anyone redistributing a build is distributing those linked components too, and the GPL obligations attach to the combination. This is a description of the licence identifier and the repository layout, not legal advice; if you plan to ship LAV Filters inside a product, have someone qualified read the terms.

Upgrade cost splits by how you obtained it. If you installed a prebuilt set, upgrading means unpacking the new version and re-running the install script as administrator, which re-registers the filters. The release history shows 0.83 on 2026-08-17, 0.82 on 2026-06-10 and 0.81 on 2026-01-12, so the cadence is a few releases a year rather than continuous churn. The last push to the repository was on 2026-09-06, which is recent enough that the project is not dormant, but the README still describes the filters as under development, so a newer release is not a promise that a specific unfinished feature landed.

If you build from source, the upgrade cost is higher and less predictable. You are tracking three repositories: the filters, the FFmpeg fork and the libbluray fork. A change in the FFmpeg submodule can require a rebuild of the whole dependency chain, and the README does not document a rollback procedure for a registration that breaks playback. Keep the previous unpacked folder until the new one is confirmed working.

## Conclusion

Adopt LAV Filters if you already use a DirectShow player on Windows and need MKV, MP4, TS or Blu-ray files to open without installing a bundled codec pack. Do not adopt it if you play media on Linux or macOS, or if your player already ships its own FFmpeg-based decoding and you have no reason to change it. Before installing, verify that no Haali Media Splitter is registered on the machine, because the README states Haali registers in a way that forces all players to use it, and check which install script matches your architecture. After registering, confirm the filters appear in the player's filter list and that the splitter is being used for an MKV file before relying on it.

## FAQ

### What are LAV Filters?

They are a set of DirectShow filters based on the libavformat and libavcodec libraries from FFmpeg. The set includes a splitter, an audio decoder and a video decoder, and its purpose is to let a DirectShow player open formats it otherwise could not.

### How do I install LAV Filters?

Unpack the files and register them with the install_*.bat scripts from an elevated shell, since registration requires administrative rights. The README also warns that Haali Media Splitter should be uninstalled or its .ax file renamed, because it forces all players to use it.

### How do I use LAV Filters in PotPlayer?

The README does not name PotPlayer, but it does state that most players offer a way to choose the preferred decoder, and that the decoders register with relatively high merit so they should be preferred by default. In a DirectShow player you would confirm through the player's filter or decoder settings that LAV Splitter and the LAV decoders are the ones in use.

### How do LAV Filters compare with K-Lite?

K-Lite is a bundle that packages codecs, filters and often a player together, while LAV Filters is a single component that bundles frequently include. Installing K-Lite usually means running LAV Filters underneath, with the bundle deciding registration order rather than you.

### How do LAV Filters compare with FFmpeg?

LAV Filters is built on libavformat and libavcodec from FFmpeg, but it registers as DirectShow filters for playback inside a Windows player. FFmpeg itself is a command-line toolkit and library set, so it performs a different job even though the code lineage overlaps.

### How do LAV Filters compare with ffdshow?

Both are DirectShow decoder sets, but LAV Filters is built on the FFmpeg libraries rather than maintaining decoders individually, which is why its format coverage follows FFmpeg. The project also carries a custom FFmpeg fork with compatibility patches for LAV and DirectShow.

## Sources

- [Issues](https://github.com/Nevcairiel/LAVFilters/issues)
- [License: GPL-2.0](https://github.com/Nevcairiel/LAVFilters/blob/master/LICENSE)
- [Nevcairiel/LAVFilters on GitHub](https://github.com/Nevcairiel/LAVFilters)
- [README](https://github.com/Nevcairiel/LAVFilters/blob/master/README.md)
- [Releases](https://github.com/Nevcairiel/LAVFilters/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/nevcairiel-lavfilters
