2022年1月15日土曜日

CentOS 7.9.2009上でHandBrakeCLI を1.2.2から1.5.1へ更新

気が向いたので更新してみました。

/usr/local/src/HandBrake-1.5.1に展開して作業する前提です。

目標はバッチ処理用CLIコマンドの生成です。

なお、HEVCとAACに関係しないにもかかわらずビルドの障害となるものは特に無理をして使えるようにするつもりはありません。

とりあえずビルドしてみます。

1
2
3
4
5
6
7
8
$ ./configure \
        --disable-gtk \
        --enable-x265 \
        --enable-fdk-aac \
        --disable-numa \
        --disable-nvenc \
        --disable-vce \
        --verbose

すると

1
ERROR: minimum required cmake version is 3.16.3 and /usr/bin/cmake is 2.8.12

早速cmakeが古すぎるとかでお冠です。
そこでcmakeをビルドします。ちなみに、HandBrake1.2以前からのアップデートの場合はnasmも必要になります。
さて、cmakeのビルドに必要なパッケージをインストールします。
1
2
3
4
5
6
7
8
# yum remove cmake
# yum install openssl-devel \
        keyutils-libs-devel \
        krb5-devel \
        libcom_err-devel \
        libselinux-devel \
        libsepol-devel \
        libverto-devel

無論、removeせずにalternativesでも何でもいいです。configureオプションにcmakeの場所を指定できないのが残念です。
$ wget https://github.com/Kitware/CMake/releases/download/v3.22.1/cmake-3.22.1.tar.gz -O cmake-3.22.1.tar.gz
ダウンロードしたソースを/usr/local/src/cmake-3.22.1に展開して作業します。
$ ./bootstrap 
$ make
# make install

/usr/local/bin/にcmakeができたので、改めてhandbrakeをビルドしたいところですが、その前にcontrib/ffmpegのビルドに失敗しますのでconfigureの前にcontrib/ffmpegのビルドオプションを変更して置きます。

/usr/local/src/HandBrake-1.5.1/contrib/ffmpeg/module.defsを編集して
--enable-libopus(49行目)を--disable-libopusに
--enable-libvpx(54行目)を--disable-libvpxに それぞれ変更してください。

なお、
libvpx-devel-1.3.0-8.el7.x86_64
libvpx-1.3.0-8.el7.x86_6
opus-1.0.2-6.el7.x86_64
opus-devel-1.0.2-6.el7.x86_64
がインストールされていてもcontrib/ffmpegのビルドが失敗しますが、これらはlibhbでも必要とされていますのでインストールが必要です。

ビルドに必要なコマンド及びライブラリのパッケージ名は以下の通りでしたのでインストールします。
1
2
3
4
5
6
7
8
9
10
11
# yum install \
         meson \
         ninja-build \
         libvpx \
         libvpx-devel \
         opus \
         opus-devel \
         turbojpeg \
         turbojpeg-devel \
         libvpx-devel \
         speex-devel
上記のパッケージ群をインストールしたら、改めてconfigureしてbuildします。
すると、
1
2
3
4
5
6
./libhb/libhandbrake.a(hb.o): 関数 `hb_read_preview.constprop.2' 内:
hb.c:(.text+0x5ba): `tjDecompressToYUVPlanes' に対する定義されていない参照です
./libhb/libhandbrake.a(hb.o): 関数 `hb_save_preview' 内:
hb.c:(.text+0x13c0): `tjCompressFromYUVPlanes' に対する定義されていない参照です
./libhb/libhandbrake.a(hb.o): 関数 `hb_read_preview' 内:
hb.c:(.text+0x1a90): `tjDecompressToYUVPlanes' に対する定義されていない参照です

とか抜かしてコンパイルに失敗します。
CentOS7のturbojpeg パッケージが古すぎるのですかね。

今回のケースではHEVCにもAACにもかすりもしないので、関数を呼び出している2か所をコメントアウトして、戻り値を格納する変数に!0を代入しておきます(この機能が必ず失敗終了するようにするため)。
/usr/local/src/HandBrake-1.5.1/libhb/hb.c の545行目と2441行目の二か所です。
tjAllocとかtjDestroyとかも退屈なら削ってもいいんでしょうが、私は超どうでもいいので古いturbojpegパッケージを入れたままにしてあります。

編集が終わったら、再度makeを続行しますと、HandBrakeCLIのビルドが完了です。

後は目障りなdevelなどのパッケージを削除して終了です。
お疲れさまでした。

HandBrake1.2.2に搭載のHEVC encoder version 2.9は今回の更新でHEVC encoder version 3.5+1-f0c1022b6となりましたが、同一オプションで同一ファイルをエンコードすると、エンコード速度は2fpsほど上昇しましたがエンコード後のファイルサイズが10%ほど増えてしましました。

超やっつけで申し訳ございません。

お読みいただいてありがとうございました。

0 件のコメント:

コメントを投稿