もどる

# FFmpeg+SDL2のコンパイルの方法

Last Update: 2017/01/25

FFmpegを、ライブラリSDL2とzlibを使用してVisual Studioでコンパイルする方法。
ffmpeg.exe, ffprobe.exe, ffplay.exeおよび、DLLファイルが生成されます。
TS viewer for Amazon Cloud Driveでは、このうちDLLファイルを利用してFFmpegを使用しています。

1. ## 必要なもの

   - Visual Studio 2015
     ここ からVisual Studio Community 2015を無料ダウンロードできます。

   - FFmpegからソースファイル ffmpeg-3.2.2.tar.bz2

   - MSYSからインストーラ MSYS-1.0.11.exe

   - YASMから実行ファイル yasm-1.3.0-win64.exe

   - SDLからソースファイル SDL2-2.0.5.zip

   - SDL_ttfからソースファイル SDL2_ttf-2.0.14.zip

   - (swf等を再生する場合) zlibからソースファイル zlib128.zip

   - (なくてもかまわない) coreutils-5.97-MSYS-1.0.11-snapshot.tar.bz2の中にある pr.exe

2. ## MSYSの準備

   FFmpegのコンパイルに必要です。

   インストーラMSYS-1.0.11.exe を実行し、インストールします。
   この例では、デフォルトの C:\MSYS\1.0 にインストールしたとします。

3. ## YASMの配置

   FFmpegのコンパイルに必要です。

   yasm-1.3.0-win64.exe をダウンロードし、yasm.exeにリネームして、 C:\MSYS\1.0\bin に配置します。

4. ## SDL2のコンパイル

   TS viewer for Amazon Cloud Driveをコンパイルする際に、ffmoduleために必要です。
   また、FFmpegでffplayをコンパイルする際に、必要です。

   1. SDL2-2.0.5.zip を任意の場所に展開します。
      この例では、D:\ に展開し、D:\SDL2-2.0.5 が得られたとします。

   2. D:\SDL2-2.0.5\VisualC\SDL.sln をVisual Studioで開きます。
      コンフィグレーションをRelease, x64などと設定し、SDL2 をビルドします。

   3. コンパイルされたdll,libと、includeファイルを任意の場所に配置します。
      この例では、D:\SDL2 に配置することとします。

      D:\SDL2 を作成し、D:\SDL2-2.0.5\include をフォルダごとコピーします。
      続いて、D:\SDL2-2.0.5\VisualC\x64\Release より、SDL2.lib を D:\SDL2\lib に
      D:\SDL2-2.0.5\VisualC\SDL\Release より、SDL2.dll をD:\SDL2 にコピーします。

   配置完了したディレクトリ構成

   # D:\SDL2

   - SDL2.dll
   - include\
   - lib\
     - SDL2.lib

   4. sdl2-config を以下の内容で作成し、C:\MSYS\1.0\bin に配置します。

          #! /bin/sh

          SDL_MAJOR_VERSION=2
          SDL_MINOR_VERSION=0
          SDL_MICRO_VERSION=5

          includedir='D:\\\\SDL2\\\\include'
          SDL_CFLAGS=
          libdir='D:\\\\SDL2\\\\lib'
          SDL_RLD_FLAGS=
          SDL_LIBS="-lSDL2"
          SDL_VERSION=$SDL_MAJOR_VERSION.$SDL_MINOR_VERSION.$SDL_MICRO_VERSION

          while test $# -gt 0; do
            case $1 in
              --cflags)
                echo -I${includedir} ${SDL_CFLAGS}
                ;;
              --libs)
                echo /LIBPATH:${libdir} ${SDL_RLD_FLAGS} ${SDL_LIBS}
                ;;
              --version)
                echo ${SDL_VERSION}
                ;;
            esac
            shift
          done

5. ## SDL_ttfのコンパイル

   TS viewer for Amazon Cloud Driveをコンパイルする際に、ffmoduleのために必要です。

   1. SDL2_ttf-2.0.14.zip を任意の場所に展開します。
      この例では、D:\ に展開し、D:\SDL2_ttf-2.0.14 が得られたとします。

   2. D:\SDL2_ttf-2.0.14\VisualC\SDL_ttf.sln をVisual Studioで開きます。
      コンフィグレーションをRelease, x64などと設定します。

   3. SDL2_ttfのプロパティを開き、インクルードパスとライブラリパスを設定します。
      先程構築した、SDL2がコンパイルに必要です。
      先程の例の通りに配置していれば、インクルードパスに D:\SDL2\include
      ライブラリパスに D:\SDL2\lib を設定します。

   4. ビルドを行い、D:\SDL2_ttf-2.0.14\VisualC\x64\Release 以下にできた
      SDL2_ttf.lib を D:\SDL2\lib に、
      SDL2_ttf.dll を D:\SDL2 に配置します。
      さらに、D:\SDL2_ttf-2.0.14\SDL_ttf.h を D:\SDL2\include にコピーします。
      D:\SDL2_ttf-2.0.14\VisualC\x64\Release 以下より依存ファイルの libfreetype-6.dll, zlib1.dll を D:\SDL2 に配置します。

   配置完了したディレクトリ構成

   # D:\SDL2

   - SDL2.dll
   - SDL2_ttf.dll
   - libfreetype-6.dll
   - zlib1.dll
   - include\
   - lib\
     - SDL2.lib
     - SDL2_ttf.lib

