【AAC+】 HE-AAC が使える ffmpeg をつくる方法

このビルドはlibx264とlibaacplusだけを使って配信するためのffmpegです。libspeex、nellymoser、libmp3lame、libvo_aacenc、fdk_aac は使えません。他のコーデックは以下を参照。

ビルドを自動化するスクリプトは以下のコミュニティを参照


注意点


  • 各種アーカイブ、diff ファイルは新しいのを使ってください。
  • HDD,SSDの空き容量は2GB以上確保してください。
  • 最初からビルドし終わるまでに30分程度は見積もってください。
  • 32bitのffmpegを作る方法です。64bitではありません。
  • diffファイルは右クリックから保存してください。 現在は不使用
  • パッチを当てる部分でエラーがでる場合にはdiffファイルのコードが文字化けしていないか確認してください。
  • エラーがでたらエラーがでたアプリケーションのフォルダにある config.log を参照してください。
  • コマンド実行には $ を目安に $ を除いた一行全部をコピペして実行してください。
  • コマンドのコピペには右クリック(環境のよっては使えないかもしれない)かインサートキーを使ってください。
  • libaacplusを組み込んで作ったffmpegは配布できません。
    ffmpegに組み込まれたaacplus の特許について
  • ニコ生で使う場合にビットレートを45kから72kの間で配信しないとTSが残りません。
    運営にこの件を問い合わせたところ保証が出来かねるそうです。


必要なもの



msys.bat のコマンド説明


  • $
    msys.bat を実行して左に表示されるもの、この頭文字の行で一行分のコマンドになる。
    コマンドを実行する場合にはこれを含めてコピペする必要はない。

  • wget url
    ファイルをダウンロード

  • tar xjf アーカイブ名.拡張子
    解凍コマンド

  • cd
    元のディレクトリに移動

  • cd フォルダ名
    ディレクトリ移動

  • cd ..
    一つ上のディレクトリに移動

  • patch -p1 < ***.diff
    ***.diffを使ってパッチを一度当てる

  • make -j
    マルチコアなマシンで高速にビルドする方法 - mir the developer より
    makeの後に -j を指定するとCPUをフル稼働してビルドすることができる。コア数指定も出来て論理コア数+1が -j 単独指定と同じような結果になる。

下準備


  • 上のファイルをダウンロードする
  • HDDかSSDのCドライブ直下に「msys」フォルダを作って PortableGit と MSYS_MinGW-w64_GCC_***_x86-x64_Full.7z を解凍。そしてMSYSフォルダの中身を「msys」フォルダに移動して全て上書きする。
  • 「fstab」を移動させる。

    移動先はこちら
    C:\msys\etc

    Cドライブを使わない場合はメモ帳などで「fstab」のドライブレター(Dに変更する場合 D:\)を変更
  • C:\msys にある msys.bat を実行すると同じディレクトリにhomeフォルダを作られ、
    C:\msys\home\ユーザーID
    にダウンロードしたファイルを移動させる。
    ここでアーカイバで解凍する場合と解凍コマンドで解凍する場合の2種類方法があり、アーカイバで解凍する場合には tar xjf アーカイブ名.拡張子 を省略する。


