`.m4b` (オーディオブック) 形式のデータにしたいと思った.勿論タダで.

これを思い立ってヒットした情報を斜め読みしていた当初,「めんどくさそだな」と思ってたのですが,そうでもなく.
スッキリ.

ターミナルを立ち上げ,こ.

ffmpeg -i "${src}" -c:a libfdk_aac -b:a 128k -f mp4 "${dst}"

${src} は,変換元のファイルパス.
${dst} は,変換先のファイル,.m4b となるファイルのパス.



https://trac.ffmpeg.org/ffmpeg-logo.png



OS は macOS High Sierra

% sw_vers
ProductName:    Mac OS X
ProductVersion: 10.13.4
BuildVersion:   17E199

Homebrew を導入してます.

そして今回も Homebrew を使います.

FFmpeg with libfdk_aac(FDK AAC)

Homberew は,FFmegFDK AAC と言うコーデックライブラリ付きでインストールしたいので,そのために使います.

ということで,条件が揃っていない場合,目的の作業を行うには準備が必要になります.

今回の作業の肝は,その FDK AAC というコーデックライブラリの存在とセットアップでした.

FFmpeg のインストール/セットアップ

brew install ffmpeg --with-fdk-aac

これだけ.

Homebrew 様様です.

brew info ffmpeg でも叩いてみましょう.
==> Dependencies セクションの fdk-aac に "✔" が付いていれば,冒頭記載の処理が実行できるようになります.

% brew info ffmpeg
ffmpeg: stable 3.4.2 (bottled), HEAD
Play, record, convert, and stream audio and video
https://ffmpeg.org/
/usr/local/Cellar/ffmpeg/3.4.2 (248 files, 50.8MB) *
  Built from source on yyyy-MM-dd at HH:mm:ss with: --with-fdk-aac
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/ffmpeg.rb
==> Dependencies
Build: nasm ✔, pkg-config ✔, texi2html ✔
Recommended: lame ✔, x264 ✔, xvid ✔
Optional: chromaprint ✘, fdk-aac ✔, fontconfig ✔, freetype ✔, frei0r ✘, game-music-emu ✘, libass ✘, libbluray ✘, libbs2b ✘, libcaca ✘, libgsm ✘, libmodplug ✘, librsvg ✘, libsoxr ✘, libssh ✘, libvidstab ✘, libvorbis ✘, libvpx ✘, opencore-amr ✘, openh264 ✘, openjpeg ✔, openssl ✔, opus ✘, rtmpdump ✔, rubberband ✘, sdl2 ✘, snappy ✘, speex ✘, tesseract ✘, theora ✘, two-lame ✘, wavpack ✘, webp ✔, x265 ✘, xz ✔, zeromq ✘, zimg ✘
==> Options
:

もし

既に Homebrew で FFmpeg 導入済みの状態で,上記インストールコマンドを叩いても変わらない場合は,「既にインストールしているので」的にスキップされてしまうようですので,一旦削除 brew uninstall ffmpeg するのが良いかもしません.
後で,brew install --force ffmpeg --with-fdk-aac で強制的にインストールしても良いのかも? と思ったりしました.
が,試しておりません.

なぜソフトウェアは FFmpeg で,なぜコーデックが FDK AAC (libfdk_aac) なのか

これは個人的なメモです.*1

まず前者の,なぜ FFmpeg なのかについては,以前にやった作業で導入していたから,というお話で,
後者,数あるコーデックライブラリの中からどうして FDK AAC (libfdk_aac) なのかについては,今回の作業をしようと一番最初にヒットしたこちらのエントリを見て.

» audio - How to convert series of MP3 to a M4B in a batch - Super User

意思決定の根拠とは,そんなもん,と言えば,そんな程度の話です.

なのでこの目的を実現する道具として,上述の ffmpeg with libfdk_aac に必然は無いと思ってます.

コーデックライブラリに関して言えば,先ほどの参照先においてこんな記載があります.;

Your ffmpeg might not have fdk_aac enabled; if that's the case, you can try using
・-c:a libfaac (high quality)
・-c:a aac -strict experimental (decent quality, but use higher bitrates)
・-c:a libvo_aacenc (rather bad quality) audio - How to convert series of MP3 to a M4B in a batch - Super User

