faac(FDK-AAC)対応のHandBrakeをビルドする方法

ここではDVD/Blu-rayディスクをiPod/iPad/iPhone用ビデオに変換できるフリーソフト「HandBrake」に対して 高音質のAACオーディオエンコーダーを組み込むことを目的に、 Windows10にインストールしたVirtualBox、Ubuntu上で、HandBrakeをビルドする方法をご紹介します。
なお、VirtualBox、Ubuntuの使い方含めた、HandBrakeを作る方法の全般については、 faac(FDK-AAC)対応のHandBrakeを作るのページで解説していますので併せてご参照下さい。

ビルド手順について

HandBrakeのビルド手順については、オフィシャルサイトで解説されています。 最新安定版の手順 と、 最新テスト版(Nightly build)の手順 の2つがあります。 本ページでは、最新安定版の手順に従って、64bit版Windows向けHandBrakeのビルドを行います。 Windows向け最新安定版のビルド手順(HandBrake) Windows向け最新テスト版のビルド手順(HandBrake)

ビルドに必要なソフトをダウンロード

システムを最新にする
Ubuntuにログインし、コンソールから
sudo apt-get update
と入力します。 するとパスワードを聞かれるので、Ubuntuをインストールするときに設定したパスワードを入力します。 通常、数秒~数十秒で処理は完了します。
関連ソフトをダウンロード
コンソールから
sudo apt-get install automake autoconf build-essential cmake curl gcc git intltool libtool libtool-bin m4 make patch pkg-config python tar yasm zlib1g-dev
と入力します。 するとまたパスワードを聞かれるので、Ubuntuをインストールするときに設定したパスワードを入力します。 こちらも数十秒で処理は完了します。

NASMを入手する

x86アセンブラ:NASMを入手します。
Ubuntu 18.04 の場合
Ubuntu 18.04を使用している場合は、NASMをダウンロードします。 コンソールから
sudo apt-get install nasm
と入力します。
Ubuntu 16.04 LTS の場合
Ubuntu 16.04 LTSを使用している場合は、NASMが古いので、再ビルドを行います。 コンソールから次のコマンドを順に入力します。
curl -O https://www.nasm.us/pub/nasm/releasebuilds/2.13.03/nasm-2.13.03.tar.bz2
tar -xf nasm-2.13.03.tar.bz2
cd nasm-2.13.03
./configure --prefix=/usr/local --enable-sections --enable-lto
make -j$(nproc)
sudo make install
source ~/.bashrc
cd ..
いずれも数秒~数十秒で処理は完了します。
なお、NASMのバージョンが上がったり、取得先URLが変わっている場合があります。 curlコマンドのあとのtarコマンドでエラーが出たときは、正しくダウンロードできていません。 NASMのオフィシャルサイトでバージョンや取得先URLを確認し、 curlコマンドに与えるURLとtarコマンドに与えるファイル名を見直してください。 NASMオフィシャルサイト

MinGW-w64に必要なツールをダウンロードする

Windows用のgccコンパイラ:MinGW-w64のビルドに必要な関連ツールをダウンロードします。 コンソールから次のコマンドを入力します。
sudo apt-get install bison bzip2 flex g++ gzip pax
するとパスワードを聞かれるので、Ubuntuをインストールするときに設定したパスワードを入力します。 つづいて
この操作後に追加で 2,862 kB のディスク容量が消費されます。
続行しますか? [Y/n] 
といったメッセージが表示されるので"y"を入力します。 数秒~数十秒で処理は完了します。 MinGW-w64オフィシャルサイト

HandBrakeのソースコードをダウンロードする

コンソールから次のコマンドを入力します。
git clone https://github.com/HandBrake/HandBrake.git && cd HandBrake
するとHandBrakeのソースコード(リポジトリ)全体のダウンロードが始まります。 ダウンロードサイズは約75MBです。 環境にもよりますが、数分~十数分で処理は完了します。
新バージョンで再ビルドする場合
もし過去にHandBrakeのソースコードをダウンロード済みの場合は、HandBrake ディレクトリに cd したうえで、git pullコマンドで最新にアップデートします。 詳しくはHandBrakeを再ビルドするにはをご参照ください。

ビルドするHandBrakeのバージョンを指定する

