• 記事をシェア
  •  
  •  
  •  
  • B! 
  •  

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のビルドを行います。 ビルドには、Ubuntu 20.04 LTS 以降の使用が勧められています。

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

システムを最新にする
Ubuntuにログインし、コンソールから
sudo apt-get update
と入力します。 するとパスワードを聞かれるので、Ubuntuをインストールするときに設定したパスワードを入力します。 通常、数秒~数十秒で処理は完了します。
関連ソフトをダウンロード
コンソールから
sudo apt-get install automake autoconf autopoint build-essential cmake gcc git intltool libtool libtool-bin m4 make meson nasm ninja-build patch pkg-config python tar zlib1g-dev
と入力します。 すると
After this operation, 242 MB of additional disk space will be used.
Do you want to continue? [Y/n]
と聞かれるので、“Y”を入力します。 数十秒で処理は完了します。
なお、時間がかかった場合は、画面の実行ログを確認してください。「E:」や「Err:」で始まるエラーメッセージが表示されていたら失敗しています。 ダウンロード先の「http://jp.archive.ubuntu.com/」へのアクセスでエラーが出る場合は、しばらく時間をおいて再度実行してみてください。

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

Windows用のgccコンパイラ:MinGW-w64のビルドに必要な関連ツールをダウンロードします。 コンソールから次のコマンドを入力します。
sudo apt-get install bison bzip2 curl flex g++ gzip pax
すると
After this operation, 3,738 kB of additional disk space will be used.
Do you want to continue? [Y/n]
と聞かれるので、“Y”を入力します。 数秒~数十秒で処理は完了します。

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

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

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

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

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時間半程度かかる場合もあります。
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を再ビルドするには の説明に従ってファイルを削除した後、再度スクリプトを動かします。
エラー発生時のチェックポイント:
gitなど、ビルドに必要な各種ツールの取得先サーバーが、たまたまビルド実行時にダウンしていることがあります。 または、HandBrakeのリリースから時間がたつと、ビルドに必要な各種ツールの取得先URLが変わってしまうことがあります。 このような場合には、 scripts/mingw-w64-build の実行時に、画面に"unable dowload ..."といったエラーが表示され、必要なツールのダウンロードに失敗します。
こんなときは、まず日にちを改めてビルドにトライします。 それでもダメなときは、エラーが表示されているツールのオフィシャルサイトを探し、最新のURLからダウンロードするよう scripts/mingw-w64-build を編集する必要があります。
参考:
Ubuntu仮想マシンに割り当てた仮想ハードディスクの容量が少ないとエラー終了します。 仮想ハードディスクは少なくとも15GB以上を割り当ててください。

PATHの設定


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

思い通りの文字が入力できない!?


陥りがちな問題が、日本語JISキーボードが接続されているパソコンで、Ubuntuを英語のままでインストールした場合の、キーアサインの違いです。 今後もUbuntuを使い続けるなら、Ubuntuを日本語化してキーボードの設定も変更するのが良いですが、 HandBrakeのビルドのためだけに使うのであれば、キー入力時にちょっと注意すれば済みます。 上記のパス入力を行うのに必要な、キーアサインが違っているキーの一覧を下記に示します。
日本語JIS - English キー対応表
Ubuntuに入力したい文字 実際に日本語JISキーボードから入力するキーストローク
=^ (アクサンシルコンフレックス)
_
(アンダーバー)
=  ([SHIFT]+[-])
{`  ([SHIFT]+[@])
}{  ([SHIFT]+[[])
"*  ([SHIFT]+[:])
:+  ([SHIFT]+[;])

HandBrakeをビルドする

ようやくHandBrakeのビルドです。 パスを通したら、それを有効にするためコンソールを再起動(いったん閉じて再度開く)しましょう。 そしてcd HandBrakeで、HandBrakeフォルダに移動します。
下記のコマンドを入力するとHandBrakeのビルドが始まります。 faac(FDK-AAC)対応のHandBrakeをビルドするには、コマンドラインに"--enable-fdk-aac"を付けることを忘れないでください。
./configure --cross=x86_64-w64-mingw32 --enable-fdk-aac --launch-jobs=$(nproc) --launch

HandBrakeのビルドには非常に時間がかかります。 環境にもよりますが、約30分~90分程度かかる場合もあります。
-------------------------------------------------------------------------------
time end: Sat Mar 12 18:14:04 2022
duration: 1 hour, 17 minute, 20 seconds (4640.06s)
result: SUCCESS
-------------------------------------------------------------------------------
Build is finished!
You may now cd into ./build and examine the output.
といったメッセージが表示されたらビルド完了です。
もし「result:」が「SUCCESS」でないときはエラーが発生しています。その上の方に
collect2: fatal error: ld terminated with signal 9 [Killed]
というメッセージがある場合はメモリ不足です。一旦Ubuntuを終了して、VirtualBox マネージャーの (設定)メニューから [システム]-[マザーボード]画面を開き、[メインメモリー]欄のスライドバーを右に動かして、メモリー容量を増やしてみてください。 このほかエラーメッセージから原因が読み取れないようなエラーが発生したときは、エラーメッセージそのものをググると、ヒントが得られることがあります。

HandBrake
ビルド結果は、"Desktop/HandBrake/build/HandBrakeCLI.exe"と"Desktop/HandBrake/build/libhb/hb.dll"に格納されています。 Ubuntuデスクトップ左のアイコンから (ファイル) を開いてこれらを選択し、右クリックメニューで「コピー」したうえで共有フォルダに貼り付けます。
新バージョンで再ビルドする場合
もし過去にHandBrakeをビルド済みの場合は、HandBrakeフォルダでrm -rf buildコマンドを実行して 事前に過去の環境を削除しておきます。 詳しくはHandBrakeを再ビルドするにはをご参照ください。


HandBrake
つづいてWindowsのエクスプローラーから、Ubuntuの共有フォルダを開くと、これらのファイルが見えています。 このうち"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 --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/