3G携帯の動画を扱うためのffmpegのビルド方法@ubuntu
友人のカツマくんが3G携帯用動画をゴニョゴニョしたいらしく、
ffmpegを自分でビルドしていました。
というわけで真似してみました。
なんで自分でビルドするかというと、aptitudeとかでインストールすると、必要なオプションが追加されてなかったから。
あとは、真似するのは、なんとなくってことで。
ビルド時のオプションとかが選べないって言うのは、gentooなら・・・ってちょっと思いましたが、HDDが灼けるのでもう戻りません。
というわけで具体的な内容は以下。
目的
ffmpegをubuntu Linuxで動かしてみること。
-
$ uname -a
-
Linux ubuntu 2.6.20-16-generic #2 SMP Thu Jun 7 20:19:32 UTC 2007 i686 GNU/Linux
必要コマンド、ツールのインストール
必要なパッケージとかをインストールします。
aptitudeでいれます。
-
$ sudo aptitude install sysutils
-
$ sudo aptitude install automake
-
$ sudo aptitude install libtool
-
$ sudo aptitude install g\+\+
これらは順番に、改行コードの変換(dos2unix)に利用、faacのbootstrapスクリプトに必要、faacのbootstrapスクリプトに必要、faacのビルドに必要です。
ちなみに、それぞれカツマくんのFedoraではdos2unix、automake*、libtool*、gcc-c++をインストールしてます。
faacのインストール
faacはAACでエンコードを行うときに必要なライブラリです。
-
$ 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
ここで変なwarningが出ました。
automakeのwarningらしいのですが、automakeをよく知らないので、warningが恐い。
というわけで修正。
-
$ 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]) ])
これで、エラーが消えるので続き。
-
$ ./bootstrap
-
$ ./configure
-
$ make
-
$ sudo make install
-
$ sudo /sbin/ldconfig
これで、faacのビルドが完了です。
faadのインストール
faadはAACでデコードを行うときに必要なライブラリです。
流れはfaacといっしょです。configure.inの修正も同じです。
-
$ 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
ここでエラーが出ます。
-
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
Cのコードを修正します。
-
$ 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)
staticがダメっていわれてるので、取るだけ。
続きます。
-
$ make
-
$ sudo make install
-
$ sudo /sbin/ldconfig
amrnbとamrwbのインストール
この項目はカツマくんのBlogと全く同じで問題がありませんでした。
割愛します。
ffmpegのビルド
ここはaptitudeでインストールされるffmpegとビルドのオプションをできるだけあわせてみました。
本当は、aptitudeのffmpegビルド時のオプションを全部追加したかったのですが、ライブラリを集めなきゃだめっぽいのと、ffmpegのバージョン違いで結構面倒なことになりそうな予感がしたので、足してみてエラーがでないものだけくっつけてみました。
-
$ 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
configure時につけたオプションの意味は以下。
-
--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]
ldconfig
カツマくんの記事ではLD_LIBRARY_PATHの設定と書きつつ、ldconfigしていますが、ldconfigすればLD_LIBRARY_PATHの設定は不要だと思ってしまいました。よくわからないので教えてください。
-
$ cd /etc/ld.so.conf.d
-
$ sudo vim ffmpeg.conf
-
$ cat ffmpeg.conf
-
/usr/local/lib
-
$ sudo /sbin/ldconfig
まとめ
以上より、ubuntu Linuxでも、独自ビルドしたffmpegが実行できるようになりました。
-
$ 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
会社でCを触っているからか、そんなに迷わず出来た気がします。
一番大変だったのは、家のPCを触っていると首が痛くなることでした。もうちょっと良い環境にしないと。。。
せっかく作ったので、ffmpegを使って何かやってみます。
10月 5th, 2008 at 17:20:33
はじめまして。
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
10月 17th, 2008 at 0:48:13
>kazutoさん
すいません。自分のBlogを放置してました。
diff
っていうのは、テキストファイルの差分を見るコマンドなので、
そのまま打っても変更されないんです。
すきなエディタ(vimとかemacsとかgeditとか)で、
修正しなくちゃだめなのです。
10月 25th, 2008 at 8:25:44
自分も放置しちゃってました。
なるほどと思い、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
10月 25th, 2008 at 8:28:32
連続投稿すいません。うまく表示されていませんね
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
10月 29th, 2008 at 0:06:13
>kazutoさん
なんか改行コードがおかしくなってそうですね。
^Mってやつ。
bootstrapのその部分が問題かもしれませんね。
10月 30th, 2008 at 7:48:19
その改行コードというのはどう正せばいいのでしょうか?
11月 5th, 2008 at 22:42:06
>kazutoさん
んー、ちょっとぐぐらないとわからないんですね。
linuxとwindowsで改行コードが違うんですよー。