msys.bat を実行する


  • libaacplusをインストールする
    $ tar xzf libaacplus-2.0.2.tar.gz
    $ cd libaacplus-2.0.2
    $ ./autogen.sh --prefix="/mingw/i686-w64-mingw32" --build="i686-w64-mingw32" --host="i686-w64-mingw32" --disable-shared --enable-static --enable-fast-install
    $ make clean && make && make install-strip
    $ cd


    ここの make clean でエラーがでる場合には
    libaacplus-2.0.2\src\ フォルダの
    Makefile を以下のように書き換える。

    ツールテスト-ニコニコミュニティ で配布しているMakefileReadme.zipより
    ※修正は自己責任でお願いします。

    ・Mekefileの修正
    771~772行を置き換えてください。
    [変更前]
    sed -e 's/SQRT\ *([0-9\ ]*)\ *;//g;' | \
    sed -e 's/TRANS\ *([0-9\ ]*)\ *;//g;' | \

    [変更後]
    sed -e 's/SQRT\ *([0-9\ ]*)\ *;//g;' > $${source#*/}.new; \
    mv $${source#*/}.new $${source#*/}; \
    sed -e 's/TRANS\ *([0-9\ ]*)\ *;//g;' $$source | \


  • x264をインストールする
    nc63453_qcif.y4m を使う場合は
    VIDS="akiyo_qcif.y4m" を VIDS="nc63453_qcif.y4m" に変える
    wget で応答がない場合は以下を手動保存して x264 のフォルダ内に置く
    https://www.dropbox.com/sh/qjxugjyuzk2juwv/yGsk9SDEQZ/nc63453_qcif.y4m
    $ git clone git://git.videolan.org/x264.git x264
    $ cd x264
    $ wget http://media.xiph.org/video/derf/y4m/akiyo_qcif.y4m
    $ ./configure -prefix="/mingw/i686-w64-mingw32"
    $ make fprofiled VIDS="akiyo_qcif.y4m"
    $ make install && make install-lib-static
    $ cd

  • polarsslをインストールする(polarssl-1.2.7)
    $ tar xzf polarssl-1.2.7-gpl.tgz
    $ cd polarssl-1.2.7/library
    $ make CC=gcc
    $ cd ..
    $ cp -r include/polarssl /mingw/i686-w64-mingw32/include/
    $ cp library/libpolarssl.a /mingw/i686-w64-mingw32/lib/
    $ cd


  • rtmpdumpをインストールする
    $ git clone git://git.ffmpeg.org/rtmpdump rtmpdump
    $ cd rtmpdump
    $ make SYS=mingw CRYPTO=POLARSSL CC=gcc AR=ar SHARED=no XLDFLAGS=-s
    $ cd librtmp
    $ make install prefix="/mingw/i686-w64-mingw32" SYS=mingw CRYPTO=POLARSSL SHARED=no PRIVATE_LIBS="-lpolarssl -lws2_32 -lwinmm"
    $ cd


  • 最後にffmpegをビルドするが、このままだと librtmp が無いって怒られるので、ffmpeg フォルダに有る、configure ファイルをメモ帳などで5000行目付近(バージョンによって異なる)の部分を上から下に書き換える。

    5000行目付近「librtmp/rtmp.h」で検索する
    変更前
    enabled librtmp && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket

    変更後
    enabled librtmp && require librtmp librtmp/rtmp.h RTMP_Socket -lrtmp -lpolarssl -lwinmm -lws2_32

    補足
    お気に入りの動画を携帯で見よう より最適化コマンドを引用

    --extra-cflags の部分を使っているPCに合わせて書き換える。
    最適化無し版
    --extra-cflags="-march=i686 -mtune=generic"
    Pentium4最適化版
    --extra-cflags="-mtune=pentium4 -mfpmath=sse -msse" --cpu=pentium4
    Core2最適化版 core i シリーズはこちら
    --extra-cflags="-mtune=core2 -mfpmath=sse -msse" --cpu=i686
    Athlon64最適化版
    --extra-cflags="-mtune=athlon64 -mfpmath=sse -msse" --cpu=i686
    Phenom最適化版
    --extra-cflags="-mtune=amdfam10 -mfpmath=sse -msse" --cpu=i686

    $ make -j
    として最後に -j を指定するとCPUとメモリをフルに使ってビルドできる。-j 3 として論理コア数指定も可能。ここでエラーがでる場合は -j を指定せずに make してみる。

    オプションについては下に追記した。


    補足2
    FFmpegをビルドしよう-ニコニコミュニティ より最適化コマンドを引用

    最適化無し
    --cpu=native --extra-cflags="-s -O3 -mtune=native -march=native -mfpmath=sse -msse2 -ffast-math -fomit-frame-pointer -fexcess-precision=fast -fno-tree-vectorize"

    core2最適
    --cpu=core2 --extra-cflags="-s -O3 -mtune=core2 -march=core2 -mfpmath=sse -msse2 -msse3 -mssse3 -ffast-math -fomit-frame-pointer -fexcess-precision=fast -fno-tree-vectorize"

    coreiシリーズ 第1世代
    --cpu=corei7 --extra-cflags="-s -O3 -mtune=corei7 -march=corei7 -mfpmath=sse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -ffast-math -fomit-frame-pointer -fexcess-precision=fast -fno-tree-vectorize"

    coreiシリーズ 第2世代以降
    --cpu=corei7-avx --extra-cflags="-s -O3 -mtune=corei7-avx -march=corei7-avx -mfpmath=sse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -ffast-math -fomit-frame-pointer -fexcess-precision=fast -fno-tree-vectorize"

    少し前のAMD
    --cpu=amdfam10 --extra-cflags="-s -O3 -mtune=amdfam10 -march=amdfam10 -mfpmath=sse -msse2 -msse3 -msse4a -m3dnow -ffast-math -fomit-frame-pointer -fexcess-precision=fast -fno-tree-vectorize"

    最近のAMD
    --cpu=amdfam10 --extra-cflags="-s -O3 -mtune=bdver1 -march=bdver1 -mfpmath=sse -msse2 -msse3 -msse4a -mssse3 -msse4.1 -msse4.2 -mavx -ffast-math -fomit-frame-pointer -fexcess-precision=fast -fno-tree-vectorize"

    CPUの詳細:
    • Core2 Series
      http://www.hardwaresecrets.com/article/All-Core-2-Models/366
    • corei7(i3,i5) First-generation Core processor
      http://www.hardwaresecrets.com/article/All-Core-i7-Models/708/2
    • corei7(i3,i5) Second(and Third)-generation Core processor
      http://www.hardwaresecrets.com/article/All-Core-i7-Models/708/4
    • AMD Family 10h or K10
      http://www.cpu-world.com/CPUs/K10/index.html
    • AMD Bulldozer Family 15h
      http://www.cpu-world.com/CPUs/Bulldozer/index.html


    $ tar ffmpeg-snapshot.tar.bz2
    $ cd ffmpeg
    $ PKG_CONFIG_PATH="/mingw/i686-w64-mingw32/lib/pkgconfig" ./configure --prefix="/mingw/i686-w64-mingw32" --enable-version3 --enable-gpl --enable-nonfree --enable-avisynth --enable-libaacplus --enable-libx264 --enable-librtmp --disable-ffprobe --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-debug --target-os="mingw32" --arch=x86 --extra-ldflags=-static --extra-cflags="-mtune=core2 -mfpmath=sse -msse" --cpu=i686
    $ make


    ここまでうまくいくと ffmpeg のフォルダ内に ffmpeg.exe と ffmpeg_g.exe が出来上がり、使うのは ffmpeg.exe。


ffmpeg の configure オプションについて


【ffmpeg】 fdk-aac と aacplus を同梱する : comment461 より

GCC最適化オプションは自分の環境(OS:win7,CPU:i7)で微妙ながら一番早かったものを使用。
-O3 -march=i686 -mtune=generic -mfpmath=sse -msse2 ...省略
CPU制限はないけどsse2は必須だお。


私が普段使っている core2 duo のPCでいろいろオプションを変更してビルドしてみた結果、バイナリサイズは多少の誤差があるものの、エンコード速度に目立った変化は見られなかった。以下のオプションは上のオプションから違うところ。

  1. -msse2 -msse3 あり
  2. --optflags="-O3 -ffast-math -fomit-frame-pointer -fexcess-precision=fast -fno-tree-vectorize -fno-strict-aliasing" に変更
  3. デフォルト
  4. -march=i686 -mtune=generic に変更

バイナリサイズ
4 < 1 < 3 <<< 2

configure のオプションは ./configure --help から出力できる。以下のファイルはそれをテキストに出力したもの。
ffmpeg_configure_help.txt

libx264 でエンコードした時にのバージョン表記について


mediainfo で動画を見た時に、スナップショットから保存すると x264 core 129 としか表示されないが、一般的に配布されている ffmpeg を使うと x264 core 129 r2230 1cffe9f と表示され、リビジョンとヘッド番号が後ろについてくる。これをつけるにはスナップショットからではなく、git clone で保存したx264のソースからビルドすると配布しているような ffmpeg になる。

git clone git://git.videolan.org/x264.git x264

このコマンドで x264 のフォルダにソースコードが解凍された状態でダウンロードされこれをビルドする。

とてもお世話になったサイト

FFmpegのコンパイル (2012/07/22) w32threads お気に入りの動画を携帯で見よう
X5-452's Blog libav,ffmpegを更新

追記 2012年7月16日
ビルド環境を刷新。
以前の /mingw/i686-pc-mingw32/mingw/i686-w64-mingw32 に変わっているので注意。さらに sezero_20111101-w32-update-rev.4917.zip が不要になった。
追記 2012年7月18日
ffmpeg-arch_objs-2012****.diff と ffmpeg-2012****.diff から ffmpeg-configure-fix.diff に変更した。
aacplus 以外にも HE-AAC が使えます。ただし aacplus と fdk-aac の同時ビルドは sharedビルド未確認のため非推奨。
【ffmpeg】 fdk-aac をffmpeg に組み込む
sharedビルド成功しました。
【ffmpeg】 fdk-aac と aacplus を同梱する
追記 2012年7月26日
ffmpeg の configure オプションについて
追記 2012年10月25日
タイトルにAAC+を付けて使用ツールのバージョンを見なおした
追記 2012年10月28日
MSYS_MinGW-w64_GCC_472_x86-x64_Full.7z、PortableGit-1.8.0-preview20121022.7z、rtmpdump-2.4-20120726.tgz にバージョンを上げた。
追記 2012年11月23日
polarssl-1.2.1-gpl、rtmpdump-2.4-20121110 にアップし、rtmpdump のパッチが不要に
追記 2012年11月25日
polarssl-1.2.2-gpl に更新
追記 2012年11月29日
libx264 でエンコードした時にのバージョン表記について の欄
追記 2013年5月3日
x264, rtmpdump を git に変更し細部を修正
追記 2013年8月3日
rtmpdump のインストール方法を改めた
追記 2013年8月7日
y4m の代替ファイルをアップした
関連記事

この記事へのコメント

X5-452(Sada_Maru)2012/07/14 (土) 03:51:11

fdk-aac build

git clone git://opencore-amr.git.sourceforge.net/gitroot/opencore-amr/fdk-aac fdk-aac
cd fdk-aac
autoreconf -i
./configure \
--prefix="/mingw/i686-w64-mingw32" \
--build="i686-w64-mingw32" \
--host="i686-w64-mingw32" \
--disable-shared --enable-static --enable-fast-install
make clean && make && make install-strip
これでOK.

ffmpegは--enable-gplと--enable-nonfreeを付ける.
libavは何もいらない.

MSYS_MinGW_GCC_471_x86-x64_Full.7zからMinGW-w64ベースになったので、sezero_20111101-w32-update-rev.4917.zipを入れなくてもよくなりました。
フォルダが、"i686-pc-mingw32" → "i686-w64-mingw32"になったので気を付けよう.

ロベルト2012/07/15 (日) 00:20:23

Sada_Maru さん報告ありがとうございます。

今回もaacplusやfaac同様に配布禁止のようですね。
これでfdk-aac のコンパイル方法が確立して、ニコ生でも成功報告が上がっています。

X5-452(Sada_Maru)2012/07/15 (日) 01:10:14

ffmpeg(libfdk_aac)オプション

Bitrate Mode
avconv -i <input> -acodec libfdk_aac -profile <profiles> -ab <bitrate> -ar <sampling> -ac <channels> -afterburner 1 <output>

Bitrate Modes profile:
aac_low
aac_he
aac_he_v2
aac_ld
aac_eld

VBR Mode
aconv -i <input> -acodec libfdk_aac -flags +qscale -global_quality [1-5] -afterburner 1 <output>

VBR modes 1-5 correspond to roughly:
about 32 kbps/channel
about 40 kbps/channel
about 48-56 kbps/channel
about 64 kbps/channel
about 80-96 kbps/channel

libfdk_aac AVOptions:
-afterburner <int> Afterburner (improved quality)
-eld_sbr <int> Enable SBR for ELD (for SBR in other configurations, use the -profile parameter)
-signaling <int> SBR/PS signaling style
default Choose signaling implicitly (explicit hierarchical by default, implicit if global header is disabled)
implicit Implicit backwards compatible signaling
explicit_sbr Explicit SBR, implicit PS signaling
explicit_hierarchical Explicit hierarchical signaling

avconv派なので上記のffmpegコマンドは適当です(汗)

X5-452(Sada_Maru)2012/07/16 (月) 01:54:46

library & ffmpegのbuildスクリプト
(MSYS_MinGW_GCC_471用)

いらなくても置いておきます(笑)
http://sada5.sakura.ne.jp/452/

ロベルト2012/07/16 (月) 22:56:58

Sada_Maru さんナイスです。

あとでビルド確認します。

管理人のみ通知 :

トラックバック


ニコニコチャンネル始めました
ニコラボチャンネル
スポンサード リンク
THE IDOLM@STER THE@TER ACTIVITIES 03
THE IDOLM@STER THE@TER ACTIVITIES 03

Fate/EXTELLA REGALIA BOX for PlayStation (R) 4 【初回限定特典】ネロ・クラウディウス、アルトリア・ペンドラゴン衣装「純真のナイトドレス」プロダクトコード付+【Amazon.co.jp限定特典】アルテラ衣装「スイートデビル」プロダクトコード配信 - PS4
Fate/EXTELLA REGALIA BOX for PlayStation (R) 4 【初回限定特典】ネロ・クラウディウス、アルトリア・ペンドラゴン衣装「純真のナイトドレス」プロダクトコード付+【Amazon.co.jp限定特典】アルテラ衣装「スイートデビル」プロダクトコード配信 - PS4

妖怪ウォッチ くったりぬいぐるみだニャン ジバニャン
妖怪ウォッチ くったりぬいぐるみだニャン ジバニャン

Fate/EXTELLA VELBER BOX 【初回限定特典】ネロ・クラウディウス、アルトリア・ペンドラゴン衣装「純真のナイトドレス」プロダクトコード付+【Amazon.co.jp限定特典】アルテラ衣装「スイートデビル」プロダクトコード配信 - PS4
Fate/EXTELLA VELBER BOX 【初回限定特典】ネロ・クラウディウス、アルトリア・ペンドラゴン衣装「純真のナイトドレス」プロダクトコード付+【Amazon.co.jp限定特典】アルテラ衣装「スイートデビル」プロダクトコード配信 - PS4

Fate/EXTELLA REGALIA BOX for PlayStation (R) Vita 【初回限定特典】ネロ・クラウディウス、アルトリア・ペンドラゴン衣装「純真のナイトドレス」プロダクトコード付+【Amazon.co.jp限定特典】アルテラ衣装「スイートデビル」プロダクトコード配信 - PS Vita
Fate/EXTELLA REGALIA BOX for PlayStation (R) Vita 【初回限定特典】ネロ・クラウディウス、アルトリア・ペンドラゴン衣装「純真のナイトドレス」プロダクトコード付+【Amazon.co.jp限定特典】アルテラ衣装「スイートデビル」プロダクトコード配信 - PS Vita

【早期購入特典あり】初音ミクシンフォニー~Miku Symphony 2016~オーケストラ ライブ CD(初音ミクシンフォニー描き下ろしクリアファイル付き(ランダム配布))
【早期購入特典あり】初音ミクシンフォニー~Miku Symphony 2016~オーケストラ ライブ CD(初音ミクシンフォニー描き下ろしクリアファイル付き(ランダム配布))

「うたわれるもの 偽りの仮面&二人の白皇」歌集(初回限定盤)
「うたわれるもの 偽りの仮面&二人の白皇」歌集(初回限定盤)

TVアニメ『ラブライブ!サンシャイン!!』挿入歌シングル「想いよひとつになれ/MIRAI TICKET」
TVアニメ『ラブライブ!サンシャイン!!』挿入歌シングル「想いよひとつになれ/MIRAI TICKET」

『刀剣乱舞-花丸-』 歌詠集 其の三 特装盤
『刀剣乱舞-花丸-』 歌詠集 其の三 特装盤

本好きの下剋上~司書になるためには手段を選んでいられません~第一部 「本がないなら作ればいい3」
本好きの下剋上~司書になるためには手段を選んでいられません~第一部 「本がないなら作ればいい3」

新着記事と追記・編集記事
スポンサード リンク
ブログ内検索
プロフィール

Author:ロベルト
お問い合わせはこちらまで
robelt2525[at]gmail.com

中の人 @nico_lab
ブログ更新用 @blo_nico_lab

詳しいプロフィールはこちら

カテゴリ
アクセスの多い記事
記事アーカイブ

最新コメント
リンク
ニコニコ静画
アニメカテゴリ毎時ランキング
免責事項
当ブログはリンクフリーです。記事によりトラブルが生じた場合でも、当ブログ管理人は一切の責任を負いません。 当ブログに記載されている情報の正誤や利用は、ご自身の判断でお願いします。 紹介したアプリケーションに関する問い合わせは作者に問い合わせてください。ニコニコ動画に関する質問はまずは公式掲示板、2ch、各Q&Aサイトを参照ください。
ブログの読者になる(RSS)
アクセス数