自宅PCの一台が故障した為、サーバー機器丸々をその一台に回し、余った部品で組み上げました。CPUだけはi5-4670Kにグレードアップしましたが・・・。
その結果GTX650が無くなり素のマシンになりました。
今回色々と試した結果centos7への移行は断念することにしました。
理由は以下の通り。
1.最新OS上でintel media sdkの制約上ffmpegのh264_qsvがhaswellに対応しない
これは制約上仕方のない事なのかもしれないがせめて下位互換は残してほしかったです。
結果CentOS7に乗り換えてもメリットが生まれななく、枯れたCentOS6の方が扱いやすいという事になりました。
この調査及び制約で録画後のエンコードはlibx264に任せる事になりました。
しかしそのまま走らせてしまうと、CPU利用率が400%(コア数x100%)に張り付き、思った通り録画失敗が続きました。これではまずい。
そこでffmpegに制限をかける事にしました。かなり古い物ですがcpulimitを利用しました。 利用するまでのお仕事は以下の通り。
# yum install -y --enablerepo=epel cpulimit
そして
# su - chinachu $ cd chinachu/usr/bin $ vi encode.sh
中身はこんな感じ
#!/bin/sh
log=$1.txt
echo $2 | /home/chinachu/chinachu/usr/bin/jq '.' > $log
echo -----start encoding @$(date +%Y/%m/%d/%H:%M:%S)----- >> $log
start=$(date +%s)
echo $1 >> $log
cpulimit -l 100 -- /usr/local/bin/ffmpeg -y -i "$1" \
-vcodec libx264 -f mp4 \
-aspect 16:9 \
-vf yadif=1:-1:1,scale=720:-1 \
-acodec libfdk_aac \
-b:a 128k -afterburner 1 \
"$1.mp4" 2>&1 | grep "^[^f]" >> $log
end=$(date +%s)
diff=$(expr $end - $start)
echo about $(expr $diff / 60) min. >> $log
echo ---finish encoding @$(date +%Y/%m/%d/%H:%M:%S)--- >> $log
echo >> $log
exit 0
としました。h264_nvencからlibx264に変更したのと、yadifのパラメータを60fpsに変更しました。
フィルターを実写用にしたのも散見したのですが結局BOBの方がヌルヌルして見やすかったのでこうしました。
この方式でffmpegがCPU利用率が100付近で頭打ちになりますので動きに余裕ができます。録画も設定を変更してから失敗は無くなった様子です。変換にはかなり時間がかかりますが。
ちなみにi5-4670K+MEM8G+HDDで6分物のTSを約9分かけてゆっくりエンコードしているようです。
今度またGTX650以上のカードがあったらまたnvencに戻そうかと思いますがいつになることやら。

コメント