サイドコンテンツ 【メイン】

推し:加藤安那

加藤安那 (ユメオイ少女)

Twitter: @_hana_celeb_

サイドコンテンツ 【サブ】

ブログ エントリー

  • Raspberry Pi 2 B で ffmpeg で MPEG4 ハードウェアエンコードを試す (失敗でした)

    -

    Raspberry Pi 2 B


    OS には OSMC を使用しているため、raspbian で動かしてる環境とは少々違っています。
    OSMC はメディアプレイヤーなので開発に関わるようなものなどは元々入っていないため、それらの導入作業も含まれています。


    試行錯誤中のメモをちょっと訂正しただけなので見辛いです。

    基本他サイトのコピペ+修正です。


    mkdir ~/ffmpeg
    mkdir ~/ffmpeg/build
    mkdir ~/ffmpeg/src

    sudo apt-get update

    sudo apt-get install -y autoconf automake build-essential libass-dev libfreetype6-dev libsdl1.2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb-shm0-dev libxcb-xfixes0-dev libxcb1-dev pkg-config texinfo zlib1g-dev

    sudo apt-get install git


    # raspberry pi userland ライブラリ (OSMC の人のみ実行)
    cd ~/ffmpeg
    mkdir raspberrypi
    cd raspberrypi
    git clone --depth 1 https://github.com/raspberrypi/userland.git
    cd userland
    ./buildme


    # motion-mmal 用
    # たぶんカメラ関係なので使わなければ必要無いかも
    sudo apt-get install -y libavcodec-dev libavcodec56 libavformat-dev libavformat56 libavutil-dev libavutil54 libc6-dev libjpeg-dev libmysqlclient-dev libmysqlclient18 libpq-dev libpq5
    sudo apt-get install motion
    sudo apt-get remove motion
    #これはたぶん必要無い
    #sudo apt-get install libplayer-dev libplayer2


    # ffplay コンパイル用 (エラー)
    sudo apt-get install libsdl2-dev libsdl2-image-dev libsdl2-ttf-dev libsdl2-mixer-dev
    # make install の時にエラーとなる。 エラー内容は以下の通り
    # strip:ffplay: File format not recognized
    # Makefile:127: recipe for target 'ffplay' failed
    # make: *** [ffplay] Error 1

    sudo apt-get -y install yasm cmake mercurial cmake-curses-gui

    # libmp3lame
    sudo apt-get -y install libmp3lame-dev

    # libopus
    sudo apt-get -y install libopus-dev

    # x264
    sudo apt-get -y install libx264-dev

    # x265
    cd ~/ffmpeg/src
    hg clone https://bitbucket.org/multicoreware/x265
    cd ~/ffmpeg/src/x265/build/arm-linux
    chmod +x make-Makefiles.bash
    ./make-Makefiles.bash
    # GUI が立ち上がるので [c] を押して処理が終わったら続けて [g] を押す。
    make
    make install


    # libfdk-aac
    cd ~/ffmpeg/src
    wget -O fdk-aac.tar.gz https://github.com/mstorsjo/fdk-aac/tarball/master
    tar xzvf fdk-aac.tar.gz
    cd mstorsjo-fdk-aac*
    autoreconf -fiv
    ./configure --prefix="$HOME/ffmpeg/build" --disable-shared
    make
    make install
    #make distclean


    # libvpx
    cd ~/ffmpeg/src

    #wget https://storage.googleapis.com/downloads.webmproject.org/releases/webm/libvpx-1.6.1.tar.bz2
    #tar xjvf libvpx-1.6.1.tar.bz2
    #cd libvpx-1.6.1

    mkdir libvpx
    cd libvpx
    wget -O libvpx.tar.gz https://chromium.googlesource.com/webm/libvpx/+archive/master.tar.gz
    tar xzvf libvpx.tar.gz

    PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg/build" --disable-examples --disable-unit-tests
    PATH="$HOME/bin:$PATH" make
    make install
    make clean
    # なんでここだけ 「PATH="$HOME/bin:$PATH"」 が必要なんでしょう?

    # fixed motion-mmal
    # これは別にダウンロードしなくても OK
    cd ~/ffmpeg/src
    mkdir motion-mmal-fix
    cd motion-mmal-fix
    wget https://www.dropbox.com/s/6ruqgv1h65zufr6/motion-mmal-lowflyerUK-20151114.tar.gz
    tar zxvf motion-mmal-lowflyerUK-20151114.tar.gz
    ./motion -c motion-mmalcam-both.conf


    # ffmpeg
    cd ~/ffmpeg/src
    wget http://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2
    tar xjvf ffmpeg-snapshot.tar.bz2
    cd ffmpeg
    ./configure --pkg-config-flags="--static" --extra-cflags="-I$HOME/ffmpeg/build/include" --extra-ldflags="-L$HOME/ffmpeg/build/lib" --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-nonfree --enable-libx265 --enable-omx-rpi --enable-omx --enable-mmal
    make -j4
    # make はうちでは 50 分かかりました
    sudo make install
    sudo make distclean
    hash -r



    sudo nano /etc/ld.so.conf

    # 最後の行に以下の 1 行を追加

    /usr/local/lib


    #ライブラリ更新
    sudo ldconfig



    # ffmpeg では h264_omx が止まってしまうので libav で試す

    mkdir libav
    cd libav
    git clone git://github.com/libav/libav
    #./configure --prefix="$HOME/ffmpeg/build" --enable-gpl --enable-nonfree --enable-libfdk-aac --enable-libfaac --enable-libx264 --enable-omx-rpi --enable-mmal
    # どうしても libfdk-aac が見つからないと言われるので、とりあえず libfdk-aac は諦める
    ./configure --prefix="$HOME/ffmpeg/build" --enable-gpl --enable-nonfree --enable-libfaac --enable-libx264 --enable-omx-rpi --enable-mmal
    make -j4


    # h264_omx があるか確認する。
    ./avconv -codecs | grep 264

    # エンコードテスト
    ./avconv -y -i test.ts -c:v h264_omx -c:a aac -b:v 6M -b:a 160k test_h264_omx.mp4


    // 試行錯誤はここまで

    結果、avconv も ffmpeg も Raspberry Pi 2 B ではエンコード途中で止まる。
    映像 6Mbps だと 180 フレームあたりで、3Mbps だと 2600 フレームあたりで止まる。 SD カード上でもネットワーク上でも変わらず。

    ちなみに 3Mbps だと 27fps、6Mbps だと 21fps ほどでエンコード出来てる。 速い。 きっちり動かないのが残念。

    RaspberryPi 3 あたりで試してみたい。