備忘録か日記のようなもの

システム設定や日々感じたことを忘れないように

人気BLOGランキング
<< MinGWのインストール | main | ubicast Bloggerでらくらく投稿 >>

ffmpegのコンパイル

 ffmpegは各種ビデオファイルのフォーマット変換するフリーソフトです。

 今回はffmpegをWindows上でソースファイルからビルドしてみました。
 
ffmpegをWindowsでビルドするにはコンパイラにMinGWが必要です。MinGWのインストールは前回の記事を参考にしてください。

必要なライブラリのインストール
 今回はXvidとmp3コーデックなどを追加することにします。

最初にmp3のコーデックlameをインストールします。
LAME - Source Code Download Pageからソースコードをダウンロードします。
MinGWのシェルmsys上でコンパイル・インストールします。
$ tar zxf lame-3.96.1.tar.gz
$ cd lame-3.96.1


libmp3lame/mpglib_interface.cファイルを書き換えます。
$ vi libmp3lame/mpglib_interface.c


変更内容は次のとおりです。
13行目を変更

#include "interface.h"
  ↓
#include "../mpglib/interface.h"

最後にconfigure;makeです。
$ ./configure
$ make
$ make install



続いてXvidをインストールします。
Xvidのダウンロードのページからソースファイルをダウンロードします。
先ほどと同じようにmsys上でコンパイル・インストールします。
$ tar zxf xvidcore-1.1.0-beta2.tar.gz
$ cd xvidcore-1.1.0-beta2/build/generic/
$ ./configure
$ make
$ make install


続いてAACをデコードする機能を持つfaad2をインストールします。
ダウンロードのページからソースファイルをダウンロードしmsys上でコンパイル・インストールします。
$ mkdir faad2
$ cd faad2
$ tar zxf ../faad2-15092004.tar.gz


libfaad/common.hファイルを書き換えます。
$ vi libfaad/common.h


変更内容は次のとおりです。
308行目近辺の関数lrintfをコメントアウト

#elif (defined(__i386__) && defined(__GNUC__))
#define HAS_LRINTF
// from http://www.stereopsis.com/FPU.html
/* static INLINE int lrintf(float f)
{
int i;
__asm__ __volatile__ (
"flds %1 \n\t"
"fistpl %0 \n\t"
: "=m" (i)
: "m" (f));
return i;
} */

#endif


common/mp4ff/mp4ff_int_types.hファイルを書き換えます。
$ vi common/mp4ff/mp4ff_int_types.h


そっくり書き換えます。
#ifndef _MP4FF_INT_TYPES_H_
#define _MP4FF_INT_TYPES_H_

#include <stdint.h>

#endif


後はコンパイル・インストールします。
$ ./bootstrap 
$ ./configure
$ make
$ make install



続いてAACをインストールします。
ダウンロードのページからソースファイルをダウンロードしmsys上でコンパイル・インストールします。
$ tar zxf faac-1.24.tar.gz 
$ cd faac
$ ./bootstrap
$ ./configure
$ make
$ make install



Dolby Digital(AC3)用のliba52をインストールします。
ダウンロードのページからソースファイルをダウンロードしmsys上でコンパイル・インストールします。
$ tar zxf a52dec-0.7.4.tar.gz
$ cd a52dec-0.7.4
$ ./configure
$ make
$ make install


H.264/AVC用のライブラリx264をインストールします。
x264をビルドするにはnasmが必要です。
 最初にnasmをインストールします。
ダウンロードのページからソースファイルをダウンロードしmsys上でコンパイル・インストールします。
$ tar zxf nasm-0.98.39.tar.gz 
$ cd nasm-0.98.39
$ ./configure
$ make
$ make install


 続いてx264をビルドします。
ftpサイトからソースファイルをダウンロードしmsys上でコンパイル・インストールします。
$ tar jxf x264-snapshot-20051115-2245.tar.bz2 
$ cd x264-snapshot-20051115-2245
$ ./configure
$ make
$ make install



ffmpegのビルド
 ソースファイルをhttp://www.mplayerhq.hu/MPlayer/cvs/からダウンロードします。
msys上でビルドします。
$ tar jxf FFMpeg-current.tar.bz2
$ cd FFMpeg-20050806


コンパイルできるようにlibavcodec/xvidff.cファイルの一部を書き換えます。
$ vi libavcodec/xvidff.c


書き換える内容は次のとおりです。
346行目近辺

avctx->codec_tag = ff_get_fourcc("xvid");
       ↓
avctx->codec_tag = ff_get_fourcc("XVID");

30行目あたりinclude行の下あたりに次の内容を追加します。

#include <windows.h>

int xvid_ff_2pass(void *ref, int opt, void *p1, void *p2);
void xvid_correct_framerate(AVCodecContext *avctx);

int mkstemp(char* template)
{
char temppath[512];
if(GetTempPath(512,temppath)!=0)
{
if(GetTempFileName(temppath,"fil",0,template)!=0)
{
FILE *pFile;
pFile=fopen(template,"w+");
if(pFile!=NULL)
return (int)pFile;
}
}
return -1;
}

libavcodec/dsputil.hファイルも書き換えます。
$ vi libavcodec/dsputil.h


書き換える場所は次のとおりです。
654行目近辺

static always_inline long int lrintf(float x)

static inline long int lrintf(float x)

configureスクリプトを実行します。
$ ./configure --enable-mingw32 --enable-memalign-hack --enable-mp3lame --enable-faac --enable-faad --enable-a52 --enable-xvid --enable-x264 --enable-gpl --extra-cflags=-I/local/include --extra-ldflags=-L/local/lib

スタティックでリンクできるように設定します。
$ cp /local/lib/xvidcore.a /local/lib/libxvidcore.a


Makefileも書き換えます。
$ vi Makefile


書き換える場所は次のとおりです。
10行目

LDFLAGS+= -g
   ↓
LDFLAGS+= -g -static

あとはmakeします。
$ make


make install するとC:\Program Filesにインストールしようとするので、必要な場所にffmpeg.exeをコピーします。

以上で終了です。

こんな形で変換できます。
$ ffmpeg -y -i test.mpg -bitexact -strict 3 -me phods -vcodec mpeg4 -vtag MP4S -s 176x144 -r 14.985 -b 190 -acodec g726 -ac 1 -ar 8000 -ab 32 -f asf test.asf

$ ffmpeg -i test.mpg -b 256 -ac 2 -f avi -vcodec xvid -acodec mp3 -ab 64 test.avi


オプションについてはこのページに詳しく書かれています。

参考サイト


自分でビルドするのが面倒な人は


関連Blog (Blogランキング)
Windows | comments (1) | trackback (0)

Comments

通りすがり | 2005/11/18 07:39 PM
こちらのページを参考にffmpegのコンパイルにチャレンジしました。(昔のページのほう)
携帯動画変換君に付属のffmpegで速度が出ない件は、cygwinのオーバーヘッドではないようです。コーデックにmsmpeg4v2とかを利用した場合は速度が普通に出ています。xvidのときだけ、なぜか3分の1ぐらいに遅くなります。

Comment Form

Trackbacks