EPGSTationで使える便利Tips

EPGStation
スポンサーリンク

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

前回の記事は↓

2018年9月最新!ネイティブWindows版Chianchu的存在「EPGStation」導入方法!
今回はスマホやガジェット関連ではなく久々の録画サーバー関連のお話です。 2017年10月15日に公開した「ネイティブWindows版Chianchu的存在の「EPGStation」を使ってみた。」から、かれこれ1年が経とうとしている今...

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アドレス確認】
あなたのアクセスしているIPアドレス情報などをENVとJavaScriptで取得し表示します。あなたのIPアドレスからポート疎通・ping疎通・DNS索引・WHOIS情報も取得できます。

にアクセスし、IPアドレスを確認します。
次にルーター及びWindowsのファイヤーウォールの8888ポートをあけておきます。
これで外部から
http://118.240.XXX.XXX:8888
と入力することでローカルと全く同じにアクセスすることができるようになります。
しかし、これでは問題が2点残ります。

  1. 誰でもアクセスできるようになってしまう
    知らない人が勝手に録画予約できるようになるのは色々まずいですよね。
    先述のパスワードかけておきましょう。
  2. IPアドレスが覚えづらい

「2.」の解決方法としては

無料ダイナミックDNS(DDNS)サービス - ieServer.Net
家サーバー・プロジェクトでは、自宅でインターネットサーバーを動かす皆さんを支援する為に、ダイナミックDNS(DDNS)を無料提供します。提供ドメインは dip.jp, jpn.ph, fam.cx, myhome.cx, moe.hm, org.hmの6種類。

を使ってDDNSをする方法があります。ここにグローバルIPアドレスを登録すれば、

http://hogehoge.dip.jp:8888

といった風に覚えやすいURLでアクセスできます。

コメント