最近はお手軽に動画変換したいときにHandBrakeを使うことが多い。
特にこだわりはないのでStable版を使用中だが、FDK-AACが使えなくなっていたので自前でビルドしてみた備忘録。
(Windows10でMSYS2を使ったビルドはこちら。)
仮想環境の準備
ビルドは仮想環境で行うのでVirtualBoxを使用。
使用した時点のバージョンは5.1.14。
インストール方法は割愛させていただき、早速新規で仮想マシンを作成。
ゲストOSはUbuntuの64bit版を使うのでそれに合わせて設定。名前に「Ubuntu」と入力すると自動でそれっぽい設定がされるので基本そのまま使う。
変更したのは以下の点ぐらい。
- メモリーサイズ => 1024MB
- 仮想ハードディスクのファイルサイズ => 16GB
- オーディオ => オーディオを有効化 => OFF
- ネットワーク => 高度 => ポートフォワーディング 追加 => ホストポート22 & ゲストポート22
メモリーとファイルサイズはお好みで。
オーディオは不要なので無効に。
SSHで操作したりSCPでファイル転送したいのでポートフォワーディングを設定。
Ubuntuのインストール
使用したのはUbuntu16.04LTSの64bit版(AMD64)。
ServerでもDesktopでも構わないけど無駄を省くために今回はNetBootで。
Ubuntu 16.04 LTS (Xenial Xerus) Netboot
ここのmini.isoで起動するとインストールが開始される。
例によって詳細は割愛しますが、基本デフォルトでOK。
一応注意した点。
- Select a language は English のまま
- Select your location は日本に変更。(other => Asia => Japan)
- Configure locates は United States – en_US.UTF-8 のまま
- Software selection で standard system utilities と OpenSSH server のみ選択
一番下のSoftware selection以外は特に気にしなくてもよい。
(他は言語を英語のままロケーションを日本にしただけ)
あとはホスト名・ユーザー名・パスワードあたりを設定するくらい。
インストールが終わったらmini.isoをイジェクトして再起動すればUbuntuが起動する。
UbuntuにSSH接続
VirtualBoxのコンソールだとクリップボードまわりが不便なのでSSHクライアントから接続するのが吉。
今回は Git for Windows に付属するBashを使う。
いざ接続。
ssh -l USER 127.0.0.1
USERはUbuntuのインストール時に設定したもの。パスワードも同様。
以前別の鍵で127.0.0.1に接続した場合、こんな感じの警告がでることがある。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Git付属のbashの場合は、Windowsのユーザープロファイルフォルダ(デフォルトだとC:\Users\USER)にあるフォルダ「.ssh」以下のknown_hostsファイルの中身から127.0.0.1の行を削除すればでなくなる。
他にもMSYSのbashならホームディレクトリ以下などにあると思うので探してみるべし。
ちなみに今回は素性がはっきりしているローカルな仮想環境なのでこれでもいいけど、ネット上の実環境のサーバーでこれがでてきたらヤバイらしい。(乗っ取りとか)
HandBrakeのビルドの準備
続いてビルドに必要なパッケージ等を揃える。
公式のドキュメント通りにやるだけですが・・・
HandBrake Documentation — Building HandBrake for Windows
上のはlastest版で、1.0.0版のドキュメントも別にあるようだけど今のところ内容は同じ。
まずドキュメント通りに必要なパッケージをインストール。
sudo apt-get install cmake curl gcc git intltool libtool m4 make patch python tar wget yasm
gitでcloneしてディレクトリ移動。
git clone https://github.com/HandBrake/HandBrake.git && cd HandBrake
このまま進めても良いがGUIビルドするのが面倒くさい安定版を使いたいのでStableのバージョンをcheckoutする。
git checkout -b 1.0.3
現時点では1.0.3ですがStableのバージョンに合わせてください。
MinGW-w64を自前でビルドする
(apt-getでインストールしたMinGW-w64でもOKだったので読みとばしてもOK)
ドキュメントでは自前でMinGW-w64をビルドするようなのでやってみた。
と言ってもスクリプトが準備されているので実行するだけ。
scripts/mingw-w64-build i686 /home/USER/toolchains/
32bit版で進めますが、64bit版は i686 の部分を x86_64 にすればよい。
USERの部分はUbuntuのユーザー名。
コマンドがない
dependencies: bison bzip2 curl flex g++ gcc gunzip m4 make pax yasm unable to find command(s): bison flex g++ pax
と怒られる場合は、インストール
sudo apt-get install bison flex g++ pax
してから再度挑戦のこと。
ビルドには結構時間がかかるのでひたすら待って、成功したらパスを通しておく。
export PATH="/home/USER/toolchains/mingw-w64-i686/bin:${PATH}"
このやり方の場合セッションが切れると元に戻るので、恒久的にパスを通す場合はホームディレクトリにある.profileファイルを編集してPATHに追加する必要がある。
ちなみにソースを削除は
scripts/mingw-w64-build i686.clean/home/USER/toolchains/
ビルドしたのも削除?は
scripts/mingw-w64-build i686.distclean/home/USER/toolchains/
で、できるらしい。
MinGW-w64を自前でビルドしない
前述の通りapt-getでインストールしたMinGW-w64でもHandBrakeをビルドできた。
sudo apt-get install mingw-w64
MinGW-w64のビルドが面倒な場合はこれでも良さげ。
ちなみに、apt-getでインストールしたMinGW-w64のgccはバージョンが5.3.1なのに対して、上の自前でビルドしたMinGW-w64のgccは5.4.0でした。参考までに。
HandBrakeのビルド
本題のHandBrake(正確にはHandBrakeCLI.exeとhb.dll)をビルドする。
このまま開始すると途中でエラーがでるので先にpkg-configをインストールしておく。
sudo apt-get install pkg-config
やっとHandBrakeをビルド。
32bit版
./configure --cross=i686-w64-mingw32 --enable-x265 --enable-qsv --enable-fdk-aac --launch-jobs=$(nproc) --launch --build=./build32
64bit版
./configure --cross=x86_64-w64-mingw32 --enable-x265 --enable-qsv --enable-fdk-aac --launch-jobs=$(nproc) --launch --build=./build64
x265、QSV、fdk-aacを追加指定。(x264やlibav-aacは自動で有効になった)
launch-jobsはmake時のスレッド数、launchはそのままmakeを実行するオプションのようです。
ビルド用ディレクトリを指定しない場合は「build」という名前で作成されるけど、32bit版・64bit版両方作成する場合は指定しておいた方がわかりやすいかなと。
途中で止まったりパッケージが足りなくてエラーが出た時は、ビルド用のディレクトリそのものを丸ごと削除してからもう一度./configureを走らせれば良い。
使ってみる
こんな感じのメッセージがでていればビルド成功。
result: SUCCESS ------------------------------------------------------------------------------- Build is finished! You may now cd into build32 and examine the output.
Windows側に取り出すにはSCPかSFTPのプロトコルを使えば楽。
GUIならWinSCPあたりでOK。
今回はbashから取り出す。
sshでログインしている状態なので「exit」で抜けてscpで現在のフォルダにお取り寄せ。
scp -P 22 USER@127.0.0.1:/home/USER/HandBrake/build32/HandBrakeCLI.exe . scp -P 22 USER@127.0.0.1:/home/USER/HandBrake/build32/libhb/hb.dll .
Ubuntuのユーザー名などは適宜変更のこと。
あとはhb.dllをHandbrakeがインストールされているフォルダへ上書きするだけ。
Stableのバージョンに合わせてあるのでGUIはそのまま使える。
ちなみにGUIも自前でビルドする場合はVisual Studio Community 2015で試したら簡単に成功。
しかしVisual Studio 2013ではうまくいかなかったので諦めた。
余談
というか今までFDK-AACが使えたのは良かったの?
と思ったらかなり前からアナウンスされており、0.10.5から使えなくなっていたらしい。
FDK-AACが使える0.10.5も出回っていたようだが・・・
追記
2017/04/10
HandBrake 1.0.7 & VirtualBox 5.1.18 で動作を確認しました。