Bohl's Blog

my digital life

building FFmpeg on Windows (8 of n)

Here are the next steps:

  • I created a clone of the FFmpeg-repository on Github. The patches (from the previous posts) are included in the branch "cygicl" - find it here.
  • The tool for automatically creating the VisualStudio-project can be found on CodePlex - find it here.
  • The scripts and are included in the branch on Github.

So - here is a script that will execute all tasks in one sweep - i.e. get the git-repository, compile FFmpeg with ICL, tweak the headers so that they work for both x86 and x64, download the VisualStudio-project-generator-tool and run it:


if (icl.exe 2>&1 | grep -q "IA-32"); then
elif (icl.exe 2>&1 | grep -q " Intel(R) 64"); then
    echo "Could not determine whether to use x86_32 or x86_64."
	exit 1

echo "Building for architecture '$arch'"

git clone

cd FFmpeg

git checkout cygicl

# need to add the current path so that "" is found
export PATH
./configure --enable-inline-asm --enable-gpl --enable-nonfree --disable-doc --toolchain=cygicl --host-cc=gcc --arch=$arch

sed 's/%define ARCH_X86_32 [0-1]//' < config.asm | sed 's/%define ARCH_X86_64 [0-1]//' > config.asm_out
sed 's/%define HAVE_ALIGNED_STACK [0-1]/%if ARCH_X86_32 == 1\n %define HAVE_ALIGNED_STACK 0\n%elif ARCH_X86_64 == 1\n %define HAVE_ALIGNED_STACK 1\n%endif/' < config.asm_out > config.asm
rm config.asm_out

sed 's/#define ARCH_X86_32 [0-1]/#if defined( _M_X64)\n #define ARCH_X86_32 0\n#elif defined( _M_IX86)\n #define ARCH_X86_32 1\n#endif\n/' < config.h | sed 's/#define ARCH_X86_64 [0-1]/#if defined( _M_X64)\n #define ARCH_X86_64 1\n#elif defined( _M_IX86)\n #define ARCH_X86_64 0\n#endif\n/' > config.h_out
sed 's/#define HAVE_ALIGNED_STACK [0-1]/#if defined( _M_X64)\n #define HAVE_ALIGNED_STACK 1\n#elif defined( _M_IX86)\n #define HAVE_ALIGNED_STACK 0\n#endif\n/' < config.h_out > config.h
rm config.h_out

make --dry-run  --always-make > makelog.txt

make -j "$(grep -c processor /proc/cpuinfo)" 

wget -O MakeVSProject4FFmpeg.exe ''
chmod +x MakeVSProject4FFmpeg.exe
./MakeVSProject4FFmpeg.exe --projname vsFFmpeg --makefileoutput makelog.txt --parse_includes

make fate SAMPLES=/cygdrive/z/fate-suite/  -j "$(grep -c processor /proc/cpuinfo)"

You will have to change the path in the last statement to the folder where your FATE-samples reside. That's it - now you should find a file "vsFFmpeg.vcxproj" in the FFmpeg-folder, which you can open with VisualStudio 2012. It should build without errors (for x86 and x64 in Debug and Release), and the executables should also pass FATE without problems. Nice!