Twitterに投稿 はてなブックマークに追加 Yahoo!ブックマークに追加 Google Bookmarksに追加

目次 >> ffmpeg >> Windowsでのコンパイル方法

Windowsでのffmpegのコンパイル方法

ここでは、Visual Studio Community 2013を使って、ffmpegをソースコードからコンパイルする方法を解説する。OSはWindows 7 64 bit版。

Visual Studio Community 2013の設定

Visual C++をコマンドラインから利用できるようにしておく。一番簡単な設定方法は、
まず、Windowsのスタートメニューから、[Visual Studio 2013][Visual Studio Tools][VS2013 x64 Native Tools Command Prompt」を起動する。
そして

$ env

と打つと、環境変数が多数表示されるはずである。その中の

INCLUDE=C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE;C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\ATLMFC\INCLUDE;C:\Program Files (x86)\Windows Kits\8.1\include\shared;C:\Program Files (x86)\Windows Kits\8.1\include\um;C:\Program Files (x86)\Windows Kits\8.1\include\winrt;



LIB=C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\LIB\amd64;C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\ATLMFC\LIB\amd64;C:\Program Files (x86)\Windows Kits\8.1\lib\winv6.3\um\x64;

という行を見つけ出し、環境変数INCLUDEに
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE;C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\ATLMFC\INCLUDE;C:\Program Files (x86)\Windows Kits\8.1\include\shared;C:\Program Files (x86)\Windows Kits\8.1\include\um;C:\Program Files (x86)\Windows Kits\8.1\include\winrt;

を、環境変数LIBに

C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\LIB\amd64;C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\ATLMFC\LIB\amd64;C:\Program Files (x86)\Windows Kits\8.1\lib\winv6.3\um\x64;

を設定する。これらの値は、各パソコンごとに違う可能性があるので、envコマンドで打ち出して、コピーするのが良い。

環境変数、

MSYSのインストール

まず、MinGWのMSYSをインストール

ここから、インストーラをダウンロードする。

mingw-get-setup.exeを実行して、インストーラを起動。

mingw-developer-toolkit、mingw32-base、mingw32-gcc-g++、msys-base、msys系のすべての項目(binとある項目だけで良い、またmsys-gccがあるとopusがコンパイルできないので、除いておく)、にチェックを入れて、[Installation]-[Apply changes]を選択して、MSYSをインストールする。
なお、後述のfdk-aacを入れずに素のffmpegをコンパイルするだけなら、msys-baseだけでもOKである。
そして

C:\MinGW\msys\1.0\bin

および

C:\MinGW\bin

にパスを通しておく。なお、C:\MinGW\msys\1.0\binは、Windowsパスよりも前に来るようにしないと、lameコンパイル時にエラーが出る。

YASMのインストール

次にYASMをインストールする。
ここから、自分のシステムに合ったものをダウンロードする。
今回の環境は、Windows 7 64 bitなので、「Win64 .exe (for general use on 64-bit Windows)」とある、yasm-1.3.0-win64.exeをダウンロードした。

ダウンロードしたファイルは、圧縮されたものなどではなく、実行ファイルそのものである。
ファイル名をyasm.exeと変えて、適当な例えばC:\Win32app\yasmなどのフォルダを作成し、そこにyasm.exeをコピーして、パスを通す。(すでにパスの通っているフォルダに置いてもよい)

コンパイル

まず、ffmpegのソースコードをダウンロードして、解凍しておく。

解凍したフォルダ(例えば\ffmpeg-2.7)で、コマンドプロンプトを起動し、

sh

と打つと、mingwに入れる(>という表示から$という表示に変わるはずである)。

./configure

と打つ。
もしMS Visual C++を持っているのなら、

./configure --toolchain=msvc

とするとMS Visual C++を使ってくれる。
もしインテルコンパイラを持っているのなら、

./configure --toolchain=icl

とするとインテルコンパイラを使ってくれる。

makeする前に、リンカーがVC++のものを指しているかどうか確かめる。

$ which link
/c/Program Files (x86)/Microsoft Visual Studio 12.0/VC/bin/amd64/link.exe

もしこのとき、/bin/link.exeや/usr/bin/link.exeを指していたら、C:\MinGW\msys\1.0\bin\link.exeの名前を変えるか、パスの通っていない別の場所に移動しておく。なお、MinGWにおける、/usrに対応するWindowsフォルダはC:\MinGW\msys\1.0である。

次に、

$make

で、コンパイル作業が始まる。それなりに時間がかかる。
なお、並列コンパイルオプション -jをつけてmake -jとすると、うまくいかない場合があるようである。
完了すると、同じフォルダにffmpeg.exe他ができているはずである。

fdk-aacを有効にしてコンパイルする

ここから本題。fdk-aacは再配布できないライセンスなので、本家のホームページからたどっていける、Windowsバイナリには含まれていない。

まず、ここから、ソースコード(例:fdk-aac-0.1.4.tar.gz)をダウンロードする。
そのファイルを解凍し、そのフォルダ(例:fdk-aac-0.1.4)からコマンドプロンプトを起動する。

sh
と打って

$autoreconf -fiv (不要?)
$./configure --prefix=/usr/local/hogehoge --disable-shared
$make
$make install

すると、C:\MinGW\msys\1.0\local\hogehoge以下のincludeとlibにコンパイルに必要なファイルがそろっているはずである。

次に、解凍したffmpegのソースファイルのフォルダでから、コマンドプロンプトを起動し、

sh

と打つ。そして、

./configure --extra-cflags="-I/usr/local/hogehoge/include" --extra-ldflags="-L/usr/local/hogehoge/lib"
--enable-libfdk-aac --enable-gpl --enable-nonfree

(--toolchain=msvcの方でやってみたが、エラーが出てうまくいかなかったのでmingwオンリーでコンパイル)

この後、

$make

と打てば、しばらくの後、同じフォルダ内に、ffmpeg他ができているはずである。

その他も、入れてコンパイルする

上記のコンパイルでは、fdk-aacを有効にすることのみに的を絞った。ただし上記のオプションではfdk-aacは使えるものの、他のオプション例えばx264でさえ使えない。
acc
に加えて、
x264
webm
mp3
opus
も有効な状態でコンパイルしてみる。

mp3をコンパイル

ここから最新のソースコード(例:lame-3.99.5.tar.gz)をダウンロードする。

解凍したフォルダ(例:lame-3.99.5)からコマンドプロンプトを起動して

>sh
$./configure --prefix=/usr/local/hogehoge --enable-nasm --disable-shared
$make
$make install

libx264をコンパイル

ここから最新のソースコードをダウンロードする。

解凍したフォルダからコマンドプロンプトを起動して

>sh
$./configure --prefix=/usr/local/hogehoge --enable-static
$make
$make install

webm(VP8/VP9)をコンパイル

ここから最新のソースコード(例:libvpx-v1.3.0.tar.bz2)をダウンロードする。

解凍したフォルダ(例:libvpx-v1.3.0)からコマンドプロンプトを起動して

>sh
$./configure --prefix=/usr/local/hogehoge --disable-examples

このままでコンパイルするとエラーが出て進まないので、

configureの結果できた同じフォルダにあるlibs-x86-win32-gcc.mkファイル内の

HAVE_GNU_STRIP=yes

行を探し

HAVE_GNU_STRIP=no

に変える
そして、

$make

ここで最後にエラーが出るが、そのまま

$make install

と打てばOK。

opusをコンパイル

ここから最新のソースコード(例:opus-1.1.tar.gz)をダウンロードする。

コンパイルには、MinGWのgccを使う。MSYSのgccが入っていると、エラーでコンパイルできない。コンパイルエラーが起きたときは、mingw-get.exeを起動して、msys-gccにチェックが入っていないことを確かめる。

解凍したフォルダからコマンドプロンプトを起動して

>sh
$./configure --prefix=/usr/local/hogehoge --disable-shared
$make
$make install

このままだと、ffmpegで./configure --enable-libopusと打ったときに

ここからpkg-configをダウンロードし、pkg-config.exeをC:\MinGW\binに入れておく。
そして、
環境変数PKG_CONFIG_PATHを
export PKG_CONFIG_PATH=/usr/local/hogehoge/lib/pkgconfig
をと打って設定

ffmpegのコンパイル

次に、解凍したffmpegのソースファイルのフォルダでから、コマンドプロンプトを起動し、

sh

と打つ。そして、

もしここで、opusを組み込むのであれば

環境変数PKG_CONFIG_PATHを

$export PKG_CONFIG_PATH=/usr/local/hogehoge/lib/pkgconfig

をと打って設定するのを忘れずに。

$./configure --extra-cflags="-I/usr/local/hogehoge/include" --extra-ldflags="-L/usr/local/hogehoge/lib"
--enable-libfdk-aac --enable-gpl --enable-nonfree --disable-shared --enable-static
--enable-libx264 --enable-libmp3lame --enable-libvpx --enable-libopus

この後、

$make

と打てば、しばらくの後、同じフォルダ内に、ffmpeg他ができているはずである。

コマンドプロンプトで下記のように出れば成功である。

>ffmpeg
ffmpeg version 2.4 Copyright (c) 2000-2014 the FFmpeg developers
  built on Sep 15 2014 15:22:51 with gcc 4.8.1 (GCC)
  configuration: --extra-cflags=-I/usr/local/hogehoge/include --extra-ldflags=-L
/usr/local/hogehoge/lib --enable-libfdk-aac --enable-gpl --enable-nonfree --disa
ble-shared --enable-static --enable-libx264 --enable-libmp3lame --enable-libvpx
--enable-libopus
  libavutil      54.  7.100 / 54.  7.100
  libavcodec     56.  1.100 / 56.  1.100
  libavformat    56.  4.101 / 56.  4.101
  libavdevice    56.  0.100 / 56.  0.100
  libavfilter     5.  1.100 /  5.  1.100
  libswscale      3.  0.100 /  3.  0.100
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  0.100 / 53.  0.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfi
le}...

