| 4 | | environment and a few tools which are strictly required. |
| 5 | | |
| 6 | | The following sections give some indications for installing some of the required components. |
| 7 | | Note that the only strict requirements for compiling a plain vanilla version of FFmpeg (no external libraries) is MinGW (compilation environment) and git required for downloading and updating the source code. |
| 8 | | |
| 9 | | Also note that sometimes it is easier to cross compile, see CrossCompilingForWindows, which also may contain some hints/clues for compiling the various dependencies you'd need using mingw, too. |
| 10 | | |
| 11 | | Some Windows-specific compilation information can be found in the official documentation at: |
| 12 | | |
| 13 | | http://ffmpeg.org/platform.html#Windows |
| 14 | | |
| 15 | | == MinGW/MSys == |
| 16 | | |
| 17 | | You basically have two options for a compiler: mingw "mainline" or mingw-w64. Both offer working gcc's for windows. The latter tends to be slightly more up to date than the former, and offers more library compatibility, like DirectShow headers, so preferably use mingw-w64. The instructions here are basically for mingw "mainline", but the two are interchangeable. Basically, you will install one "MinGW" package (MinGW or mingw-w64) and one ("MSys" or "Msys2"), MinGW provides gcc and headers and change, Msys provides shell utilities like make and bash. |
| 18 | | |
| 19 | | === mingw-w64 === |
| 20 | | |
| 21 | | MinGW-w64 (arguably like MinGW but with better header files) can be found at: |
| 22 | | |
| 23 | | http://mingw-w64.sourceforge.net (note this project does not have downloadable compilers by default, you'll probably want the "mingw-builds" project, which provide pre-built compilers, see list of options here: http://stackoverflow.com/a/20502212/32453 and here http://mingw-w64.org/doku.php/download). |
| 24 | | |
| 25 | | To use mingw-w64, basically install Msys using the MinGW setup, as above, but only check the "msys for developers option". Then install a mingw-w64 compiler (see http://ingar.satgnu.net/devenv/mingw32/base.html). Here is an example: http://www.helyar.net/2014/compile-ffmpeg-64-bit-on-windows-with-msysmingw-w64 |
| 26 | | |
| 27 | | Then configure your PATH appropriately, for instance mine looks like this: c:\installs\mingw-w64\i686-4.9.2-posix-dwarf-rt_v3-rev0\mingw32\bin;c:\MinGW\msys\1.0\bin... being the beginning of the PATH. In this case, the MINGW_PATH would be C:\installs\mingw-w64\i686-4.9.2-posix-dwarf-rt_v3-rev0\mingw32 |
| 28 | | |
| 29 | | Also note that to access directshow input devices you have to use the mingw-w64 as the compiler (or cross compiler), as straight MinGW headers don't have this functionality apparently. |
| 30 | | |
| 31 | | And to install libraries you'd either use ./configure --prefix=/usr/local or--prefix=/c/installs/mingw-w64/i686-4.9.2-posix-dwarf-rt_v3-rev0/mingw32/i686-w64-mingw32 |
| 32 | | |
| 33 | | The latter if you wanted to install something to your MINGW_PATH itself... |
| 34 | | |
| | 8 | environment and a few tools which are strictly required. The following sections give some indications for installing some of the required components. |
| | 9 | |
| | 10 | {{{ |
| | 11 | #!div style="border: 1px solid #c7e5c7; margin: 1em; background-color: #ddffdd;" |
| | 12 | '''Tip:''' The [https://github.com/jb-alvarado/media-autobuild_suite Media Autobuild Suite] can automatically build FFmpeg under Windows with several external dependencies. You can still follow this guide if you want to manually compile FFmpeg. |
| | 13 | }}} |
| | 14 | |
| | 15 | Note that the only strict requirement for compiling a plain vanilla version of FFmpeg (no external libraries) is MinGW (compilation environment) and Git required for downloading and updating the source code. |
| | 16 | |
| | 17 | Also note that sometimes it is easier to cross compile, see [[CrossCompilingForWindows|the Cross Compiling guide]], which also may contain some hints/clues for compiling the various dependencies you'd need using MinGW, too. |
| | 18 | |
| | 19 | Some Windows-specific compilation information can be found in the [http://ffmpeg.org/platform.html#Windows official documentation]. |
| | 20 | |
| | 21 | == Installing Requirements == |
| 38 | | Go to: |
| 39 | | |
| 40 | | http://www.mingw.org |
| 41 | | |
| 42 | | and look for the "Download" page. |
| | 25 | You have two options for a compiler: |
| | 26 | |
| | 27 | 1. MinGW-w64 |
| | 28 | 2. MinGW "mainline" |
| | 29 | |
| | 30 | Both offer working `gcc`s for Windows. The first tends to be slightly more up to date than the latter, and offers more library compatibility, like DirectShow headers, so preferably use MinGW-w64. |
| | 31 | |
| | 32 | The MinGW package provides `gcc` and headers. |
| | 33 | |
| | 34 | ==== Option 1: MinGW-w64 ==== |
| | 35 | |
| | 36 | MinGW-w64 can be [http://mingw-w64.sourceforge.net found on SourceForge]. |
| | 37 | |
| | 38 | This project does not have downloadable compilers by default; you'll probably want the [http://mingw-w64.org/doku.php/download "mingw-builds" project], which provides pre-built compilers. |
| | 39 | |
| | 40 | To use MinGW-w64, install Msys using the MinGW setup, as above, but only check the "msys for developers option". Then [http://ingar.satgnu.net/devenv/mingw32/base.html install a MinGW-w64 compiler]. [http://www.helyar.net/2014/compile-ffmpeg-64-bit-on-windows-with-msysmingw-w64 Here] is an example. |
| | 41 | |
| | 42 | Then configure your PATH appropriately, for instance mine looks like this: |
| | 43 | |
| | 44 | {{{ |
| | 45 | c:\installs\mingw-w64\i686-4.9.2-posix-dwarf-rt_v3-rev0\mingw32\bin;c:\MinGW\msys\1.0\bin; ... |
| | 46 | }}} |
| | 47 | |
| | 48 | In this case, the `MINGW_PATH` would be: |
| | 49 | |
| | 50 | {{{ |
| | 51 | C:\installs\mingw-w64\i686-4.9.2-posix-dwarf-rt_v3-rev0\mingw32 |
| | 52 | }}} |
| | 53 | |
| | 54 | To access DirectShow input devices you have to use MinGW-w64 as the compiler (or cross compiler), as straight MinGW headers don't have this functionality. |
| | 55 | |
| | 56 | To install libraries you'd either use |
| | 57 | |
| | 58 | {{{ |
| | 59 | ./configure --prefix=/usr/local |
| | 60 | }}} |
| | 61 | |
| | 62 | or |
| | 63 | |
| | 64 | {{{ |
| | 65 | ./configure --prefix=/c/installs/mingw-w64/i686-4.9.2-posix-dwarf-rt_v3-rev0/mingw32/i686-w64-mingw32 |
| | 66 | }}} |
| | 67 | |
| | 68 | The latter if you wanted to install something to your `MINGW_PATH` itself. |
| | 69 | |
| | 70 | ==== Option 2: MinGW "mainline" ==== |
| | 71 | |
| | 72 | Go to http://www.mingw.org and look for the "Download" page. |
| 53 | | entry with the option "MinGW shell". Click on it and it will launch a terminal with a bash shell. This is |
| 54 | | supposed to be a GNU/Unix environment, and you're supposed to know a |
| 55 | | bit of UNIX commands for getting through it. Alternatively, or in case the MinGW entry is missing, you need to manually |
| 56 | | launch the MINGW_PATH/msys/1.0/msys.bat file. |
| 57 | | |
| 58 | | MinGW adopts a mounting mechanism to make Windows directories appear like |
| 59 | | native UNIX-like paths. Check the output of the mount command, and |
| | 83 | entry with the option "MinGW shell". Click on it and it will launch a terminal with a bash shell. This is supposed to be a GNU/Unix environment, and you're supposed to know a bit of UNIX commands for getting through it. Alternatively, or in case the MinGW entry is missing, you need to manually launch the `MINGW_PATH/msys/1.0/msys.bat` file. |
| | 84 | |
| | 85 | MinGW adopts a mounting mechanism to make Windows directories appear like native UNIX-like paths. Check the output of the mount command, and |
| 64 | | Note that by default the user home will be placed in MINGW_PATH/msys/1.0/home/USER, |
| 65 | | and that will be your working directory of the msys shell. |
| 66 | | |
| 67 | | Finally, you need to edit the system environment {{{Path}}} variable, adding the MINGW_PATH/bin directory. This will allow both the system |
| 68 | | and the msys shell to find programs provided by MinGW. This can be done for example with: |
| | 90 | Note that by default the user home will be placed in `MINGW_PATH/msys/1.0/home/USER`, and that will be your working directory of the msys shell. |
| | 91 | |
| | 92 | Finally, you need to edit the system environment {{{PATH}}} variable, adding the MINGW_PATH/bin directory. This will allow both the system |
| | 93 | and the msys shell to find programs provided by MinGW. This can be done for example with: |
| | 94 | |
| 73 | | === MSYS === |
| 74 | | |
| 75 | | Just install it then run its console, you will be able to then run configure (assuming you've installed a gcc to you PATH already). |
| 76 | | |
| 77 | | === MSYS2 === |
| 78 | | |
| 79 | | MSYS2, install it, |
| 80 | | |
| 81 | | https://msys2.github.io/ |
| 82 | | |
| 83 | | |
| 84 | | then run the {{{mingw32_shell.bat}}} or {{{mingw64_shell.bat}}} command in the MSYS2 installation home. Be careful not to run the {{{MSYS2 Shell}}} as this will result in FFmpeg's configure saying {{{building an MSYS binary is not recommended}}} and exiting. |
| | 99 | === MSys === |
| | 100 | |
| | 101 | Msys provides shell utilities like `make` and `bash`. Choose either MSys or MSYS2. |
| | 102 | |
| | 103 | ==== Option 1: MSYS ==== |
| | 104 | |
| | 105 | Just install MSys from http://www.mingw.org/wiki/msys. |
| | 106 | |
| | 107 | Then run its console. You will be able to then run `configure` (assuming you've installed a `gcc` to your `PATH` already). |
| | 108 | |
| | 109 | ==== Option 2: MSYS2 ==== |
| | 110 | |
| | 111 | Install MSYS2 from https://msys2.github.io/. |
| | 112 | |
| | 113 | Then run the {{{mingw32_shell.bat}}} or {{{mingw64_shell.bat}}} command in the MSYS2 installation home. Be careful not to run the {{{MSYS2 Shell}}} as this will result in FFmpeg's configure saying {{{building an MSYS binary is not recommended}}} and exiting. |
| 138 | | * fix the HOME variable, so that it will point to |
| 139 | | $MINGW_PATH/msys/1.0/home/$USER |
| 140 | | |
| 141 | | * edit the path, so that the git bin and cmd paths are located '''after''' |
| 142 | | the corresponding MinGW bin directory. |
| 143 | | |
| 144 | | |
| 145 | | == yasm == |
| 146 | | |
| 147 | | yasm is a non-strict requirement, it allows for optimized compilation |
| 148 | | so it is recommended to install it. |
| 149 | | The easiest way to install it for Windows is by simply downloading the |
| 150 | | binary provided in: |
| 151 | | |
| 152 | | http://www.tortall.net/projects/yasm/wiki/Download |
| | 160 | |
| | 161 | * Fix the HOME variable, so that it will point to `$MINGW_PATH/msys/1.0/home/$USER` |
| | 162 | |
| | 163 | * Edit the path, so that the git bin and cmd paths are located '''after''' the corresponding MinGW bin directory. |
| | 164 | |
| | 165 | === YASM === |
| | 166 | |
| | 167 | YASM is a non-strict requirement; it allows for optimized compilation |
| | 168 | so it is recommended to install it. The easiest way to install it for Windows is by simply downloading the |
| | 169 | [http://www.tortall.net/projects/yasm/wiki/Download binary provided]. |
| 166 | | |
| 167 | | == SDL == |
| 168 | | |
| 169 | | SDL is required for ffplay and the SDL output device, the project |
| 170 | | website can be looked at: |
| 171 | | |
| 172 | | http://www.libsdl.org/ |
| 173 | | |
| 174 | | You need the 1.2 version: |
| 175 | | |
| 176 | | http://www.libsdl.org/download-1.2.php |
| 177 | | |
| 178 | | Once installed in the MINGW_PATH, the FFmpeg configure should be able to auto-detect it. |
| | 183 | === SDL === |
| | 184 | |
| | 185 | SDL is required for ffplay and the SDL output device. You need the [http://www.libsdl.org/download-1.2.php 1.2 version]. |
| | 186 | |
| | 187 | Once installed in the `MINGW_PATH`, the FFmpeg `configure` should be able to auto-detect it. |
| 185 | | The bug has been reported here: |
| 186 | | |
| 187 | | http://bugzilla.libsdl.org/show_bug.cgi?id=1237 |
| 188 | | |
| 189 | | == libx264 == |
| 190 | | |
| 191 | | libx264 can be compiled and installed in the MinGW+msys environment. |
| 192 | | |
| 193 | | Latest version can be found at this address: |
| 194 | | |
| 195 | | http://www.videolan.org/developers/x264.html |
| 196 | | |
| 197 | | if you want libx264.dll files (instead of static) you should use the {{{--enable-shared}}} configure option. |
| | 193 | The bug has been reported here: http://bugzilla.libsdl.org/show_bug.cgi?id=1237 |
| | 194 | |
| | 195 | === libx264 === |
| | 196 | |
| | 197 | [http://www.videolan.org/developers/x264.html libx264] can be compiled and installed in the MinGW+MSys environment. |
| | 198 | |
| | 199 | If you want libx264.dll files (instead of static) you should use the {{{--enable-shared}}} configure option. |
| 201 | | == lib.exe == |
| 202 | | |
| 203 | | lib.exe is required for creating .dll.a import stub libraries, so that |
| 204 | | you can link to the DLLs from MSVC (Microsoft Visual Studio compiler, |
| 205 | | bundled with it), if you are planning on creating a DLL style FFmpeg build and need/want to do that. |
| 206 | | |
| 207 | | lib.exe is a Microsoft tool used for creating DLL files. It is bundled |
| 208 | | together with Visual Studio. Microsoft Visual Studio Express download |
| 209 | | is available for free. Once installed you'll need to add the directory |
| 210 | | where lib.exe is located to the system Path. |
| 211 | | |
| 212 | | dlltool.exe (which is part of binutils) may be used instead of |
| 213 | | lib.exe. The downside in this case is that the import libraries break |
| | 203 | === lib.exe === |
| | 204 | |
| | 205 | `lib.exe` is required for creating `.dll.a` import stub libraries, so that you can link to the DLLs from MSVC (Microsoft Visual Studio compiler, bundled with it), if you are planning on creating a DLL style FFmpeg build and need/want to do that. |
| | 206 | |
| | 207 | `lib.exe` is a Microsoft tool used for creating DLL files. It is bundled together with Visual Studio. Microsoft Visual Studio Express download is available for free. Once installed you'll need to add the directory where `lib.exe` is located to the system path. |
| | 208 | |
| | 209 | `dlltool.exe` (which is part of binutils) may be used instead of |
| | 210 | `lib.exe`. The downside in this case is that the import libraries break |
| 268 | | Once you installed all the necessary packages (MinGW is the only strict requirement for building FFmpeg, git is required to update your FFmpeg source), |
| 269 | | you need to open a MinGW shell, change directory to where you checked out the FFmpeg sources, and configure and make FFmpeg the usual way. |
| 270 | | |
| 271 | | NOTE: configure is sometimes painfully slow in MinGW. |
| 272 | | |
| | 261 | Once you installed all the necessary packages (MinGW is the only strict requirement for building FFmpeg, git is required to update your FFmpeg source), you need to open a MinGW shell, change directory to where you checked out the FFmpeg sources, and configure and make FFmpeg the usual way. |
| | 262 | |
| | 263 | Note that under MinGW, configuring can be painfully slow. |