【ffmpeg】 fdk-aac を ffmpeg に組み込む

FDK-AAC は Fraunhofer社 のオープンソースのコーデック。

【AAC+】HE-AAC が使える ffmpeg をつくる方法 の記事と同様にしていくが、その記事を書いた時(現在はそちらも修正済み)より幾つかアップデートされているファイルがあり、それによって一部コマンドが異なる。

以前の AAC+ との違いは低ビットレートの HE-AAC だけではなくて、高ビットレートの AAC-LC も使えるところ。2021年現在はAAC+はサポート対象外になり使えなくなっている。

注:HE-AAC や AAC-LC はコーデック名で、AAC+ や FDK-AAC はエンコーダー名

ビルド環境


昔の話で2021年現在は未確認。


解凍場所などファイルの配置場所は 【AAC+】HE-AAC が使える ffmpeg をつくる方法 を参照。fdk-aac-0.1.3.tar.gz は以前と同じように msys\home\username のフォルダに入れる。

この方法の注意点は aacplus や vo-aacenc を同梱して make しないこと。これらを同梱すると make のところでエラーが出て ffmpeg が作れない。

shared ビルドで同梱出来ます。
【ffmpeg】 fdk-aac と aacplus を同梱する
【ffmpeg】 fdk-aac をffmpeg に組み込む : comment458 より

インストール と ビルド


  • fdk-aac のインストール
    $ cd fdk-aac-0.1.3
    $ 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


  • ffmpeg に組み込む
    ffmpeg にパッチを当てて使用する外部ライブラリを含める。ただし libaacplus をインストールしている人は --enable-libaacplus を付けずにビルドするか、shared ビルドにして同梱する(未確認)。libaacplus をインストールしていない人は --enable-libaacplus を付けずにビルドする。

    libfdk-aac を ffmpeg にリンクするのに必要なコマンドは以下の通り
    --enable-gpl --enable-nonfree --enable-libfdk-aac

    【ffmpeg】 fdk-aac をffmpeg に組み込む (07/19) : comment459 より

  • ffmpeg の make の時に

    libswresample/x86/Makefile:4: *** missing separator (did you mean TAB instead of 8 spaces?). Stop.


    のエラーがすぐに出た場合は、おそらく当該ファイル(Makefile)のパッチが上手く当たっていないので、同じフォルダ内のパッチ済みのファイルをパッチが当たっていないオリジナルのファイルに差し替える。

    当該ファイルは
    ffmpeg-HEAD-*******\libswresample\x86\Makefile
    ffmpeg-HEAD-*******\libavutil\x86\Makefile


  • 追記 2012年7月18日
    ffmpeg-configure-fix.diff を使うことで make した時の Makefile のエラーを回避できる。
    Sada_Maruさんのコメントが大変参考になりました。
    【AAC+】HE-AAC が使える ffmpeg をつくる方法 : #comment449
    【AAC+】HE-AAC が使える ffmpeg をつくる方法 : #comment452

    fdk-aac の使い方


    ffmpeg -i infile -acodec libfdk_aac -profile:a aac_he -ab 48k -ar 44100 -ac 2 -afterburner 1 out.m4a

    -profile:a で指定できるのが
    • aac_low :AAC-LC 何も指定しないとこれになる
    • aac_he :HE-AAC 44.1kHzでは28kから使える 推奨32k-48k
    • aac_he_v2 :HE-AACv2 44.1kHzでは28k-64kまで使える 推奨16-24k(24kHz,22.05kHz)
    • aac_ld :AAC-LD flashで再生不可
    • aac_eld :AAC-ELD flashで再生不可

  • -afterburner は品質を上げるオプション。規定値では使用するようになっているので改めて指定する必要はない。

    FFmpeg Codecs Documentation - libfdk_aac

    詳しくは -h コマンドで確認できる。E..A. はエンコード、オーディオの意味
    そのまま -h で出力してもコマンドが流れるので ffmpeg -h > ffmpeg_help.txt 2>&1 で ffmpeg_help.txt にリダイレクトして出力させる。

    Encoder libfdk_aac [Fraunhofer FDK AAC]:
    General capabilities: delay small
    Threading capabilities: none
    Supported sample rates: 96000 88200 64000 48000 44100 32000 24000 22050 16000 12000 11025 8000
    Supported sample formats: s16
    Supported channel layouts: mono stereo 3.0 4.0 5.0 5.1 7.1(wide) 7.1
    libfdk_aac AVOptions:
    -afterburner E...A...... Afterburner (improved quality) (from 0 to 1) (default 1)
    -eld_sbr E...A...... Enable SBR for ELD (for SBR in other configurations, use the -profile parameter) (from 0 to 1) (default 0)
    -eld_v2 E...A...... Enable ELDv2 (LD-MPS extension for ELD stereo signals) (from 0 to 1) (default 0)
    -signaling E...A...... SBR/PS signaling style (from -1 to 2) (default default)
    default -1 E...A...... Choose signaling implicitly (explicit hierarchical by default, implicit if global header is disabled)
    implicit 0 E...A...... Implicit backwards compatible signaling
    explicit_sbr 1 E...A...... Explicit SBR, implicit PS signaling
    explicit_hierarchical 2 E...A...... Explicit hierarchical signaling
    -latm E...A...... Output LATM/LOAS encapsulated data (from 0 to 1) (default 0)
    -header_period E...A...... StreamMuxConfig and PCE repetition period (in frames) (from 0 to 65535) (default 0)
    -vbr E...A...... VBR mode (1-5) (from 0 to 5) (default 0)

    aacplus ではTSが残らなかった HE-AACv2 はオプション(-signaling implicit、-signaling explicit_sbr)を追加することでTSが残るようになった。


    これでTSが残る HE-AACv2 配信が可能になる。
    -profile:a aac_he_v2 -signaling implicit
    -profile:a aac_he_v2 -signaling explicit_sbr


    ffmpeg -i infile -acodec libfdk_aac -profile:a aac_he_v2 -signaling explicit_sbr -ab 24k -ar 44100 -ac 2 -afterburner 1 out.m4a

    stream encoded with profile - aac_he_v2 - not playing in flash players · Issue #5 · mstorsjo/fdk-aac · GitHub

    2021年4月時点では通常はMPEG4 AACなのがプロファイル指定すればMPEG2 AACも出力できる。ただしコンテナは制限がありMP4で出力するとMPEG4 AACになる。

    ffmpeg -i infile -c:v copy -c:a libfdk_aac -profile:a profile:a mpeg2_aac_low out.ts
    ffmpeg -i infile -vn -c:a libfdk_aac -profile:a profile:a mpeg2_aac_low out.aac


    商用不可の個人利用に限り、バイナリでの再配布禁止。ライセンスについてはまだよくわかっていない。



    追記 2013/06/29 ライセンスについて
    [FFmpeg-devel] Load FDK AAC at run-time
    fdk-aac/NOTICE at master · mstorsjo/fdk-aac · GitHub
    libfdk-aac: Relicense the library wrappers to the ISC license · 2f70651 · FFmpeg/FFmpeg · GitHub

    Open Source Fraunhofer AAC Encoder (fdk-aac) - Hydrogenaudio Forums

    誤った利用を防ぐために。このソフトウェアのライセンスは何かを特定「JNinka」 - MOONGIFT| で fdk-aac-0.1.0.tar.gz を出力してみた。
    fdk_aac_license.zip
    関連記事