HandBrakeディレクトリに移動していることを確認の上、コンソールから次のコマンドを入力します。
git tag --list | grep ^1\.1\.
すると、ダウンロードしたソースコード(リポジトリ)に含まれるバージョン(タグ)の一覧が確認できます。 つづいて
git checkout refs/tags/$(git tag -l | grep -E '^1\.1\.[0-9]+$' | tail -n 1)
と入力すると、最新安定版のビルドが指定(チェックアウト)されます。
(ここの例ではHandBrake Ver 1.1.*シリーズを選択しています。Ver 1.0.*シリーズを見たい場合は^1\.1\.^1\.0\.に置換します。)

MinGW-w64 toolchainをビルドする

HandBrakeのソースコード(リポジトリ)で提供されるスクリプトを使って、 HandBrakeのビルドに必要なWindows用gccコンパイラ:MinGW-w64とその関連ツール群をダウンロードし、ビルドを実施します。

事前準備


使用するMinGW-w64と関連ツール群のバージョンは、ビルドしたいHandBrakeのバージョンに依存します。 必ず事前に、上のgit checkoutコマンドを実行して、HandBrakeのバージョンを指定しておいてください。
新バージョンで再ビルドする場合
もし過去にMinGW-w64 toolchainをビルド済みの場合は、 scripts/mingw-w64-build x86_64.distclean /home/[ユーザー名]/toolchains/ コマンドなどを使用して、事前に過去の環境を削除しておきます。 詳しくはMinGW-w64 toolchainを再ビルドするにはをご参照ください。

ダウンロードとビルド


HandBrakeディレクトリに移動していることを確認の上、コンソールから次のコマンドを入力します。
scripts/mingw-w64-build x86_64 /home/[ユーザー名]/toolchains/
[ユーザー名]の部分には、Ubuntuのインストール時に設定した、あなたのユーザー名を入れてください。 するとビルドしようとするHandBrakeのバージョンに適合した、関連ファイルのダウンロードとビルドが始まります。 これには非常に時間がかかります。 環境にもよりますが、約40分~2時間半程度かかる場合もあります。
bin: /home/apollomaniacs/toolchains//mingw-w64-x86_64/bin
  run the following command and add it to your shell startup script
  (e.g., .bashrc or .bash_profile) to make persistent across sessions:
    export PATH="/home/apollomaniacs/toolchains//mingw-w64-x86_64/bin:${PATH}"
complete.
といったメッセージが表示されれば終了です。 これ以外のメッセージが出ている場合は失敗しています。 MinGW-w64 toolchainを再ビルドするには の説明に従ってファイルを削除した後、再度スクリプトを動かします。
参考: Ubuntu仮想マシンに割り当てた仮想ハードディスクの容量が少ないとエラー終了します。 仮想ハードディスクは少なくとも15GB以上を割り当ててください。 VirtualBoxにLinux(Ubuntu)用の仮想マシンを作る方法

PATHの設定


ビルドした toolchains/mingw-w64-x86_64/bin にパスを通しておきます。 .bashrc(または.bash_profile / .profile)の最終行に export PATH="/home/[ユーザー名]/toolchains/mingw-w64-x86_64/bin:${PATH}" を追加します。
ユーザーのホームディレクトリに移動し、 ("cd .."でHandBrakeフォルダから戻るか、別のコンソールを起動する) 次のコマンドを順に入力します。
  • vi .bashrc (viエディタで".bashrc"の編集を開始)
  • G (カーソルを文末に移動)
  • o (編集モードへ切り替え:現在カーソルがある行の下に1行挿入)
  • export PATH="/home/[ユーザー名]/toolchains/mingw-w64-x86_64/bin:${PATH}"
    を入力。[ユーザー名]の部分には、Ubuntuのインストール時に設定した、あなたのユーザー名を入れてください。
  • [ESC]キー押下(編集モード終了)
  • :wq (保存してviエディタを終了)
編集が完了したら cat .bashrc で内容を表示させて、正しく編集されているか確認しておきましょう。

HandBrakeをビルドする

ようやくHandBrakeのビルドです。 faac(FDK-AAC)対応のHandBrakeをビルドするには、コマンドラインに"--enable-fdk-aac"を付けることを忘れないでください。
./configure --cross=x86_64-w64-mingw32 --enable-fdk-aac --enable-qsv --launch-jobs=$(nproc) --launch