6. ## zlibのコンパイル

   FFmpegのコンパイルに必要です。

   1. zlib128.zip を任意の場所に展開します。
      この例では、D:\ に展開し、D:\zlib-1.2.8 が得られたとします。

   2. (64bit)VS2015 x64 Native Tools Command Prompt を開きます。
      (32bit)VS2015 x86 Native Tools Command Prompt を開きます。
      スタートメニューのVisual Studio 2015 の下にあります。

   3. ディレクトリを移動し、コンパイルを行います。

          C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC> d:

          D:\> cd zlib-1.2.8

          (アセンブラコードを使用する場合 64bit)
          D:\zlib-1.2.8> nmake -f win32/Makefile.msc AS=ml64 LOC="-DASMV -DASMINF -I." OBJA="inffasx64.obj gvmat64.obj inffas8664.obj"
          (アセンブラコードを使用する場合 32bit)
          D:\zlib-1.2.8> nmake -f win32\Makefile.msc  LOC="-DASMV -DASMINF -I." OBJA="inffas32.obj match686.obj"
          (アセンブラコードを使用しない場合)
          D:\zlib-1.2.8> nmake -f win32/Makefile.msc

   4. コンパイルされたdll,libと、includeファイルを任意の場所に配置します。
      この例では、D:\zlib に配置することとします。

      D:\zlib を作成し、D:\zlib\include D:\zlib\lib フォルダを作成します。
      続いて、D:\zlib-1.2.8 より、zlib.h と zconf.h を D:\zlib\include に
      zlib.lib と zdll.lib を D:\zlib\lib に
      zlib1.dll をD:\zlib にコピーします。

   配置完了したディレクトリ構成

   # D:\zlib

   - zlib1.dll
   - include\
     - zlib.h
     - zconf.h
   - lib\
     - zlib.lib
     - zdll.lib

7. ## (option) pr.exeの配置

   FFmpegのconfigureでエラーが報告されるので、気になる場合は、 coreutils-5.97-MSYS-1.0.11-snapshot.tar.bz2 をダウンロードし、 展開して、pr.exeを取り出し c:\MSYS\1.0\bin に配置してください。
   なくてもコンパイルは通ります。

8. ## FFmpegのコンパイル

   TS viewer for Amazon Cloud Driveをコンパイルする際に、ffmoduleのために必要です。

   1. ffmpeg-3.2.2.tar.bz2 を任意の場所に展開します。
      この例では、D:\ に展開し、D:\ffmpeg-3.2.2 が得られたとします。
      インストール先はD:\ffmpegとします。

   2. (64bit)VS2015 x64 Native Tools Command Prompt を開きます。
      (32bit)VS2015 x86 Native Tools Command Prompt を開きます。
      スタートメニューのVisual Studio 2015 の下にあります。

   3. 環境設定をし、MSYSのbashのシェルに入ります。

          C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC> d:

          D:\> cd ffmpeg-3.2.2

          D:\ffmpeg-3.2.2> path=c:\msys\1.0\bin;%path%

          D:\ffmpeg-3.2.2> set INCLUDE=%INCLUDE%;d:\zlib\include

          D:\ffmpeg-3.2.2> set LIB=%LIB%;d:\zlib\lib

          D:\ffmpeg-3.2.2> bash
          bash-3.1$

   4. bashシェルで、設定を行います。

          bash-3.1$ ./configure --toolchain=msvc --extra-libs=msvcrt.lib --enable-shared --prefix=/d/ffmpeg

      configureに1-2分かかります。
      --extra-libs=msvcrt.lib はzlibライブラリの検出時のエラーを防ぐものです。
      --enable-shared はdll作成モード、--prefix はインストールしたいディレクトリを指定してください。

   5. zlib ライブラリのインクルードファイルの設定と干渉する部分があるので、修正します。
      D:\ffmpeg-3.2.2\config.h を開き、

          #define HAVE_UNISTD_H 0

      という行を探して、以下のようにコメントアウトします。

          //#define HAVE_UNISTD_H 0

      zlib ライブラリで同じマクロが使用されており、この名前が0ではなく未定義でないとコンパイルが通りません。

   6. bashシェルで、コンパイルとインストールを行います。

          bash-3.1$ make
          bash-3.1$ make install

      makeに10分ほどかかります。
      make installで先程prefixで指定したディレクトリ以下にインストールされます。

   7. D:\ffmpeg\bin\ffmpeg.exe ができていればOKです。
      実行にはSDL2のDLLが必要です。SDL2.dllをD:\SDL2\からD:\ffmpeg\bin\にコピーしてから実行してください。
      実行してみて、コピーライトとモジュールの表示が出ればちゃんとできています。

9. ## TS viewer for Amazon Cloud Driveのコンパイル準備

   TS viewer for Amazon Cloud Driveのコンパイルには、FFmpeg、SDL2、SDL2_ttfの各モジュールが必要です。

   インクルードパスに、例の通りであれば D:\ffmpeg\include, D:\SDL2\include
   ライブラリパスに、D:\ffmpeg\bin, D:\SDL2\lib を追加指定してください。

   TSviewACD.exeでFFmpegを使用してファイルを再生するには次の依存ファイルが必要です。
   実行ファイルと同じパスに準備してください。
   フォントは別の場所を指定できます。

   - ffmodule_conf.dll (起動に必須)
   - ffmodule.dll (動画再生モジュール)
   - avutil-55.dll (FFmpeg)
   - swscale-4.dll (FFmpeg)
   - swresample-2.dll (FFmpeg)
   - avformat-57.dll (FFmpeg)
   - avfilter-6.dll (FFmpeg)
   - avdevice-57.dll (FFmpeg)
   - avcodec-57.dll (FFmpeg)
   - SDL2.dll (SDL2)
   - SDL2_ttf.dll (SDL2_ttf)
   - zlib1.dll (SDL2_ttfとFFmpegの依存ファイル)
   - libfreetype-6.dll (SDL2_ttfの依存ファイル)
   - ipaexg.ttf もしくは、何らかのTrueTypeフォント

もどる