ArchLinuxでx265を試してみた

前回の続きです

前回はffmpegに組み込まれたx265でエンコードしてみましたが
今回はソースコードからx265をビルドして試してみます

まずはx265の準備から

ArchLinuxならリポジトリにあるのでそのままpacmanでインストール出来ます

# pacman -S x265

結構頻繁に更新してくれてるので、そのまま配布されたバイナリでも特に問題無いと思います

が、自分でビルドがしたいんや!!とか言う人もいるでしょう

今回はソースコードを取得してビルドする事にします

一応AURの方にはx265-10bitとかx265-hgもあるのでお好きなのをどうぞ

基本的にビルドの仕方はWikiにプラットフォーム別に分けて書いてあります

WikiではUbuntuが例としてありますが、Archでも必要なパッケージは同じです
ソースコードを取得するのに必要なmercurial,ビルドするのにcmake,yasm等
このページを見てるような人ならすでにインストール済みでしょう(たぶん)
あとはWikiに書いてある通りにコマンドうつだけです

$ hg clone https://bitbucket.org/multicoreware/x265
$ cd x265/build/linux
$ ./make-Makefiles.bash
$ make

デフォルトだと8bppが作成されます。もし16bppバイナリを作成したい方はHIGH_BIT_DEPTHの部分をONにして下さい

makeが完了したらx265のバイナリが出来てるので後はご自由に

さて、無事にx265を使う準備が出来ました。実際にエンコードしてみましょう

今回も素材は某ムービーを使用

まず前提として、現在x265の入力ファイルはrawかy4m,出力ファイルはrawしか出来ません

そこでまずx265にファイルを食わす為に、素材の映像をy4mに変換します

しかしそのままy4mで出力してしまうと無駄なので、ffmpegからパイプを使ってx265に渡しましょう

$ ffmpeg -i hoge.mpg -an -f yuv4mpegpipe - | x265 --y4m --input-res 1280x720 --fps 30 --crf 20 - -o hogehoge.hevc

こんな感じですね

エンコードが終了してhogehoge.hevcというファイルが出来ていれば成功かと思います
試しにmpv等で再生してみて確認してみましょう

後は音声ですが、前回と同じくffmpegからfdk_aacを使って作成(前回やったので省略)

そして映像を音声をmuxさせます
fpsは素材に合わせて指定して下さい。今回は30pの素材だったので30で指定)

MP4Boxを使う場合

$ MP4Box -add hogehoge.hevc:fps=30 -add hogehoge.aac -new hogehoge.mp4

L-SMASHを使う場合

$ muxer -i hogehoge.hevc?fps=30 -i hogehoge.aac -o hogehoge.mp4

MP4BoxもL-SMASHも最近のrevならHEVC対応しているはずです

muxしたファイルを再生してみて確認してみましょう
上手く出来てたらおめでとうございます(パチパチパチ)

最後にここまで書いておいてアレですが、今回のやり方は音ズレ等についてまったく考慮してません
(ならこんな記事書くなよというツッコミは)

今回MP4Boxでmuxした場合、元ファイルよりわずかに映像と音声にズレがみられました
数年前にも原因を調べた気がするんだけどすっかり忘れてる…

自分が音ズレについて理解しないといけないのが先ですなぁ…