スポンサーサイト

 --------
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
カテゴリ :スポンサー広告 トラックバック(-) コメント(-)

RaspberryPi Pi3でlibx265のコンパイル&H.265エンコード作業

 2016-07-15
RaspberryPi3Bは歴代RasPiの中では当然ながら最もハイスペックですが、それでもやはりH.265のエンコードはかなり辛いです。
でも、遊休リソースがあるのなら、絞り尽くしてみたいのが人情というもの。
やってみましょう、RasPiで。
 

libx265のコンパイル (最新版)

巷ではクロスコンパイル環境とかもありますがKISSの原則に従って余計な手順は極力省き、セルフビルドで進めます。

参考情報

【ARM】Raspberry Pi 2でlibx265をビルドする【HEVC】
https://wp.bmemo.pw/689


ひとまず参考情報に従って、コンパイルに必要な諸々をinstallしたりmakeしたりします。
pi% sudo apt-get install mercurial cmake cmake-curses-gui build-essential yasm

pi% cd ~/workdir
pi% hg clone https://bitbucket.org/multicoreware/x265
pi% cd x265/build/linux/
pi% bash ./make-Makefiles.bash


BIN_INSTALL_DIR bin → /usr/local/bin
CMAKE_INSTALL_PREFIX /usr/local/bin → /usr
LIB_INSTALL_DIR lib → /usr/local/lib
(ref: https://wp.bmemo.pw/689)

pi% make
Scanning dependencies of target common
[ 1%] Building CXX object common/CMakeFiles/common.dir/arm/asm-primitives.cpp.o
*** Error in `/usr/bin/c++': double free or corruption (top): 0x01670820 ***
Aborted
common/CMakeFiles/common.dir/build.make:54: recipe for target 'common/CMakeFiles/common.dir/arm/asm-primitives.cpp.o' failed
make[2]: *** [common/CMakeFiles/common.dir/arm/asm-primitives.cpp.o] Error 134
CMakeFiles/Makefile2:294: recipe for target 'common/CMakeFiles/common.dir/all' failed
make[1]: *** [common/CMakeFiles/common.dir/all] Error 2
Makefile:117: recipe for target 'all' failed
make: *** [all] Error 2
はい、というわけで、最新のlibx265ではエラーが出てコンパイルできません (^q^)

libx265のコンパイル (2016-02-02版)

エラーになってしまう最新版をどうにか直せないかソースを覗いてみましたが、ARM用アセンブラに置き換えを行っているちょっとトリッキーな部分で、どうにもちょっと眺めたくらいでは解決できそうにない。
・・というわけで、インチキな方法で回避します。 最新版が動かないならちょっと前の版を使えばいいじゃない。
hgの更新ログを見て、ちょっとずつ前の版に戻しつつコンパイルしてみたら、幸運にも(?)2016-02-02の版では無事にバイナリが生成できることを発見しました。(^q^)(^q^)(^q^)
pi% cd ~/workdir/x265
pi% hg update -d "2016-02-02"

pi% cd build/linux/
pi% bash ./make-Makefiles.bash
pi% make

pi% sudo make install
pi% sudo ldconfig
おそらく、最新版ではARM向けの素敵な最適化がなされていると思います。・・・が、動かない物はいくら最適化されていようが動かない。多少効率は落ちるかもしれませんが今動く物を手に入れるには一番近道!(かもしれない)
はやく最新版の更新がありますように☆


libx265を使うようにffmpegをコンパイル

ffmpegのconfigureをするときに --enable-libx265 のオプションをつけてconfigureして、makeすればオッケー。例えばこう。
pi% ./configure \
--enable-gpl \
--enable-libass \
--enable-libfdk-aac \
--enable-libfreetype \
--enable-libtheora \
--enable-libvorbis \
--enable-libx264 \
--enable-libx265 \
--enable-nonfree

pi% make



RaspberryPi3BでH.265エンコード

放熱環境がすこし心配だったので600MHz動作のままでエンコード作業をさせてみました。その結果・・・・
pi% time ffmpeg  -i "720x480_10m49s_x264-1749k_aac-160k.mp4" -s 854x480 \
-ar 44100 -ac 2 -vcodec libx265 -preset veryslow -threads 0 ./out_Pi3-01_x265.mp4
...
encoded 19470 frames in 166966.01s (0.12 fps), 397.14 kb/s, Avg QP:33.81
ffmpeg -i -s 854x480 -ar 44100 -ac 2 -vcodec libx265 -preset veryslow 0
635531.03s user 156.70s system 380% cpu 46:22:46.51 total
というわけで、720x480 10分49秒 H.264な動画を166966秒≒46時間かけてエンコードできました。エンコード速度は0.12fpsでした。

presetをveryslowよりも速いものにすれば結構変わってくると思いますが、「消すのが惜しい動画」というものは大抵の場合、「できるだけ綺麗に残したい動画」なのでveryslow指定にしました。これ以外だとssim 0.98以上を狙うには結構ビットレート注ぎ込まないといけないので。。。
ファイルサイズを小さく、でも画質は綺麗に、という贅沢のための代償がveryslowなのですね。。

放熱環境をもうちょっとマシにして1200MHz動作にすると0.2fpsくらいは出るのかもですね。今度試してみたいと思っています。
(思うだけならタダ)


解決編: RaspberryPi Pi3でlibx265 リベンジ


 
 
コメント












管理者にだけ表示を許可する
トラックバック
トラックバックURL:
http://wbbwbb.blog83.fc2.com/tb.php/238-599ed6f9
≪ トップページへこのページの先頭へ  ≫
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。