blog.gakkie.com
ガッキーのブログ!

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

9月 12th, 2007 by gakkie

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

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

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

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

目的

ffmpegをubuntu Linuxで動かしてみること。

CODE:
  1. $ uname -a
  2. Linux ubuntu 2.6.20-16-generic #2 SMP Thu Jun 7 20:19:32 UTC 2007 i686 GNU/Linux

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

必要なパッケージとかをインストールします。
aptitudeでいれます。

CODE:
  1. $ sudo aptitude install sysutils
  2. $ sudo aptitude install automake
  3. $ sudo aptitude install libtool
  4. $ sudo aptitude install g\+\+

これらは順番に、改行コードの変換(dos2unix)に利用、faacのbootstrapスクリプトに必要、faacのbootstrapスクリプトに必要、faacのビルドに必要です。
ちなみに、それぞれカツマくんのFedoraではdos2unix、automake*、libtool*、gcc-c++をインストールしてます。

faacのインストール

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

CODE:
  1. $ mkdir faac
  2. $ cd faac
  3. $ wget http://nchc.dl.sourceforge.net/sourceforge/faac/faac-1.25.tar.gz
  4. $ tar xzf faac-1.25.tar.gz
  5. $ cd faac
  6. $ ./bootstrap

ここで変なwarningが出ました。
automakeのwarningらしいのですが、automakeをよく知らないので、warningが恐い。
というわけで修正。

CODE:
  1. $ diff configure.in configure.in.ORG
  2. 10c10
  3. <AC_DEFUN([MY_DEFINE], [ AC_DEFINE($1, 1, [define if needed]) ])
  4. ---
  5. > AC_DEFUN(MY_DEFINE, [ AC_DEFINE($1, 1, [define if needed]) ])

これで、エラーが消えるので続き。

CODE:
  1. $ ./bootstrap
  2. $ ./configure
  3. $ make
  4. $ sudo make install
  5. $ sudo /sbin/ldconfig

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

faadのインストール

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

流れはfaacといっしょです。configure.inの修正も同じです。

CODE:
  1. $ mkdir faad
  2. $ cd faad
  3. $ wget http://darusuna.sakura.ne.jp/src/faad2-15092004.tar.gz
  4. $ tar xzf faad2-15092004.tar.gz
  5. $ chmod u+x bootstrap
  6. $ vi configure.in
  7. $ diff configure.in configure.in.ORG
  8. 65c65
  9. <AC_DEFUN([MY_CHECK_TYPEDEF_FROM_INCLUDE],
  10. ---
  11. > AC_DEFUN(MY_CHECK_TYPEDEF_FROM_INCLUDE,
  12. $ ./bootstrap
  13. $ ./configure
  14. $ make

ここでエラーが出ます。

CODE:
  1. mp4ff.c:104: error: static declaration of ‘mp4ff_track_add’ follows non-static declaration
  2. mp4ffint.h:348: error: previous declaration of ‘mp4ff_track_add’ was here

Cのコードを修正します。

CODE:
  1. $ diff ./common/mp4ff/mp4ff.c ./common/mp4ff/mp4ff.c.ORG
  2. <void mp4ff_track_add(mp4ff_t *f)
  3. ---
  4. > static void mp4ff_track_add(mp4ff_t *f)

staticがダメっていわれてるので、取るだけ。
続きます。

CODE:
  1. $ make
  2. $ sudo make install
  3. $ sudo /sbin/ldconfig

amrnbとamrwbのインストール

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

ffmpegのビルド

ここはaptitudeでインストールされるffmpegとビルドのオプションをできるだけあわせてみました。
本当は、aptitudeのffmpegビルド時のオプションを全部追加したかったのですが、ライブラリを集めなきゃだめっぽいのと、ffmpegのバージョン違いで結構面倒なことになりそうな予感がしたので、足してみてエラーがでないものだけくっつけてみました。

CODE:
  1. $ wget http://ffmpeg.mplayerhq.hu/ffmpeg-checkout-snapshot.tar.bz2
  2. $ tar xjf ffmpeg-checkout-snapshot.tar.bz2
  3. $ cd ffmpeg-checkout-2007-09-06
  4. $ ./configure --enable-gpl --enable-libfaac --enable-libfaad --enable-libamr-wb --enable-libamr-nb --enable-pp --enable-pthreads --disable-debug --enable-shared
  5. $ make
  6. $ sudo make install

configure時につけたオプションの意味は以下。

CODE:
  1. --enable-gpl             allow use of GPL code, the resulting libav*
  2. and ffmpeg will be under GPL [default=no]
  3. --enable-libfaac         enable FAAC support via libfaac [default=no]
  4. --enable-libfaad         enable FAAD support via libfaad [default=no]
  5. --enable-libamr-nb       enable libamr-nb floating point audio codec
  6. --enable-libamr-wb       enable libamr-wb floating point audio codec
  7.  
  8. --enable-pp              enable GPLed postprocessing support [default=no]
  9. --enable-pthreads        use pthreads [default=no]
  10. --enable-libvorbis       enable Vorbis en/decoding via libvorbis,
  11. native implementations exist [default=no]
  12. --enable-liba52          enable GPLed liba52 support [default=no]
  13. --enable-libgsm          enable GSM support via libgsm [default=no]
  14. --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394
  15. and libraw1394 [default=no]
  16. --disable-debug          disable debugging symbols
  17. --enable-shared          build shared libraries [default=no]

ldconfig

カツマくんの記事ではLD_LIBRARY_PATHの設定と書きつつ、ldconfigしていますが、ldconfigすればLD_LIBRARY_PATHの設定は不要だと思ってしまいました。よくわからないので教えてください。

CODE:
  1. $ cd /etc/ld.so.conf.d
  2. $ sudo vim ffmpeg.conf
  3. $ cat ffmpeg.conf
  4. /usr/local/lib
  5. $ sudo /sbin/ldconfig

まとめ

以上より、ubuntu Linuxでも、独自ビルドしたffmpegが実行できるようになりました。

CODE:
  1. $ ffmpeg -formats | grep aac
  2. FFmpeg version SVN-r10420, Copyright (c) 2000-2007 Fabrice Bellard, et al.
  3. configuration: --enable-gpl --enable-libfaac --enable-libfaad --enable-libamr-wb --enable-libamr-nb --enable-pp --enable-pthreads --disable-debug --enable-shared
  4. libavutil version: 49.5.0
  5. libavcodec version: 51.43.0
  6. libavformat version: 51.12.2
  7. built on Sep  6 2007 22:18:50, gcc: 4.1.2 (Ubuntu 4.1.2-0ubuntu4)
  8. D  aac             ADTS AAC
  9. EA    libfaac
  10. D A    mpeg4aac

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

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

Posted in linux, プログラミング

7 Responses

  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 Comment

Please note: Comment moderation is enabled and may delay your comment. There is no need to resubmit your comment.