新バージョンで再ビルドする場合
もし過去にHandBrakeをビルド済みの場合は、HandBrakeフォルダでrm -rf buildコマンドを実行して 事前に過去の環境を削除しておきます。 詳しくはHandBrakeを再ビルドするにはをご参照ください。
HandBrakeのビルドには非常に時間がかかります。 環境にもよりますが、約30分~50分程度かかる場合もあります。
-------------------------------------------------------------------------------
time end: Tue Apr  17 18:08:41 2018
duration: 27 minutes, 42 seconds (1662.66s)
result: SUCCESS
-------------------------------------------------------------------------------
Build is finished!
You may now cd into ./build and examine the output.
といったメッセージが表示されたらビルド完了です。
HandBrake
ビルド結果は、"HandBrake/build/HandBrakeCLI.exe"と"HandBrake/build/libhb/hb.dll"に格納されています。 Ubuntuデスクトップ左のアイコンから (ファイル) を開いてこれらを選択し、右クリックメニューで「コピー」したうえで共有フォルダに貼り付けます。


HandBrake
つづいてWindowsのエクスプローラーから、Ububtuの共有フォルダを開くと、これらのファイルが見えています。 このうち"hb.dll"を、最新安定版HandBrakeのインストールフォルダ
「C:\Program Files\HandBrake」
に上書きすればOKです。上書きには管理者権限が必要です。

HandBrake
このように、HandBrakeのオーディオエンコーダーに"AAC(FDK)"が選べるようになります。
注意: ライセンスの関係上、ビルドしたFDK-AAC対応のHandBrakeバイナリファイルを他人に提供したり公開してはいけません。 あくまでもビルドした本人の個人利用のみとしてください。

HandBrakeでエラーが出たら・・・

PC ビルドに失敗していると、HandBrakeでビデオファイルを読み込む時にこのようなエラーが表示されることがあります。
PC そんな時は、HandBrakeのActivity Logを見ます。
PC "hb.dll"に関するエラーが出ているようであれば、ビルドが失敗していると思われます。 手順をよく確認して、再ビルドしましょう。
この例の「"hb.dll"の"hb_opencl_set_enable"というエントリポイントが見つかりません」エラーの原因は、 git checkout でHandBrakeのバージョンを指定する前に MinGW-w64 toolchain をビルドしてしまったことによるバージョン不整合でした。

HandBrakeを再ビルドするには

HandBrakeだけを再ビルドするには、"HandBrake/build"フォルダを、フォルダごと消去します。
cd HandBrake
rm -rf build
つづいて再度HandBrakeのビルドを流します。
./configure --cross=x86_64-w64-mingw32 --enable-fdk-aac --enable-x265 --enable-qsv --launch-jobs=$(nproc) --launch

また、HandBrakeのソースコード(リポリトジ)のダウンロードからやり直す場合は、 ホームフォルダに戻って、"HandBrake"フォルダごと消去します。
cd ..
rm -rf HandBrake

なお、ダウンロード済みのHandBrakeのソースコード(リポリトジ)を最新に更新するには、次のコマンドを入力します。
cd HandBrake
git pull

MinGW-w64 toolchainを再ビルドするには

MinGW-w64 toolchainのビルドに失敗したときは、まず、以下3種の中の、いずれかのスクリプトを使って関連ファイルを削除します。

(1) ビルドからやり直す場合


ダウンロード済かつ展開済みのパッケージの、ビルドのみをやり直す場合は、次のように入力します。
scripts/mingw-w64-build x86_64.distclean /home/[ユーザー名]/toolchains/
"toolchains/mingw-w64-x86_64"を削除します。

(2) パッケージの展開からやり直す場合


ダウンロード済みのパッケージの、展開からやり直す場合は、次のように入力します。
scripts/mingw-w64-build x86_64.clean /home/[ユーザー名]/toolchains/
"toolchains/source"と"toolchains/build-mingw-w64-x86_64"を削除します。

(3) パッケージのダウンロードからやり直す場合


パッケージをすべて消去して、新たなバージョンのダウンロードからやり直す場合は、次のように入力します。
scripts/mingw-w64-build pkgclean /home/[ユーザー名]/toolchains/
"toolchains/pkg"(ダウンロードしたパッケージ)を削除します。

MinGW-w64の再ビルド


ファイル、フォルダを削除したら、つづいて再度ビルドスクリプトを実行します。 なお、ビルド前にHandBrakeのバージョン指定:"git checkout"を終えてください。
scripts/mingw-w64-build x86_64 /home/[ユーザー名]/toolchains/