planet-green.com

気の向くままに。» 雑記ブログ😬

ffmpegのインストール及びavconvとの比較 (追記あり)

私が開発してるサービスで動画のエンコードが必要になった時の作業メモです。
ちなみにサーバー環境は Linux 64Bit(Ubuntu 12.04.3 LTS)、さくらサーバーのVPS。
(※Ubuntu16での変更点は追記に記載してます。)

ubuntuにパッケージで用意されているのはffmpegから派生したavconvだったので、当初はパッケージ版のavconv(v0.8.9)をインストールして動画をコンコードするプログラムを書いていました。
といいますか、ubuntuで apt-get install ffmpeg を実行するとffmpegではなくavconvがインストールされます。

ところが、いくつかのタイプの動画をテストでエンコードしてみてわかりましたが、このパッケージ版には不具合があります。
QuickTimeでエンコードされたmovファイル(動画コーディックはmp4)を再エンコードしようとすると Floating point exception というエラーが出て止まってしまいます。

既にプログラムはavconv用に書いていたので、気を取り直してソースから最新版のavconv(v0.9.10)をビルドしてみました。
すると、先ほどのmovファイルの再エンコードではエラーは出なくなりましたが、今度は別のwmvファイルを再エンコードしようとすると、

Application provided invalid, non monotonically increasing dts to muxer in stream 1: 13568 >= 13024
av_interleaved_write_frame(): Invalid argument

というエラーが出て止まります。

v0.8.9のソースからビルドすると、上記2つの動画は正常にエンコード出来るようになりましたが、古いバージョンを使うというのは気持ち的にあまり嬉しくありません。
そこでavconvは諦め、本家ffmpegに回帰することにしました。

ソースから ffmpeg v8.90 + libx264 + libvpx + FDK-AAC をビルドして、上記の二つの動画も問題なくエンコードできる事を確認。
オプションの挙動がavconvと若干異なっているのでプログラム側を微調整。

avconvは -movflags faststart に対応してないようでqt-faststartを後から実行する必要がありましたが、ffmpegではオプション一発で済むので楽ちんです。
また、動画フィルターとサイズ指定オプションの実行される順番なども異なってるようです。

以下、ffmpegをインストールした時の作業メモ。

【yasm】
ubuntuのyasmが1.1系でx264のビルドには1.2系が必要なので、先にインストール。
http://yasm.tortall.net/Download.html

./configure
make
make install

【FDK-AAC】
http://sourceforge.net/projects/opencore-amr/files/fdk-aac/

tar xzvf fdk-aac-0.1.*.tar.gz
cd fdk-aac-0.1.*
./configure --prefix=/usr/local
make
make install-strip

もし、 ./libtool: line 1125: g++: command not found の等エラーが出たら
apt-get install g++ でg++をインストール。

【libx264】
http://www.videolan.org/developers/x264.html

git clone git://git.videolan.org/x264
cd x264
./configure --prefix=/usr/local --enable-shared --enable-pic --extra-cflags=-fPIC --extra-ldflags=-fPIC --extra-rcflags=-fPIC --enable-strip
make
make install

【libvpx(WebM VP8/VP9 Codec SDK)】

git clone --depth 1 http://git.chromium.org/webm/libvpx.git (※下に追記あり)
cd libvpx
./configure --prefix=/usr/local --disable-examples
make
make install
ldconfig

【ffmpeg】

git clone git://source.ffmpeg.org/ffmpeg.git
cd ffmpeg

./configure \
--prefix=/usr/local \
--libdir=/usr/local \
--shlibdir=/usr/local \
--incdir=/usr/local \
--mandir=/usr/local \
--arch=x86_64 \
--disable-debug \
--extra-cflags="-s -O3 -mtune=native -march=native" \
--enable-gpl \
--enable-nonfree \
--enable-libfdk-aac \
--enable-libvpx \
--enable-libx264
make
make install
ldconfig
  • 結局のことろ、本家公式サイトが一番参考になりました。
    https://trac.ffmpeg.org/wiki/UbuntuCompilationGuide
  • AACエンコーダーはNeroAACCodecが最も音質がいいらしいですが、ffmpegへは組み込めず外部プログラムを呼び出す形になるため、次点のFDK-AACでいいかなと。

#追記 2016/10/13

Ubuntu 16.04 LTS にインストールしてみました。
基本的には上記のままで大丈夫でした。
yasm は1.3系がパッケージに含まれているのでapt-getでいけます。

apt-get install yasm

libvpxのレポジトリが移転してました。

git clone https://chromium.googlesource.com/webm/libvpx

FDK-AACの高音質が欲しくてソースからビルドしてみましたが、そこまでこだわりが無ければ、Ubuntu16の標準パッケージで全然問題ないかも・・・。

次へ 投稿

前へ 投稿

返信する

* 画像に書かれている英数字を入力してください。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

© 2024 planet-green.com

テーマの著者 Anders Norén


planet-green.com