友人のカツマくんが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 (+)-
>kazutoさん
すいません。自分のBlogを放置してました。
diff
っていうのは、テキストファイルの差分を見るコマンドなので、
そのまま打っても変更されないんです。すきなエディタ(vimとかemacsとかgeditとか)で、
修正しなくちゃだめなのです。 -
自分も放置しちゃってました。
なるほどと思い、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 -
連続投稿すいません。うまく表示されていませんね
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 -
>kazutoさん
なんか改行コードがおかしくなってそうですね。
^Mってやつ。
bootstrapのその部分が問題かもしれませんね。 -
その改行コードというのはどう正せばいいのでしょうか?
-
>kazutoさん
んー、ちょっとぐぐらないとわからないんですね。
linuxとwindowsで改行コードが違うんですよー。
はじめまして。
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