`.m4b` (オーディオブック) 形式のデータにしたいと思った.勿論タダで.
これを思い立ってヒットした情報を斜め読みしていた当初,「めんどくさそだな」と思ってたのですが,そうでもなく.
スッキリ.
ターミナルを立ち上げ,こ.
ffmpeg -i "${src}" -c:a libfdk_aac -b:a 128k -f mp4 "${dst}"
${src}
は,変換元のファイルパス.
${dst}
は,変換先のファイル,.m4b
となるファイルのパス.
% sw_vers ProductName: Mac OS X ProductVersion: 10.13.4 BuildVersion: 17E199
Homebrew を導入してます.
そして今回も Homebrew を使います.
FFmpeg
with libfdk_aac
(FDK AAC
)
Homberew は,FFmeg
を FDK 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.
via. Encode/AAC – 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.
via. Encode/AAC – FFmpeg
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_aac
,128k
,そして -f mp4
.
これらも見ただけで,想像はつく.
分からないのが,-c:a
-b:a
とか言うやつ.
ドキュメントでこんな記載を見つけます.;
-c[:stream_specifier] codec (input/output,per-stream)
-codec[:stream_specifier] codec (input/output,per-stream)via. ffmpeg Documentation
っぽいな~とは思うものの,いまいち確信できない.
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.
via. ffmpeg Documentation
これを見る限り,-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 に収め,iPhone の iBook へ同期して,外出先で聴取.
全部聴ききれなくても,再生位置を憶えててくれるので便利,となります.
めでたし.
今度は自動で iTunes のライブラリへ送り,同期する仕組みを作れればなと考えています.
m4b データ作った後の作業が超絶ダルイ.
にしても,何で iBook に切り離すのかな,Apple さんさ.ユーザ観点で考えると,一緒で良くない?
そして iPhone/iPad の iBook App のユーザビリティ,何とかなりませんかね.幾らなんでも酷過ぎる.
はい,おしまい.