gakkieのBlog

3G携帯の動画を扱うためのffmpegのビルド方法@ubuntu

このエントリーを含むはてなブックマークはてなブックマーク - 3G携帯の動画を扱うためのffmpegのビルド方法@ubuntu この記事をクリップ!Livedoorクリップ - 3G携帯の動画を扱うためのffmpegのビルド方法@ubuntu Yahoo!ブックマークに登録 BuzzurlにブックマークBuzzurlにブックマーク @niftyクリップに追加 このエントリをつぶやくこのWebページのtweets Share on Tumblr FC2ブックマークへ追加 newsing it! この記事をChoix! Googleブックマークに追加 Bookmark this on Delicious Digg This FriendFeedで共有

友人のカツマくんが3G携帯用動画をゴニョゴニョしたいらしく、
ffmpegを自分でビルドしていました

というわけで真似してみました。

なんで自分でビルドするかというと、aptitudeとかでインストールすると、必要なオプションが追加されてなかったから。
あとは、真似するのは、なんとなくってことで。
ビルド時のオプションとかが選べないって言うのは、gentooなら・・・ってちょっと思いましたが、HDDが灼けるのでもう戻りません。

というわけで具体的な内容は以下。

目的

ffmpegをubuntu Linuxで動かしてみること。
[code]
$ uname -a
Linux ubuntu 2.6.20-16-generic #2 SMP Thu Jun 7 20:19:32 UTC 2007 i686 GNU/Linux
[/code]

必要コマンド、ツールのインストール

必要なパッケージとかをインストールします。
aptitudeでいれます。
[code]
$ sudo aptitude install sysutils
$ sudo aptitude install automake
$ sudo aptitude install libtool
$ sudo aptitude install g\+\+
[/code]
これらは順番に、改行コードの変換(dos2unix)に利用、faacのbootstrapスクリプトに必要、faacのbootstrapスクリプトに必要、faacのビルドに必要です。
ちなみに、それぞれカツマくんのFedoraではdos2unix、automake*、libtool*、gcc-c++をインストールしてます。

faacのインストール

faacはAACでエンコードを行うときに必要なライブラリです。

[code]
$ mkdir faac
$ cd faac
$ wget http://nchc.dl.sourceforge.net/sourceforge/faac/faac-1.25.tar.gz
$ tar xzf faac-1.25.tar.gz
$ cd faac
$ ./bootstrap
[/code]
ここで変なwarningが出ました。
automakeのwarningらしいのですが、automakeをよく知らないので、warningが恐い。
というわけで修正。
[code]
$ diff configure.in configure.in.ORG
10c10
< AC_DEFUN([MY_DEFINE], [ AC_DEFINE($1, 1, [define if needed]) ]) --- > AC_DEFUN(MY_DEFINE, [ AC_DEFINE($1, 1, [define if needed]) ])
[/code]
これで、エラーが消えるので続き。
[code]
$ ./bootstrap
$ ./configure
$ make
$ sudo make install
$ sudo /sbin/ldconfig
[/code]

これで、faacのビルドが完了です。

faadのインストール

faadはAACでデコードを行うときに必要なライブラリです。