Use -h to get full help or, even better, run 'man ffmpeg'

最終更新日


本文中のFC4はFedora ProjectのFedora Core 4を、FC5はFedora Core 5を、FC6はFedora Core 6をopenSUSEはNovellのSUSE Linux OSSを表します。Fedora7以降は、単にFedora7、Fedora8、Fedora9、Fedora10、Fedora11、Fedora12、Fedora13、Fedora14、Fedora15と表示しています。Ubuntuは、必要に応じて13.04、14.04のようにバージョン番号をつけて区別しています。MandrivaはMandriva Linuxを表します。

ここに登場するドメイン名やIPアドレスなどはフィクションです。実在の人物・団体等とは一切関係がありません。
実際に使用する際は、各自の環境に合わせて書き換えてください。
もし何か間違いなどありましたらこちらからご連絡ください
リンクに許可は不要です。
Copyright (C) 2014 Chikuma Engineering Co., Ltd. All Rights Reserved.

最終更新日


本文中のFC4はFedora ProjectのFedora Core 4を、FC5はFedora Core 5を、FC6はFedora Core 6をopenSUSEはNovellのSUSE Linux OSSを表します。Fedora7以降は、単にFedora7、Fedora8、Fedora9、Fedora10、Fedora11、Fedora12、Fedora13、Fedora14、Fedora15と表示しています。Ubuntuは、必要に応じて13.04、14.04のようにバージョン番号をつけて区別しています。MandrivaはMandriva Linuxを表します。

ここに登場するドメイン名やIPアドレスなどはフィクションです。実在の人物・団体等とは一切関係がありません。
実際に使用する際は、各自の環境に合わせて書き換えてください。
もし何か間違いなどありましたらこちらからご連絡ください
リンクに許可は不要です。
Copyright (C) 2014 Chikuma Engineering Co., Ltd. All Rights Reserved.