録画した.tsファイルをiPhone用動画に変換するときは、以前書いたBonTsDemuxを使っています。
これと連携するFFmpegをどうにか新しくしたら、より速くなるのでは?と思って過去何度か入れ替えを試しました。でもエラーですぐエンコードが終わってしまい途方に暮れていました。そこで調べてみると条件があることが判明。
結論:
FFmpegはlibfaacを含めてビルドされた古いVersionが必要
iOSデバイス用動画ではAACというがオーディオコーデックが使われます。それを扱うにはlibfaacというライブラリを含めてFFFFmpegをビルド(生成)する必要がありますが、ある時期からlibfaacを含めた状態で配布する事が禁止されました。その為、今各所で公開されている新しいFFmpegには入っていない=エラーになると。
なるほど納得。
それをふまえて、FFmpegをVersionUpするには3つの手段を考えました。
・新しいaacコーデックを使う
vo-aacencのコンパイル&インストールによると、多少機能は劣るものの別のフリーAACエンコーダを含めてあるそうです。このビルドでならAACがエンコードに使えるみたい。実際core2最適化版を使い、変換パラメータを”-acodec libvo_aacenc”にしたら無事エンコードできました。
ただ公開者曰く、内蔵AACコーデックは音質的にlibfaacに劣るとの事。
・含まれている古いFFmpegを使う
FFmpeg rev.18607までであれば、libfaacを内包したバージョンを配布できるようです。ダウンロードはFFmpeg rev.18607 ダウンロードにて。→(2013/09/04追記)古くてもダメなようで配布中止されていました。
・自分でリビルドする
配布はできなくとも、libfaac単体でダウンロードする事はまだ可能です。これに最新のFFmpegのSourceを組み合わせてリビルドすれば・・・。Cygwinとか結構手間な様なので、この点は見送り。
結局libfaacが使える一番最後の最適化版FFmpegを使うのが一番無難かなぁ、という結論に達しました。まぁ改めてCore2最適化版の速度を測ってみたのですが…正直誤差の範囲しか変わらなかったorz
それよりも今回の課程でパラメータを見直した効果のほうが効果を感じました。実コア数を指定するより、-threads 0とした方が最大限多くのコアを使ってエンコードしてくれる様です。
最後に今のcap_sts_sea.ini
X264_HIGH_WXGA =-f mp4 -threads 0 -vcodec libx264 -vpre "./libx264-hq.ffpreset" -aspect 16:9 -s 1440x1080 -b 1200000 -acodec libfaac -ar 48000 -ab 96000 -y X264_HIGH_WXGA_EXT =avi iPhone =-s 432x320 -threads 0 -aspect 16:9 -vcodec libx264 -b 768k -crf 23.0 -level 30 -qmin 10 -acodec libfaac -ab 128k -ac 2 -ar 48000 -f mp4 -r 29.97 -y iPhone_EXT =mp4 iPad =-s 1024x758 -aspect 16:9 -threads 0 -vcodec libx264 -b 2000k -crf 23.0 -level 30 -qmin 10 -acodec libfaac -ab 128k -ac 2 -ar 48000 -f mp4 -r 29.97 -y iPad_EXT =mp4
One thought on “0”