コメント

名無しさん(笑)@nw2

ライセンス、ざっと見、GPLインコンパチくさいですね
というかオープンソースの定義にも反してるような印象
うーん残念

X5-452(Sada_Maru)

vo-aacenc + libaacplus
fdk-aac + libaacplus
上記 2種類を混在してffmpeg/libavをbuildするとErrorが出るので気を付けましょう。

X5-452(Sada_Maru)

fdk-aacは"External library"なので、--disable-xxxxと言うコマンドは存在しませんので、インストールしててもしてなくても"--enable-libaacplus"を付けなければ無効になります。

-

コーデックの使い方の項で、
aac_he_v2 :HE-AACv2 28k-64kまで使える 推奨16-24k
この記述だと使える範囲と推奨範囲が矛盾しているのですが、記述ミスですか?

ロベルト

Re: タイトルなし
> コーデックの使い方の項で、
> aac_he_v2 :HE-AACv2 28k-64kまで使える 推奨16-24k
> この記述だと使える範囲と推奨範囲が矛盾しているのですが、記述ミスですか?

指摘ありがとうございます。
44.1kHzではというのが抜けていました。推奨の16-24kを使うには44.1kHz未満の24kHzや22.05kHzにしなければなりません。
非公開コメント

プロフィール

ロベルト

お問い合わせはこちらまで
robelt2525[at]gmail.com

中の人 @nico_lab

広告リンク
Amazon
楽天市場

ブログ更新用 @blo_nico_lab

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

当ブログは、Amazonアソシエイトに参加しています。