読者です 読者をやめる 読者になる 読者になる

もみあげあしめ

組み込みとかIoTとか、いろいろ

Raspberry Pi で FFmpeg を使う

クロスコンパイル Raspberry Pi FFmpeg

Raspberry Pi で apt を使った FFmpeg のインストールを試したところできなかったので、
FFmpegロスコンパイルする方法と、実機上でコンパイルする方法をまとめてみました。
※実機でコンパイルだけでもいいんだけど、お勉強のため

f:id:shima_nigoro:20160718224239p:plain:w300

ロスコンパイル環境は下記で作ったものがあることが前提です。

ちなみに、生成にかかる時間はクロスコンパイルしたほうが圧倒的に早いです。

前提と前準備

【共通】前提

・「/home/hoge/ffmpeg/output」にコンパイルされたものをすべて集める、とします。

【クロス】前準備

・Cコンパイラのプレフィックスを設定しておく

export CCPREFIX="/path/to/cross/compiler/install/directory/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-"

※パス(/path/to/cross/compiler/install/directory)は自身の環境に合わせて設定すること

1. 関連ライブラリのビルド

1.1. libx264 のビルド

H.264形式でエンコードするためのライブラリ

【共通】ソースを git からコピーする
git clone git://git.videolan.org/x264
【共通】・ディレクトリ移動
cd x264
【クロス】クロスコンパイルする場合の設定

・クロスコンパイル用の設定をする。

./configure\
 --host=arm-linux-gnueabihf\
 --enable-static\
 --cross-prefix=${CCPREFIX}\
 --prefix=/home/hoge/ffmpeg/output
【実機】実機でコンパイルする場合の設定

・実機用の設定を行う。

./configure --prefix=/home/hoge/ffmpeg/output
【共通】コンパイルとインストール

・ライブラリをコンパイルする

make

・「--prefix」で指定したディレクトリにライブラリをインストールする。

make install

1.2. ALSA のビルド

AlsaProjectLinux の音声入出力用のライブラリ。

【共通】ソースのダウンロードと展開
wget ftp://ftp.alsa-project.org/pub/lib/alsa-lib-1.1.1.tar.bz2
tar xjvf alsa-lib-1.1.1.tar.bz2 
【共通】ディレクトリ移動
cd alsa-lib-1.1.1/
【クロス】クロスコンパイルする場合

・クロスコンパイル用の設定を行う。

./configure\
 --host=arm-linux-gnueabihf\
 --prefix=/home/hoge/ffmpeg/output
【実機】実機でコンパイルする場合

・実機用の設定を行う。

./configure --prefix=/home/hoge/ffmpeg/output
【共通】コンパイルとインストール

・ライブラリをコンパイルする

make

・「--prefix」で指定したディレクトリにライブラリをインストールする。

make install

2. FFmpegコンパイル

【共通】ソースを git からコピーする
git clone git://source.ffmpeg.org/ffmpeg.git
【共通】ディレクトリ移動
cd ffmpeg
【クロス】クロスコンパイルする場合

・クロスコンパイル用の設定を行う。

./configure\
 --enable-cross-compile\
 --cross-prefix=${CCPREFIX}\
 --arch=armel\
 --target-os=linux\
 --prefix=/home/hoge/ffmpeg/output\
 --enable-gpl\
 --enable-libx264\
 --enable-nonfree\
 --extra-cflags="-I/home/hoge/ffmpeg/output/include"\
 --extra-ldflags="-L/home/hoge/ffmpeg/output/lib"\
 --extra-libs=-ldl
【実機】実機でコンパイルする場合

・実機用の設定を行う。

./configure\
 --enable-gpl\
 --enable-libx264\
 --enable-nonfree\
 --extra-cflags="-I/home/hoge/ffmpeg/output/include"\
 --extra-ldflags="-L/home/hoge/ffmpeg/output/lib"\
 --extra-libs=-ldl
【共通】コンパイル

・ライブラリをコンパイルする

make
【クロス】バイナリの書き出しと確認方法

・「--prefix」で指定したディレクトリにFFmpegをインストールする。

make install

「/home/hoge/ffmpeg/output/bin」に「ffmpeg」「ffprobe」等のバイナリが作成される。
※スタティックビルドしたのでサイズは 15MB 位になるはず。

【実機】FFmpeg のインストール
sudo make install

実機の場合はここで終わりです。お疲れ様でした。
ffmpegコマンドラインから使えるようになっているはずです。

3. 動作確認

【クロス】クロス環境から Raspberry Pi にコピーする

・「/home/hoge/ffmpeg/output/bin」の ffmpegRaspberry Pi にコピーする。
※コピーは下記記事のように Raspberry PiSamba を使えるよう設定しておくと便利。

・コピーの際に実行権限が消えてしまっている場合は実行権限を付加する。

chmod 755 ffmpeg

・とりあえず、help を表示させる

./ffmpeg -h

うまくいけば、色々表示されるはず

ffmpeg version N-81043-ga49ed9e Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 4.8.3 (crosstool-NG linaro-1.13.1-4.8-2014.01 - Linaro GCC 2013.11) 20140106 (prerelease)
  configuration: --enable-cross-compile --cross-prefix=/path/to/cross/compiler/install/directory/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf- --arch=armel --target-os=linux --prefix=/home/hoge/ffmpeg/output --enable-gpl --enable-libx264 --enable-nonfree --extra-cflags=-I/home/hoge/ffmpeg/output/include --extra-ldflags=-L/home/hoge/ffmpeg/output/lib --extra-libs=-ldl
  libavutil      55. 28.100 / 55. 28.100
  libavcodec     57. 50.100 / 57. 50.100
  libavformat    57. 42.100 / 57. 42.100
  libavdevice    57.  0.102 / 57.  0.102
  libavfilter     6. 47.100 /  6. 47.100
  libswscale      4.  1.100 /  4.  1.100
  libswresample   2.  1.100 /  2.  1.100
  libpostproc    54.  0.100 / 54.  0.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

…省略

補足

・「ldd ffmpeg」で共有ライブラリの依存関係を確認する。

hoge@raspberrypi:~ $ ldd ffmpeg
        linux-vdso.so.1 (0x7ef77000)
        /usr/lib/arm-linux-gnueabihf/libarmmem.so (0x76f80000)
        libasound.so.2 => /usr/lib/arm-linux-gnueabihf/libasound.so.2 (0x76e93000)
        libm.so.6 => /lib/arm-linux-gnueabihf/libm.so.6 (0x76e18000)
        librt.so.1 => /lib/arm-linux-gnueabihf/librt.so.1 (0x76e01000)
        libdl.so.2 => /lib/arm-linux-gnueabihf/libdl.so.2 (0x76dee000)
        libpthread.so.0 => /lib/arm-linux-gnueabihf/libpthread.so.0 (0x76dc6000)
        libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0x76c84000)
        /lib/ld-linux-armhf.so.3 (0x54af0000)
hoge@raspberrypi:~ $

※上記にlibx264等がなければスタティックビルドに成功している。

参考(情報が古い):CompilationGuide/RaspberryPi – FFmpeg

FFmpegで作る動画共有サイト

FFmpegで作る動画共有サイト