別に libfdk_aac じゃなくても良い.

FDK AAC (libfdk_aac) って?

と言うお話も一応メモ.
個人的に必要十分なレベルで(笑

The Fraunhofer FDK AAC codec library. This is currently the highest-quality AAC encoder available with ffmpeg.

現時点では最も高品質の AAC エンコーダなのだそうです.

そして冒頭で言った「めんどくさそ」と思ったのが,これ.

The license of libfdk_aac is not compatible with GPL, ... Therefore this encoder have been designated as "non-free", and you cannot download a pre-built ffmpeg that supports it. This can be resolved by compiling ffmpeg yourself.

GPL ライセンスとの互換性がないので,FFmpeg に予め libfdk_aac を組み入れた状態のものを配布,ダウンロード出来ないのだそう.
ユーザ自身でコンパイルして使うことはできる,と言う話のようで,とっつき難そうだな,と思ったのが第一印象でした.

それにしても,FFmpeg のオプション,よくわかんない

前述のコマンドライン

ffmpeg -i "${src}" -c:a libfdk_aac -b:a 128k -f mp4 "${dst}"

とりあえず,このコマンドが何を言っているのかくらいは知りたかったのですが,極端に簡単か,極端にマニアックか,で想像していた以上に身の丈に合った*2情報にあたらない.

特に -c:a-b:a の部分.
一応何となく想像はつくのですが,その解釈で良いと確認できる拠り所になかなか辿り着かなず,結構な労を要しました.

まず,"${src} を ${dst} にする" の部分は見ただけで分かる.
入力のファイル名 ${src} の方は -i オプションに続いて定義する.
出力の方 ${dst} は,オプションなどなく,《すべてのオプションの最後に出力ファイルを設定するだけ》.

そして,libfdk_aac128k,そして -f mp4
これらも見ただけで,想像はつく.

分からないのが,-c:a -b:a とか言うやつ.

ドキュメントでこんな記載を見つけます.;

-c[:stream_specifier] codec (input/output,per-stream)
-codec[:stream_specifier] codec (input/output,per-stream)

っぽいな~とは思うものの,いまいち確信できない.

For example

    ffmpeg -i INPUT -map 0 -c:v libx264 -c:a copy OUTPUT

encodes all video streams with libx264 and copies all audio streams.

これを見る限り,-c:v の "v" は video の v,-c:a の "a" は audio の a と読み取れるのですが,明快に 「"a" は audio の a!」「"v" は video の v」と言った記載に行き付かないので,個人的にどうしても「これでいいのか」感が抜けません.

同ドキュメント内に Stream specifiers のセクションも用意はされているのですが,いまいち腑に落ちません.

気持ち悪い.

とそんな中,ありました.;

-c:v オプションは映像コーデックを、-c:a は音声コーデックを指定する。古くはそれぞれ -vcodec -acodec というオプションであった。両者は等価である。

ということでして,
-c:a libfdk_aac は,音声の :a コーデック -c は,libfdk_aac を使って,で.
-b:a 128k は,音声の :a ビットレートを,128k に,と.

の結果

長い音声データはオーディオブックとして iTunes に収め,iPhoneiBook へ同期して,外出先で聴取.
全部聴ききれなくても,再生位置を憶えててくれるので便利,となります.

めでたし.

今度は自動で iTunes のライブラリへ送り,同期する仕組みを作れればなと考えています.
m4b データ作った後の作業が超絶ダルイ.

にしても,何で iBook に切り離すのかな,Apple さんさ.ユーザ観点で考えると,一緒で良くない?
そして iPhone/iPadiBook App のユーザビリティ,何とかなりませんかね.幾らなんでも酷過ぎる.

はい,おしまい.

*1:また,これをもしご覧になった方がいたとして笑,色々ソフトや方法があるのにどうしてそれなのか,その決定プロセスに対して気になる方がいらしたら,と思って.
あと実は何より自身がこういうところ,結構気にする/なる質だったりするのもありまして...

*2:自己中と言えば,自己中なのですが笑