以前のEPGSTationの記事で予告したとおりTwitterで教えていただいた便利Tipsをご紹介します。
前回の記事は↓

EPGSTationで使える便利Tips
今回紹介するTipsはEPGStationがWindows上で動作していること前提としているため、同様の手順を踏んでもLinuxでは正しく動かない場合があります。
エンコードの選択肢にQSV追加する方法
EPGStationでは通常CPUを使ったエンコード機能しか利用できず、PCにかなりの負荷を書けてしまします。ハードウェアエンコードを利用すれば画質が犠牲になるもののQSVの高速かつ安定した動作のエンコードが可能になります。
"encode": [ { "name": "H264", "cmd": "C:\\PROGRA~1\\nodejs\\node.exe C:\\EPGStation\\config\\enc.js main", "suffix": ".mp4", "default": true }, { "name": "H264-sub", "cmd": "C:\\PROGRA~1\\nodejs\\node.exe C:\\EPGStation\\config\\enc.js sub", "suffix": "-sub.mp4" } ]
本来は「地デジの音声ストリームの正副音声どちらを残すか」の選択肢なのですが、ここに追記することでエンコード選択肢を増やすことができます。
"encode": [ { "name": "H264", "cmd": "C:\\PROGRA~1\\nodejs\\node.exe C:\\EPGStation\\config\\enc.js qsv", "suffix": ".mp4", "default": true }, { "name": "H264-sub", "cmd": "C:\\PROGRA~1\\nodejs\\node.exe C:\\EPGStation\\config\\enc.js sub", "suffix": "-sub.mp4" }, { "name": "ANIMA", "cmd": "C:\\PROGRA~1\\nodejs\\node.exe C:\\EPGStation\\config\\enc.js qsv", "suffix": "-a.mp4" }, { "name": "CINEMA", "cmd": "C:\\PROGRA~1\\nodejs\\node.exe C:\\EPGStation\\config\\enc.js cinema", "suffix": "-c.mp4" }, { "name": "DRAMA", "cmd": "C:\\PROGRA~1\\nodejs\\node.exe C:\\EPGStation\\config\\enc.js drama", "suffix": "-d.mp4" } ]
と現行のSUBの後ろにカンマを付け、追記することでEPGstationでの選択肢が追加されます。
追記する構成としては
”name”:"EPGstation上で表示したい名前"
"cmd": "C:\\PROGRA~1\\nodejs\\node.exe C:\\EPGStation\\config\\enc.js 適当な識別子"
"suffix": ".mp4"
となります。suffixがないと録画後バッチ扱いになりエンコ出来ないので注意が必要です。
これでconfig.jsonからenc.jsへ<適当な識別子>というフラグが行きます。次はenc.js側にその識別子に基づいた処理を追記します。
enc.jsには<適当な識別子>が送られています。これを基に、エンコーダに渡す文字列を変えていきます。今回は”qsv”としました。
そして、これまで
let mode = 'main'; if(process.argv.length >= 3 && (process.argv[2] === 'main' || process.argv[2] === 'sub')) { mode = process.argv[2]; }
となっていたと思いますが、ここに
let mode = 'main'; if(process.argv.length >= 3 && (process.argv[2] === 'main' || process.argv[2] === 'sub' || process.argv[2] === 'qsv')) { mode = process.argv[2]; }
と識別子を追記します。これで、変数modeに"qsv"が入りました。
次に
let args; if(videoHeight > 720) { args = ['-dual_mono_mode', mode, '-i', input, '-vf', 'yadif=0:-1:1', '-preset', 'veryfast', '-aspect', '16:9', '-c:v', 'libx264', '-crf', '23', '-f', 'mp4', '-s', '1280x720', '-c:a', 'aac', '-ar', '48000', '-ab', '192k', '-ac', '2', output]; } else { args = ['-dual_mono_mode', mode, '-i', input, '-vf', 'yadif=0:-1:1', '-preset', 'veryfast', '-aspect', '16:9', '-c:v', 'libx264', '-crf', '23', '-f', 'mp4', '-c:a', 'aac', '-ar', '48000', '-ab', '192k', '-ac', '2', output]; }
となっていたところに変数modeに基づいた処理を入れます。
let args;
if(mode == 'qsv'){
<追加したい処理>
}
}else if(videoHeight > 720) {
args = ['-dual_mono_mode', mode, '-i', input, '-vf', 'yadif=0:-1:1', '-preset', 'veryfast', '-aspect', '16:9', '-c:v', 'libx264', '-crf', '23', '-f', 'mp4', '-s', '1280x720', '-c:a', 'aac', '-ar', '48000', '-ab', '192k', '-ac', '2', output];
} else {
args = ['-dual_mono_mode', mode, '-i', input, '-vf', 'yadif=0:-1:1', '-preset', 'veryfast', '-aspect', '16:9', '-c:v', 'libx264', '-crf', '23', '-f', 'mp4','-crf', '23', '-f', 'mp4', '-c:a', 'aac', '-ar', '48000', '-ab', '192k', '-ac', '2', output];
}
これでEPGstation上の選択肢によって処理に分岐ができるようになります。
ffmpegのQSV設定
今回はqsvで720/24pにテレシネ変換を行います。メリットはファイルサイズが減ることで、単なる解像度及び周波数変換を行うことで
(1280×720×24)÷(1920×1080×60÷2)≒0.36倍
になります。実際にはmpeg2→h264への変換では圧縮率が2倍とされているので、0.2倍位のビットレートを目指します。
※どのみちアニメは720/24p製作らしいですし……
具体的には'-c:v'に'h264_qsv'を指定することでqsvでのエンコード、'pullup', '-r', '24'でテレシネ変換、 その他エンコ手法等、をそれぞれ指定します。自分は
if(videoHeight > 720) {
args = ['-i', input, '-global_quality', '23', '-c:v', 'h264_qsv', '-s', '1280x720', '-vf', 'pullup', '-r', '24','-c:a', 'aac', '-ar', '48000', '-ab', '192k', '-ac', '2', output];
} else {
args = ['-i', input, '-global_quality', '23', '-c:v', 'h264_qsv', '-vf', 'pullup', '-r', '24', '-c:a', 'aac', '-ar', '48000', '-ab', '192k', '-ac', '2', output];
}
としています。 '-global_quality', '23'としつつ '-lookahead','0'を付けないことでLA-ICQ、 先行探索固定品質モード’(Haswell以降対応)でエンコードしています。
※エンコード速度を上げるためと、元々音声は大した大きさではないので '-c:a', 'copy'としたくなるかもしれません(音声はエンコせずそのまま使う設定)
これだとNHK(総合、教育、BS1、BSPremium)を除く民放と無料BSチャンネルをエンコードしたmp4をブラウザ上で再生した際に音声が出なくなります。
まとめ
- エンコードの選択肢追加
- config.jsonの”encode”に選択肢となる情報を追記
- enc.jsに識別子に応じた処理を追記
- QSVエンコード
- enc.jsにてffmpegに与えるコマンドを編集となります。
接続時にユーザー名とパスワードを要求する方法
これはオフィシャルにあるのですが、ユーザー名aaa、パスワードをbbbにする場合。
config.jsonに
"basicAuth" : {
"user":"aaa",
"password" : "bbb"
},
と追記するだけです。
但しBASIC認証はパスワードを平文で通信するのでそこまで強固なパスワードではない点に注意です。
外部のインターネットから接続し、録画予約及び視聴する方法(非推奨)
にアクセスし、IPアドレスを確認します。
次にルーター及びWindowsのファイヤーウォールの8888ポートをあけておきます。
これで外部から
http://118.240.XXX.XXX:8888
と入力することでローカルと全く同じにアクセスすることができるようになります。
しかし、これでは問題が2点残ります。
- 誰でもアクセスできるようになってしまう
知らない人が勝手に録画予約できるようになるのは色々まずいですよね。
先述のパスワードかけておきましょう。 - IPアドレスが覚えづらい
「2.」の解決方法としては
を使ってDDNSをする方法があります。ここにグローバルIPアドレスを登録すれば、
http://hogehoge.dip.jp:8888
といった風に覚えやすいURLでアクセスできます。
コメント