我が家の録画環境は「foltia ANIME LOCKER 4.5」が担っていますが、たまに激しくドロップフレームが発生することがあります。
毎週同じ番組で起きるわけでなく、しかも前後の番組は普通なのに1番組だけドロップするということは、前番組のMP4エンコードが重すぎてドロップが発生しているのでは?、と推測し、まずは状況を確認することに。
foltiaのドロップフレーム数は、「録画一覧」から番組名を選んで、「CAP」ボタンを押した先にある「CM検知」画面の中、という中々に分かりにくい場所にあるのですが、
MPEG2 drop情報
pid=0x0000, total= 10225, drop= 0, scrambling=0
pid=0x0031, total= 10112, drop=3909, scrambling=0
pid=0x0100, total= 15212, drop= 0, scrambling=0
pid=0x0101, total= 19550, drop=5905, scrambling=0
pid=0x0111, total= 9266583, drop=1891257, scrambling=0
pid=0x0112, total= 133655, drop=51777, scrambling=0
pid=0x0114, total= 1011, drop=394, scrambling=0
pid=0x0115, total= 1029, drop=388, scrambling=0
pid=0x1fff, total= 1, drop= 0, scrambling=0
これはまた豪快にドロップしていますね・・・。
以前エンコード時の負荷状況を確認したところ、CPU使用率が600%前後だったので、4コア8スレッドのXeon E3-1260LだとCPUを完全に使い切っている訳ではないにせよ、余裕がないのは間違いないので、MP4エンコードで使うスレッド数を制限するのが良さそうです。
ただ、foltiaのGUI上にはエンコード時のスレッド数設定などという項目が見当たらないので、今回はエンコード時に使っていると思われるスクリプトを直接書き換えるという荒業に出てみました。
怪しいのは /home/foltia/perl にある「ipodtranscode.pl」というファイルで、中身を確認するとffmpeg のオプションがそこかしこで「-threads 0」と自動設定なっていたので、全箇所「-threads 4」と明示的に4スレッドに制限してみたところ、400%前後で推移するようになったのでどうやら成功した模様。
とりあえずはこれで様子見しようかと思います。