NVENC

Fire TV Stick 4K

先日Fire TV Stick 4K

Amazon Fire TV Stick 4K

Amazon Fire TV Stick 4Kより

一部のファイル再生でアプリが固まる問題だが、どうやらTMPGEnc Video Mastering WorksでNVENCかQSVのハードウェアエンコードを使ったファイルについて高確率(ほぼ100%)で発生する事が判明。

取り敢えずUbuntuでのNVENCエンコードについては問題無いのが救いで、問題のファイルでも「Amazon Fire TV Stick 4K」側の再生時ハードウェアデコードを無効化すれば「アプリが固まる」事は無いのだが、それはそれで問題がなんなのかよくわからない。

結局のところ、TMPGEnc Video Mastering Worksではx264一択という事になるので、既存のMP4ファイルもエンコードし直せばいいのだが、どれが件のハードウェアエンコードだったかわからないのがやっかいだ。

参照

Amazon開発者ポータル https://developer.amazon.com/ja/apps-and-games

Amazon.co.jp https://www.amazon.co.jp/

Wikipedia https://ja.wikipedia.org/wiki/

H77M-ITXデュアルGPU構成

WQHDモニタ328P6AUBREB/11の導入の流れでtsubameGEFORCE GTX 750 Ti OC Slim 2GBを載せた結果、Ivy BridgeXeon E3-1225 v2(8M Cache, 3.20 GHz)Intel Quick Sync Video塩漬け状態に。

NVENCもIntel Media SDK Hardwareも選択可能!

TMPGEnc Video Mastering Works 6より

せっかくMPEG2のHWエンコードができるようになったのに残念だな…と思いつつ、以前もグラフィックボードを差した状態でCPU内蔵GPUのQSVが使えないかと試みたものの、廉価版のH77チップセットではどちらか一方だけという事だったので諦めていたのだがH77M-ITXにRadeon HD 7750導入。さらにQSVエンコードも併用しちゃう!とかいう話を見つけたので、また試してみた。

まずはH77M-ITXのBIOSを最新の1.90に上げたあと、UEFI設定の"Advanced"→**“IGPU Multi-Monitor”**を「Enabled」にして、オンボードのHDMIにもDELL U2410を接続して起動したところ、すんなりデュアルモニタ構成で立ち上がった。

**“Primary Graphics Adapter”**を「PCI-Express」に設定したのは何となく無視されているような気がするが、

インテル® HD グラフィックス・ドライバーの最新版(15.33.46.4885)をインストールし直しして、TMPGEnc Video Mastering Works 6を起動したところ、無事に「NVENC」も「Intel Media SDK Hardware」も選択可能となった。肝心な「MPEG2のQSVエンコード」もOKだ。

一旦動いてしまえば、オンボードのHDMI接続を外してGTX 750 Ti単独にしても大丈夫そう。やった~。

参照

駄文置場 http://qeynos2525.blog.jp/

USBメモリー収集家のブログ https://ameblo.jp/iso5210/

Sakopc blog http://sakopc.myqnapcloud.com/

Mirillis https://mirillis.com/

日経 xTECH(クロステック) http://tech.nikkeibp.co.jp/

NVENC実戦配備

昨日、NVENCに対応したUbuntuでのハードウェアエンコード環境ができたので、溜まったtsファイルをエンコードしていくことに。

PT2とPT3の複数実装で録画は並列でできるものの、GPUエンコードは並列処理できないと思われるので予約録画の流れでエンコードさせる仕組みは見直し、録画スクリプトはtsファイルを/mnt/ts_pool/10_recordedに移動させたところで終了とする。

yano@GT110b:~$ ll /mnt/ts_pool/
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:~$

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を使って重複起動しないようにするのを忘れずに。

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/

UbuntuとNVENC

Ubuntuでのハードウェアエンコード環境構築作業は先月18日24日とGStreamer+VAAPIにトライしたもののまだ先が長そうだ。

とはいえGT110bにもひと月分の録画済みファイルが溜まってしまったので、気分転換も兼ねてCUDA改めNVENCを試してみることに。

まずはGT710なMSI GT710 1GD3H LPを突っ込んで、libcudaとnvidiaドライバをインストール。

yano@haswell:~$ sudo apt-get install libcuda1-367 nvidia-367 nvidia-367-dev

nvidiaドライバと喧嘩するらしいnouveauをblacklistに登録して再起動。 続いてCompilationGuide/Ubuntuを読みながら、ffmpegのインストール。と思ったが、気まぐれに"ffmpeg -encoders"を見たところ、“NVIDIA NVENC H.264 encoder"が有効になっている事に気付いた。

yano@haswell:~$ ~/bin/ffmpeg -encoders 2>&1 | grep NVIDIA
 V..... h264_nvenc           NVIDIA NVENC H.264 encoder (codec h264)
 V..... nvenc                NVIDIA NVENC H.264 encoder (codec h264)
 V..... nvenc_h264           NVIDIA NVENC H.264 encoder (codec h264)
 V..... nvenc_hevc           NVIDIA NVENC hevc encoder (codec hevc)
 V..... hevc_nvenc           NVIDIA NVENC hevc encoder (codec hevc)
yano@haswell:~$

ダメ元で

yano@haswell:~$ ~/bin/ffmpeg -i input.ts -vcodec h264_nvenc ouput.mkv
yano@haswell:~$

てな感じで動かしたところ、あっさりエンコードできたっぽい。まだチューニングの余地はあるものの