流れはfaacといっしょです。configure.inの修正も同じです。
[code]
$ mkdir faad
$ cd faad
$ wget http://darusuna.sakura.ne.jp/src/faad2-15092004.tar.gz
$ tar xzf faad2-15092004.tar.gz
$ chmod u+x bootstrap
$ vi configure.in
$ diff configure.in configure.in.ORG
65c65
< AC_DEFUN([MY_CHECK_TYPEDEF_FROM_INCLUDE], --- > AC_DEFUN(MY_CHECK_TYPEDEF_FROM_INCLUDE,
$ ./bootstrap
$ ./configure
$ make
[/code]
ここでエラーが出ます。
[code]
mp4ff.c:104: error: static declaration of ‘mp4ff_track_add’ follows non-static declaration
mp4ffint.h:348: error: previous declaration of ‘mp4ff_track_add’ was here
[/code]
Cのコードを修正します。
[code]
$ diff ./common/mp4ff/mp4ff.c ./common/mp4ff/mp4ff.c.ORG
< void mp4ff_track_add(mp4ff_t *f) --- > static void mp4ff_track_add(mp4ff_t *f)
[/code]
staticがダメっていわれてるので、取るだけ。
続きます。
[code]
$ make
$ sudo make install
$ sudo /sbin/ldconfig
[/code]

amrnbとamrwbのインストール

この項目はカツマくんのBlogと全く同じで問題がありませんでした。
割愛します。

ffmpegのビルド

ここはaptitudeでインストールされるffmpegとビルドのオプションをできるだけあわせてみました。
本当は、aptitudeのffmpegビルド時のオプションを全部追加したかったのですが、ライブラリを集めなきゃだめっぽいのと、ffmpegのバージョン違いで結構面倒なことになりそうな予感がしたので、足してみてエラーがでないものだけくっつけてみました。
[code]
$ wget http://ffmpeg.mplayerhq.hu/ffmpeg-checkout-snapshot.tar.bz2
$ tar xjf ffmpeg-checkout-snapshot.tar.bz2
$ cd ffmpeg-checkout-2007-09-06
$ ./configure –enable-gpl –enable-libfaac –enable-libfaad –enable-libamr-wb –enable-libamr-nb –enable-pp –enable-pthreads –disable-debug –enable-shared
$ make
$ sudo make install
[/code]
configure時につけたオプションの意味は以下。
[code] –enable-gpl allow use of GPL code, the resulting libav*
and ffmpeg will be under GPL [default=no]
–enable-libfaac enable FAAC support via libfaac [default=no]
–enable-libfaad enable FAAD support via libfaad [default=no]
–enable-libamr-nb enable libamr-nb floating point audio codec
–enable-libamr-wb enable libamr-wb floating point audio codec

–enable-pp enable GPLed postprocessing support [default=no]
–enable-pthreads use pthreads [default=no]
–enable-libvorbis enable Vorbis en/decoding via libvorbis,
native implementations exist [default=no]
–enable-liba52 enable GPLed liba52 support [default=no]
–enable-libgsm enable GSM support via libgsm [default=no]
–enable-libdc1394 enable IIDC-1394 grabbing using libdc1394
and libraw1394 [default=no]
–disable-debug disable debugging symbols
–enable-shared build shared libraries [default=no]
[/code]

ldconfig

カツマくんの記事ではLD_LIBRARY_PATHの設定と書きつつ、ldconfigしていますが、ldconfigすればLD_LIBRARY_PATHの設定は不要だと思ってしまいました。よくわからないので教えてください。
[code]
$ cd /etc/ld.so.conf.d
$ sudo vim ffmpeg.conf
$ cat ffmpeg.conf
/usr/local/lib
$ sudo /sbin/ldconfig
[/code]

まとめ

以上より、ubuntu Linuxでも、独自ビルドしたffmpegが実行できるようになりました。
[code]
$ ffmpeg -formats | grep aac
FFmpeg version SVN-r10420, Copyright (c) 2000-2007 Fabrice Bellard, et al.
configuration: –enable-gpl –enable-libfaac –enable-libfaad –enable-libamr-wb –enable-libamr-nb –enable-pp –enable-pthreads –disable-debug –enable-shared
libavutil version: 49.5.0
libavcodec version: 51.43.0
libavformat version: 51.12.2
built on Sep 6 2007 22:18:50, gcc: 4.1.2 (Ubuntu 4.1.2-0ubuntu4)
D aac ADTS AAC
EA libfaac
D A mpeg4aac
[/code]

会社でCを触っているからか、そんなに迷わず出来た気がします。
一番大変だったのは、家のPCを触っていると首が痛くなることでした。もうちょっと良い環境にしないと。。。

せっかく作ったので、ffmpegを使って何かやってみます。




7 Comments to “3G携帯の動画を扱うためのffmpegのビルド方法@ubuntu”

Add Comments (+)

  1. kazuto より:

    はじめまして。
    faacのインストールに関してですが
    warningの修正で以下のようになりました。
    解決策があれば教えていただけますか?
    UbuntuというかLinuxは初心者ですので他に必要な情報があれば、仰っていただければ書きます。
    kazuto@kazuto-laptop:~/faac/faac$ diff configure.in configure.in.ORG
    diff: configure.in.ORG: No such file or directory
    kazuto@kazuto-laptop:~/faac/faac$ #
    kazuto@kazuto-laptop:~/faac/faac$ diff configure.in configure.in.ORG
    diff: configure.in.ORG: No such file or directory
    kazuto@kazuto-laptop:~/faac/faac$ #
    kazuto@kazuto-laptop:~/faac/faac$ 10c10
    bash: 10c10: command not found
    kazuto@kazuto-laptop:~/faac/faac$ #
    kazuto@kazuto-laptop:~/faac/faac$ AC_DEFUN(MY_DEFINE, [ AC_DEFINE($1, 1, [define if needed]) ])
    bash: syntax error near unexpected token `(‘
    kazuto@kazuto-laptop:~/faac/faac$ ./bootstrap
    bash: ./bootstrap: /bin/sh^M: bad interpreter: No such file or directory

  2. gakkie より:

    >kazutoさん
    すいません。自分のBlogを放置してました。
    diff
    っていうのは、テキストファイルの差分を見るコマンドなので、
    そのまま打っても変更されないんです。

    すきなエディタ(vimとかemacsとかgeditとか)で、
    修正しなくちゃだめなのです。

  3. kazuto より:

    自分も放置しちゃってました。
    なるほどと思い、viエディタでやってみましたが、エラーが出ます。どこか間違っているのでしょうか?
    kazuto@kazuto-laptop:~/faac/faac$ diff configure.in configure.in.ORG
    10c10
    AC_DEFUN(MY_DEFINE, [ AC_DEFINE($1, 1, [define if needed]) ])
    kazuto@kazuto-laptop:~/faac/faac$ ./bootstrap
    bash: ./bootstrap: /bin/sh^M: bad interpreter: No such file or directory

  4. kazuto より:

    連続投稿すいません。うまく表示されていませんね
    kazuto@kazuto-laptop:~/faac/faac$ diff configure.in configure.in.ORG
    10c10
    < AC_DEFUN([MY_DEFINE], [ AC_DEFINE($1, 1, [define if needed]) ])

    > AC_DEFUN(MY_DEFINE, [ AC_DEFINE($1, 1, [define if needed]) ])
    kazuto@kazuto-laptop:~/faac/faac$ ./bootstrap
    bash: ./bootstrap: /bin/sh^M: bad interpreter: No such file or directory

  5. gakkie より:

    >kazutoさん
    なんか改行コードがおかしくなってそうですね。
    ^Mってやつ。
    bootstrapのその部分が問題かもしれませんね。

  6. kazuto より:

    その改行コードというのはどう正せばいいのでしょうか?

  7. gakkie より:

    >kazutoさん
    んー、ちょっとぐぐらないとわからないんですね。
    linuxとwindowsで改行コードが違うんですよー。

Leave a Reply