Raspberry Pi 3でx264とハードウエアエンコーダが使えるFFmpegをビルドする
以前の記事ではRaspberry Pi 3でハードウエアエンコーダが使えるFFmpegをビルドしました。今回はx264も使えるようにしてみます。
できるだけ最新のバージョンで試しています。
以前にRaspberry Pi 3でFFmpegのビルド方法を紹介していました。
Raspberry Pi 3のRaspbianでFFmpeg n3.2.4をビルドする
これまでx264は含めていませんでした。
Raspberry Pi 3ではエンコードが遅いので使う人も少ないだろうし、ファイルサイズも大きくなるので省いていました。ですがx264を使う方が意外と多そうです。常用しなくともパソコンとのベンチマーク比較にx264を動かしたい方もいるでしょう。
今回はx264を含めてFFmpegをコンパイルする手順を書いてみます。
RASPBIAN JESSIE WITH PIXEL Version:April 2017 です。
Raspbianのパッケージの更新をします。
Raspbianのバージョンを確認します。
作業は~/Downloadsディレクトリで行います
ffplayが使えるようにします。
drawtextフィルタも入れます。エンコード時に画面に文字を入れるのに使います。
ビルド手順はこちらにあります。
FFmpeg wiki: CompilationGuide/Quick/libx264
手順に従ってやってみます。
ソースコードはDownloadsディレクトリに保存することにします。
共有ライブラリが増えたことをOSに教えます。
これでx264を使う準備ができました。
この記事の公開時ではv1.1.4が最新のようです。異なる場合は読み替えてください。
ソースコードのディレクトリへ移動します。取得したバージョンによっては読み替えてください。
ffmpegのソースディレクトリにインストールしますので、異なるディレクトリの場合は読み替えてください。
1分ほどすると設定したビルド条件が表示されます。エラーで表示されない場合は必要なパッケージが入っているか再確認します。
ビルド条件に自分の思ったものが含まれているか確認します。
例えば、指定したライブラリを認識しているか?
インストールします。
以上でFFmpegが使えるようになりました。
1440x1080 30fpsの動画を次のコマンドでエンコードしてみます。
htop
同じ動画、同じコマンドをパソコンでやってみます。パソコンのCPUはもう古いi7-2600Kです。
クロックは約3.57GHzで動いていました。これで約42fpsでした。
ほぼ1/15の速度でした。意外と差が無い?
ゆっくりとエンコードする目的ならありえなくはないですが、実時間の10倍ですから使い道は限られますね。
できるだけ最新のバージョンで試しています。
以前にRaspberry Pi 3でFFmpegのビルド方法を紹介していました。
Raspberry Pi 3のRaspbianでFFmpeg n3.2.4をビルドする
これまでx264は含めていませんでした。
Raspberry Pi 3ではエンコードが遅いので使う人も少ないだろうし、ファイルサイズも大きくなるので省いていました。ですがx264を使う方が意外と多そうです。常用しなくともパソコンとのベンチマーク比較にx264を動かしたい方もいるでしょう。
今回はx264を含めてFFmpegをコンパイルする手順を書いてみます。
Windows版FFmpegのビルド方法はこちら
Windows用FFmpegをWindows 10でビルドする (Bash on Ubuntu on Windows)
Windows用FFmpegをWindows 10でビルドする (Bash on Ubuntu on Windows)
OSバージョンの確認
OSはRaspbianを使います。この記事公開時での最新イメージを使っています。RASPBIAN JESSIE WITH PIXEL Version:April 2017 です。
Raspbianのパッケージの更新をします。
sudo apt-get -y update sudo apt-get -y upgrade sudo reboot
Raspbianのバージョンを確認します。
pi@raspberrypi:~ $ uname -a Linux raspberrypi 4.9.24-v7+ #993 SMP Wed Apr 26 18:01:23 BST 2017 armv7l GNU/Linuxカーネルバージョンが4.4から4.9へ更新されました。
FFmpegのビルド
改めて最初からFFmpegのビルド手順を書いてみます。作業は~/Downloadsディレクトリで行います
ffplayが使えるようにします。
drawtextフィルタも入れます。エンコード時に画面に文字を入れるのに使います。
FFmpegで必要なパッケージのインストール
ビルドに必要なパッケージをインストールします。sudo apt-get install -y libsdl2-dev libsdl2-image-dev libsdl2-ttf-dev libsdl2-mixer-dev sudo apt-get install -y libfontconfig1-dev libfribidi-dev
x264のコンパイルとインストール
x264のバイナリパッケージは無いので自分でビルドします。ビルド手順はこちらにあります。
FFmpeg wiki: CompilationGuide/Quick/libx264
手順に従ってやってみます。
ソースコードはDownloadsディレクトリに保存することにします。
cd ~/Downloadsソースコードを取ってきます。
git clone git://git.videolan.org/x264.gitソースコートのディレクトリへ移動します。
cd x264ビルドします。
./configure --enable-static --enable-shared make sudo make install5分もかからずに終わるでしょう。
共有ライブラリが増えたことをOSに教えます。
sudo ldconfig
これでx264を使う準備ができました。
FFmpegのソースを取得する
cd ~/Downloads git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg
ALSAライブラリをビルドする
ALSAライブラリの最新バージョンをホームページ(https://www.alsa-project.org/main/index.php/Main_Page)で確認します。Alsa Project Newsのところに書いてあります。この記事の公開時ではv1.1.4が最新のようです。異なる場合は読み替えてください。
cd ~/Downloads wget ftp://ftp.alsa-project.org/pub/lib/alsa-lib-1.1.4.tar.bz2 tar xjvf alsa-lib-1.1.4.tar.bz2
ALSAライブラリのビルド
ALSAライブラリをビルドします。ソースコードのディレクトリへ移動します。取得したバージョンによっては読み替えてください。
ffmpegのソースディレクトリにインストールしますので、異なるディレクトリの場合は読み替えてください。
cd alsa-lib-1.1.4 ./configure --prefix=/home/pi/Downloads/ffmpeg make make install cd ..5分ほどで終わるでしょう。
FFmpegのビルド
先ほどソースを取得したディレクトリへ移動します。cd ~/Downloads/ffmpeg使用できるバージョンの確認をします。FFmpegではタグでリリースバージョンの指定ができます。タグの一覧を見てみます。
git tag -lこの記事公開時のリリース文ではn3.3の案内が最新です。タグを見るとn3.3.1がありました。これを使ってみます。
git checkout refs/tags/n3.3.1このコマンドを実行しなければmasterブランチが使われ最新コードのビルドができますが、開発中の不具合があるのでタグ付けされたバージョンでビルドするのが良いと思います。
ビルド条件の設定
x264を使う指定を追加します。"--enable-libx264"を追加します。./configure --enable-gpl --enable-nonfree --enable-libx264 --enable-mmal --enable-omx-rpi --enable-omx --enable-libfreetype --enable-libfontconfig --enable-libfribidi --extra-cflags="-I/home/pi/Downloads/ffmpeg/include" --extra-ldflags="-L/home/pi/Downloads/ffmpeg/lib" --extra-libs=-ldl
この例では、x264とRaspberry Piのハードウエアエンコーダh264_omxを使えるようにしています。1分ほどすると設定したビルド条件が表示されます。エラーで表示されない場合は必要なパッケージが入っているか再確認します。
ビルド条件に自分の思ったものが含まれているか確認します。
例えば、指定したライブラリを認識しているか?
External libraries:
iconv libx264 sdl
libfontconfig libxcb sdl2
libfreetype libxcb_shape xlib
libfribidi libxcb_xfixes zlib
ハードウエアエンコーダがあるか?External libraries providing hardware acceleration: mmal omx Enabled hwaccels: h264_mmal mpeg4_mmal vc1_mmal mpeg2_mmalffplayはあるか?
Programs:
ffmpeg ffprobe ffserver
ffplay
x264はあるか?Enabled encoders: … h264_omx … libx264 libx264rgb …この確認ができたらコンパイルしましょう。
ビルドとインストール
ビルドします。make -j430分ほどかかります。
インストールします。
sudo make install
バージョンの確認
pi@raspberrypi:~ $ ffmpeg -version ffmpeg version n3.3.1 Copyright (c) 2000-2017 the FFmpeg developers built with gcc 4.9.2 (Raspbian 4.9.2-10) configuration: --enable-gpl --enable-nonfree --enable-libx264 --enable-mmal --enable-omx-rpi --enable-omx --enable-libfreetype --enable-libfontconfig --enable-libfribidi --extra-cflags=-I/home/pi/Downloads/ffmpeg/include --extra-ldflags=-L/home/pi/Downloads/ffmpeg/lib --extra-libs=-ldl libavutil 55. 58.100 / 55. 58.100 libavcodec 57. 89.100 / 57. 89.100 libavformat 57. 71.100 / 57. 71.100 libavdevice 57. 6.100 / 57. 6.100 libavfilter 6. 82.100 / 6. 82.100 libswscale 4. 6.100 / 4. 6.100 libswresample 2. 7.100 / 2. 7.100 libpostproc 54. 5.100 / 54. 5.100
以上でFFmpegが使えるようになりました。
参考
本当に動くか試しにエンコードしてみました。1440x1080 30fpsの動画を次のコマンドでエンコードしてみます。
ffmpeg -i test.ts -c:v libx264 -q 26 -c:a:0 aac -map 0:0 -map 0:1 -f matroska test.mkvこれで変換速度は2.6~3fps程度でした。すべてのコアが100%近く動いてます。
htop
1 [|||||||||||||||||||||||||95.3%] Tasks: 81, 95 thr; 8 running 2 [|||||||||||||||||||||||||94.4%] Load average: 5.65 3.35 1.77 3 [|||||||||||||||||||||||||98.1%] Uptime: 00:32:39 4 [|||||||||||||||||||||||||95.3%] Mem[|||||||||||||||||||||531/733MB] Swp[|| 4/99MB]
同じ動画、同じコマンドをパソコンでやってみます。パソコンのCPUはもう古いi7-2600Kです。
クロックは約3.57GHzで動いていました。これで約42fpsでした。
ほぼ1/15の速度でした。意外と差が無い?
ゆっくりとエンコードする目的ならありえなくはないですが、実時間の10倍ですから使い道は限られますね。
コメント
コメントを投稿