昨日、NVENCに対応したUbuntuでのハードウェアエンコード環境ができたので、溜まったtsファイルをエンコードしていくことに。
PT2とPT3の複数実装で録画は並列でできるものの、GPUエンコードは並列処理できないと思われるので予約録画の流れでエンコードさせる仕組みは見直し、録画スクリプトはtsファイルを/mnt/ts_pool/10_recordedに移動させたところで終了とする。
yano@GT110b:~$ ll /mnt/ts_pool/10分ごとにcronで起動する周期タスク~/etc/cron.sh/encode_mp4.cronが/mnt/ts_pool/10_recordedから古い順に数本ずつピックアップして、エンコードできたのは/mnt/ts_pool/20_encodedに、エラーになったものは/mnt/ts_pool/19_encode_failedに移動させていく仕組みに。PIDFILEを使って重複起動しないようにするのを忘れずに。
total 76
drwxr-xr-x 6 yano family 97 Feb 3 22:00 ./
drwxr-xr-x 14 root root 4096 Dec 9 17:23 ../
drwxrwxrwx 2 yano family 49152 Feb 4 22:45 10_recorded/
drwxrwxrwx 2 yano family 4096 Feb 4 09:39 19_encode_failed/
drwxrwxrwx 2 yano family 12288 Feb 4 22:45 20_encoded/
drwxrwxrwx 2 yano family 16384 Feb 4 08:02 30_ts_files/
yano@GT110b:~$
yano@GT110b:~$ cat ~/etc/cron.sh/encode_mp4.cron
#!/bin/bash
PATH=/bin:/usr/bin:/sbin:/usr/sbin
NUM_FILES=5
EXT_TS=".ts"
PIDFILE=/home/yano/run/`basename $0`.pid
UUID=`id | sed 's/uid=\([0-9]*\)(.*/\1/'`;
[ $UUID -eq 0 ] && PIDFILE=/var/run/`basename $0`.pid;
if [ -e ${PIDFILE} ];
then
exit;
fi
echo $$ > ${PIDFILE}
trap "/bin/rm -f ${PIDFILE}; exit" 1 2 3 15
CONFIGFILE=/etc/default/epgrec
# source config info
[ -r ${CONFIGFILE} ] && . ${CONFIGFILE}
TS_FILES=`ls -1 ${TS_RECORDED}/*${EXT_TS} | head -${NUM_FILES}`
for f in ${TS_FILES};
do
/home/yano/bin/ts2mp4_nvidia.sh $f 2>&1 > /dev/null
if [ $? -eq 0 ];
then
chown ${OWNER} ${MP4DIR}/`basename $f ${EXT_TS}`.mp4;
mv $f ${TS_ENCODED};
else
mv $f ${TS_ENCODE_FAILED};
fi;
done
if [ -e ${PIDFILE} ];
then
rm -f ${PIDFILE};
fi
yano@GT110b:~$
【参照】
●www.nodoka.org http://www.nodoka.org/
┣録画サーバ構築 QSVエンコード Linux編 2016年5月27日
┗録画サーバ構築 NVENCエンコード Linux編 2016年6月15日
●FFmpeg https://ffmpeg.org/
┗CompilationGuide/Ubuntu
●Wikipedia http://ja.wikipedia.org/wiki/
┣LGA1150
┣Haswellマイクロアーキテクチャ
┣Broadwellマイクロアーキテクチャ
┣LGA1151
┗Skylakeマイクロアーキテクチャ