An FFmpeg based source library and Avisynth/VapourSynth plugin for easy frame accurate access
Shell C++ Makefile C M4
Latest commit e1094d2 Mar 6, 2017 @myrsloik myrsloik Merge pull request #287 from jeeb/updating_travis
README: limit the Travis badge to master branch
Failed to load latest commit information.
build-msvc Use VC++ 14 toolset when available Jul 26, 2015
doc Changelog Oct 13, 2016
etc Part 2 May 22, 2015
include Bump version Oct 18, 2016
m4 Build in C++11 mode Apr 11, 2015
src Remove flushbuffers hack completely Oct 17, 2016
.gitattributes Add gitattributes Feb 11, 2015
.gitignore Add vapoursynth stuff to .gitignore Apr 4, 2014
.travis.yml travis: disable deprecation warnings as errors Mar 5, 2017
COPYING Mention the LGPL too Jul 14, 2011
INSTALL Added an script Feb 7, 2010 Remove configure check for -fvisibility-hidden Apr 12, 2015 Fix pkg-config file generation. Closes #224. Jul 27, 2015 README: limit Travis-CI badge to master branch Mar 6, 2017
aclocal.m4 Build in C++11 mode Apr 11, 2015 Replace recursive make with single Makefile Feb 27, 2010 Don't disable network support in ffmpeg Jan 17, 2016
compile Build in C++11 mode Apr 11, 2015
config.guess Build in C++11 mode Apr 11, 2015
config.sub Build in C++11 mode Apr 11, 2015
configure Fix configure checks Sep 7, 2015 Fix configure checks Sep 7, 2015
depcomp Build in C++11 mode Apr 11, 2015 Add support for resampling audio with libavresample Mar 24, 2013
install-sh Build in C++11 mode Apr 11, 2015 Build in C++11 mode Apr 11, 2015
missing Build in C++11 mode Apr 11, 2015 Use printf rather than echo -n for OS X compatiblity, as XSI echo has… Dec 26, 2011

Build Status

FFmpegSource (usually known as FFMS or FFMS2) is a cross-platform wrapper library around FFmpeg/libav. It gives you an easy, convenient way to say "open and decompress this media file for me, I don't care how you do it" and get frame- and sample-accurate access (usually), without having to bother with the sometimes less than straightforward and less than perfectly documented libav API.

The library is written in C++, but the public API is pure C, so if you can link to a C library, you can use FFMS2. The source is available under the MIT license, but the license of the binaries depends on how libav was compiled. There are optional components that require a GPL libav, and if those are compiled in FFMS2 itself becomes covered by the GPL as well. The official Windows builds are GPLv3 for this reason.

For more information on using the library, see the API documentation and the changelog.

Avisynth and VapourSynth plugin

For the end user, the most visible use of FFMS is the implementation of both an Avisynth and a VapourSynth source plugin that uses the FFMS library to open media files. This plugin is a part of the FFMS2 project and is available for download here; for documentation see the Avisynth user guide.


In addition to being able to open almost any common audio or video format, the Avisynth plugin has a number of more or less unique properties that other Avisynth source filters lack:

  • It is the only source filter that has support for Unicode filenames that are not representable in the system codepage.
  • It is the only source filter that has proper variable framerate (VFR) support.
  • It is the only general-purpose (i.e. not restricted to one or a few formats) source filter that will work reliably when running Avisynth under Wine.
  • It is the only general-purpose source filter that does not rely on external decoders.
  • It is (probably) the only source filter that supports mid-stream video resolution switches.

Versions and variants

If you're confused by all the different variants, here's a small explanation:

  • Vanilla (no suffix): standard 32-bit version. If you don't know what you want, you want this.
  • -x64: 64-bit version; mostly for use with 64-bit Avisynth.
  • -avs-cplugin: Variant of the Avisynth plugin written in C. Primary purpose is to get access to the new colorspaces available in Avisynth 2.6.
  • SDK: software developer's kit, for people who want to develop Windows applications that use FFMS2, using Microsoft Visual Studio 2008 or later.

Packages marked rNUMBER are testing builds made in-between releases. Download them if you need some bleeding-edge feature or just want to test out the upcoming version. Do note that they may be less stable than the official release versions.

Why is it called FFmpegSource, that makes no sense at all!?!

FFMS originated as an Avisynth file reader plugin, and those are traditionally called FooSource, where Foo usually is the method used to open the file. For historical reasons the entire project is still called FFmpegSource, although these days the name is pretty misleading and makes people think it has something to do with FFmpeg's source code or somesuch. To avoid confusion, it's probably better to refer to the library as FFMS (2, since version 1 was only an Avisynth plugin...) and keep the FFmpegSource name for the Avisynth plugin.