動画エンコードするリソースが足りない。

時々、Backlog記法でブログを書けたらラクだと思い始めています。はい。

さて、時に、67GB、39時間もの動画をエンコードしたいと思いますよね?
実は自宅の大量の動画コレクションを持っているのですが、iPadで表示できない事が多々あります。

File Explorer(iTunes)
上記のアプリを使いって居ますが、どうやら独自でデコーダを実装しているようで、例えばマトリョシカ形式でflac音声が埋め込まれている場合などに、再生にバグが発生する場合があります。
自力でCIFSやDropboxに接続して、メディアを再生できる所は物凄いんですけどね…。

今回、とにかくこれら動画をiPadで観たいので、とにかくエンコードしました。

今回のソース

・アニメ版 70話 ・劇場版 2話 ・形式:マトリョシカ(H.264 + 5.1ch flac) ffprobeの結果はこちら。

    Stream #0:0: Video: h264 (High 10), yuv420p10le, 960x720, SAR 1:1 DAR 4:3, 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
    Stream #0:1(jpn): Audio: flac, 48000 Hz, 5.1(side), s16 (default)
      title           : 5.1 FLAC

Mac mini Late 2012では歯が立たず。

我が家のMacは、当時は速い方だったMac mini Late2012(Core-i5 2.7GHz 2C / 16GB / 512G SSD + 1TB HDD)です。

一旦、以下からFFmpegのバイナリを取得し、何回かパラメータの調整を行い、以下のようなパラメータとしました。

ffmpeg -i test.src -threads 0 -vcodec libx264 -q:v 31 -pass 1 -s 960x720 -aspect 4:3 -acodec aac -strict experimental -q:a 5 test.mp4
  • 4:3の720p HD動画
  • H264 最大クォリティで保存
  • AAC VBR 最大クォリティで保存
  • 最終的にMP4形式で保存

※本当はもっと細かくパラメ指定してますけど、おおよそこんな感じ。
※動画は-vcodec copyでも良かったかなーって思うけど、上記のアプリで表示が安定しなかったので、再エンコードしました。

OSX版のFFmpegは、以下からバイナリをダウンロードしてきました。
FFMPEG BINARY FOR MAC (http://ffmpegmac.net)

先のマシンで、論理4C使いきって15fps程度だったので、けっこう重たい処理をやってます。

とりあえずm4.4xlargeへ。

2時間かけてファイルを転送した後、いよいよ実装へ。

  • Ubuntu 14.04 (Community AMI)
  • FFmpeg 2.7.1

ファイル転送はt2.smallで、エンコードはm4.4xlargeと、インスタンス節約してます。
スポットインスタンスにすればもっと節約できますね。

標準のリポジトリからffmpeg入らなくなったんですね。ざんねーん。

以下のサイトを参照しました。

Ubuntu 14.04にffmpegをインストールしてWinFFに設定する( http://ubuntuapps.blog67.fc2.com/blog-entry-633.html )

ffmpegがコアを使い切れない。

01

さて、ffmpegはマルチスレッドに対応しているので、スレッド数の指定ができるのですが、これどうもエンコーダ・デコーダ依存のパラメータのようです。
(そりゃ、外部のライブラリの集合体ですからねぇ。。。)

どうやら、今回の場合、4スレッドで同度いいようにスレッドを使い切るようです。
しかし、最近のマシンには物足りませんよね。

結果として、ffmpegのバッチを3本並行で実行する事で、CPU利用率を80%程度まで使う事ができました。

00

また、メモリの利用状況はこんな感じです。

$ free -h
             total       used       free     shared    buffers     cached
Mem:           62G        62G       366M       368K        17M        61G
-/+ buffers/cache:       1.5G        61G
Swap:           0B         0B         0B

お金の話

実はそれほどお金つかってません。

$1.464 per On Demand Linux m4.4xlarge Instance Hour 3 Hrs   $4.39
$0.040 per On Demand Linux t2.small Instance Hour   4 Hrs   $0.16

$0.0 per GB - first 10 TB / month data transfer out beyond the global free tier (blended price)*    0.000002 GB $0.00
$0.000 per GB - data transfer in per month  0.000002 GB $0.00
$0.000 for 2000 Mbps per m4.4xlarge instance-hour (or partial hour) 3 Hrs   $0.00

$0.08 per 1 million I/O requests - Asia Pacific (Tokyo) 361,801 IOs $0.03

こんな感じで、AWSに70GB送りつけて、20GB帰ってきても、節約すればそんなにお金いかない事がわかりました。
1回500円なら、2日間Mac miniが使えないより全然安いかな、と。

元記事はこちら

m4.4xlargeで動画をガンガンにエンコードした話