本記事では、現時点で最新のEPGStation v2およびMirakurun 3.5.0を使ってLinux&Docker&PX-W3U4で録画サーバを構築する手順を解説します。

おひさしぶりです
半年程前にも録画サーバの構築手順を記事にしましたが、ソフトウェアのバージョンが上がったことで手順に乖離がありましたので記事をアップデートしました。
私が普段利用するうえではもはや何も問題ないくらいソフトウェアの品質は安定しています。
Linuxで録画サーバを構築したい方、現行のEPGStationとMirakurunで構築したい方、TS抜きしたい方は、本記事を参考にしてください。

長い記事ですが、最後までお付き合いよろしくお願いします
Contents
サーバ環境
今回、私が構築したベースマシンはECS LIVA Z n4200です。

チューナーはPX-W3U4です。
その他サーバ周辺機器やソフトウェア構成は以下の通りです。
ハードウェア
- Linuxサーバ
- ECS LIVA Z(n4200)CPU n4200 (QSV/vaapiに対応)
- eMMC 64GB
- 拡張ストレージ SSD 120GB(録画領域。外付けHDDでも可)
- メモリ 16GB(4GB以上あれば安心です)
- ECS LIVA Z(n4200)CPU n4200 (QSV/vaapiに対応)
- 地デジ・BS/CSチューナー
- PLEX PX-W3U4
- 4番組同時録画(地デジ×2、BS/CS×2)が可能です(W3PE4や8番組同時録画可能なプレクス社のpx-w3q4でもOK)
- PLEX PX-W3U4
- B-cas対応 ICカードリーダー
- NTTコミュニケーションズ SCR3310-NTTCom
- LinuxだとPX-W3U4内臓のカードリーダーが使えないので別途カードリーダを準備します
- NTTコミュニケーションズ SCR3310-NTTCom
上記の不足するものがあれば、事前にご用意ください。

今回の手順は以下のテレビチューナー製品に対応しています。
<Plex>
・PX-Q3PE
・PX-W3PE
・PX-Q3U4
・PX-W3U4
<e-Better>
・DTV02-1T1S-U (実験的)

お好みの製品をご使用ください。
なお、本手順はPX-W3U4(USB接続タイプ)を前提としています。
サーバーはLinuxが導入できる機種であれば問題ありません。
ただし、私の経験上Raspberry pi 3B+だと性能的に動作が安定しませんでした(rpi4は未検証)。
以前Tinker board Sで録画サーバを構築しようとしましたが2番組以上の同時録画でノイズが出てしまいましたので、常時起動の録画サーバにする場合は、性能的に余裕を持たせた機種を使うことをオススメします。
未検証ですがRaspberry pi 4で構築できるという報告も多数あがっています。


私も次はラズパイで構築してみようかしら

ソフトウェア
- OS
- ubuntu 18.04 LTS
- raspbian等、Debian系OSなら同じ手順で実施できます
- CentOS等、Redhat系OSでも導入可能です(ドライバ導入手順は一部読み替えて実施する必要あり)
- ubuntu 18.04 LTS
- ミドルウェア
- Docker
- docker-compose
- git
- samba
- 必須ではないですが、あった方が便利です。
参考記事
sambaは録画システム構築に必須ではありませんが、Windowsのエクスプローラから参照できた方が便利かと思いますので、事前に入れておいた方が良いです。
dockerを使ったsambaの構築方法は以下の記事を参考にしてください。
sambaはKODIと連携する際にも便利です。
外出中にスマホから録画予約をしたい場合は以下の記事が参考になるかもしれません。
コメント
こもねさん
素早い対応ありがとうございました。
私のブログでも、こちらをリンクさせていただきます。
>simplelife0530さん
お待たせしてすみません。
こちらこそ、ご指摘いただいたおかげで記事にすることができました。
私の記事で良ければどなたでも自由にリンクを貼ってくださって結構です。
引き続きどうぞよろしくお願いいたします!
こもねさん
初めまして。録画サーバーを構築したいと思いこの記事に辿りつきました。
記事の通り進めているつもりですがEPGStationのビルドでつまってしまいました。相談などさせてもらってよろしいでしょうか?
どーぞ:)
当方、macにてターミナルで色々試したことはありますがOSとしてlinuxを使うのは初めてです。
今回、録画サーバーを実現したく、新たにPCを組んで取り組んでいます。
CPU: Intel Core i3 10100
マザーボード: ASRock H410M-HDV/M.2
OS: ubuntu-ja-20.04.1-desktop-amd64 (日本語リミックス)
新規にクリーンインストールしています。
完全にこちらの記事に従って構築を進めました。(“ubuntu 18.04 LTSにDockerとdocker-composeを簡単にインストールする方法”も行なっています。)
一点、途中、emacsが見つからなく、インストールを別途行なっています。
そんな感じでビルドまで来て実行したところ、エラーが出てうまく行きません。
以下、エラーの内容です。
npm WARN saveError ENOENT: no such file or directory, open ‘/app/package.json’
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN enoent ENOENT: no such file or directory, open ‘/app/package.json’
npm WARN app No description
npm WARN app No repository field.
npm WARN app No README data
npm WARN app No license field.
up to date in 0.655s
found 0 vulnerabilities
npm ERR! code ENOENT
npm ERR! syscall open
npm ERR! path /app/package.json
npm ERR! errno -2
npm ERR! enoent ENOENT: no such file or directory, open ‘/app/package.json’
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2021-03-15T12_27_46_251Z-debug.log
ERROR: Service ‘mirakurun’ failed to build: The command ‘/bin/sh -c apt-get update && apt-get upgrade -y && apt-get install -y –no-install-recommends build-essential && npm install && npm run build && npm install -g –unsafe-perm –production’ returned a non-zero code: 254
$
apt-utils, npm, node.jsもインストールしてみましたが同様の結果となります。
本当に何から何まで頼りきりで、質問の仕方もよくわかっておりませんが、何卒ご教示いただければと思います。
>yupさん
記事の手順の通りにしてうまく行かないということでしょうか?
エラーの内容を見ると /app/package.json が無いと怒られているのですが、gitリポジトリからダウンロードしたMirakurunを使用されていますか?
>こもねさん
ありがとうございます。
ほんとうにお恥ずかしいですが、Mirakurunをダウンロードするディレクトリが間違っていました。正しい場所にインストールし、今度は止まることなくプロンプトが返って来、無事ビルドは終了したと思います。
しかし、また詰まってしまいました。
EPGstationのURLを開こうとしても、「正常に接続できませんでした。」と接続できません。
-Firefoxにて開こうとしています。
-ルータ関係全く設定していません。
-ipアドレスはこのpcの192.168….のものを入れています。
本当に基礎的なことかもしれませんが、何か心当たりあればお願いします。
>yupさん
問題は解決しましたでしょうか?
Plex PX-MLT8PE(8ch チューナー)を使用して
本記事を参考にさせて頂き、デバイスに関わる部分の変更のみで
無事構築することができました。
ありがとうございました。
>つよぽんさん
嬉しいご報告ありがとうございます!
そのように言って頂けると、自分の記事がお役に立てたようで私も嬉しいです:)
本記事を参考にし、PX-Q3U4を使って録画システムを構築することができました。
ありがとうございます。
前回も本サイトを参考にDockerを使わない方法で構築していました。
rivarunを使って録画をしていたのですが、今回の記事での構築でもコマンドをrivarunを使って録画することができるのでしょうか。
>すたさん
この記事たお役に立てたようで何よりです。
rivarunはDockerで構築した場合はつかえません。
コンテナ内にインストールすれば使えると思います、が、、、rivarun必要ですか?
こもねさん、返信ありがとうございます。
使えないんですね…
現在、rivarunを使って24時間録画をしています。
Dockerでも同じことができたら他のマシンへの移植が楽になるのではないかと思い現在テストを行っていてこのような質問をさせていただきました。
Dockerを触るのが初めてなもので変な質問になってしまって申し訳ありません。
コンテナ内にインストールすれば使えるかも、ということなので作業してみます。
EPGStationでも時刻指定録画があるということを知ったのでこちらも併せて確認してみたいと思います。
コンテナの中に入ってインストールコマンドを叩いてみましたがエラーになってしまいました。何か根本的に間違っているような気がしています。
docker exec -i -t 649a237e4af0 /bin/bash
rivarunインストール
root@649a237e4af0:/app# npm install rivarun -g
root@649a237e4af0:/app# npm install -g npm
確認
root@649a237e4af0:/app# rivarun –list
Error: connect ENOENT /var/run/mirakurun.sock
EPGStationで時刻指定の録画できました。
設定等まだまだ不明な点が多いですがこちらを利用したほうが後々便利そうですね。
>すたさん
リコメントありがとうございます。
私がすたさんのrivarun活用法を理解していないので何とも言えませんが、EPGStation(MirakurunのAPI経由)で録画できるならその方がいいような気がします。
また、rivarunのインストールについて、想像でコメントしますが、
epgstationのコンテナにインストールしようとしていませんか?
Mirakurunのコンテナならうまく行きそうな気がしなくもないです。
docker exec -it mirakurun-3.5.0 npm install rivarun -g
取り急ぎ。
こもねさん、返信ありがとうございます。
(コメントに返信できなかったのでこちらで)
> epgstationのコンテナにインストールしようとしていませんか?
仰る通りでした。お恥ずかしい。
docker exec -it mirakurun-3.5.0 npm install rivarun -g
このコマンドでコンテナ内にインストールすることができ、ホストマシンから録画コマンドが使用可能となりました。
本当にありがとうございました。
>すたさん
どういたしまして、うまく行ってよかったです
差し支えなければすたさんのrivarun活用法を共有してもらえると嬉しいです
>こもねさん
24時間録画して好きな時に好きな番組を見るというような使い方をしています。
コマンドはこんな感じです。
docker exec mirakurun-3.5.0 rivarun –b25 –sid XXXX –ch GR/XX 86400 録画ファイル名
で、全く関係ないのですが2つのログファイルがコンテナ内に見るけられませんでした。これは別で設定しないと作成されないのでしょうか。
mirakurun.stderr.log
mirakurun.stdout.log
~$ docker exec -i -t mirakurun-3.5.0 bash
:/app# find / -name *mirakurun*
/run/mirakurun.sock
/app/bin/munin-plugins/mirakurun_status.js
>こもねさん
連投すみません、docker-composeでログファイル取得できました。
~/docker/docker-mirakurun-epgstation$ docker-compose logs | grep mirakurun-3.5.0
>すたさん
返信ありがとうございます。
rivarunで24時間録画してるんですね。
録画しっぱなしで良いなら、Mirakurunとチューナを分けてrecpt1を直に叩いても良さそうですね。
というか、それだと24時間の録画ファイルができませんか・・・?
EPGStationならキーワードを指定せず放送局だけ指定したルールを作れば、番組毎にファイルを分けて録画できそうです(未検証)。
私は録画番組が消化不良気味なので、録画番組を増やすとエラいことになりそうです。
> 連投すみません、docker-composeでログファイル取得できました。
> ~/docker/docker-mirakurun-epgstation$ docker-compose logs | grep mirakurun-3.5.0
docker-composeでログを見る場合は、docker-compose logs <サービス名> で見られますよ。
$docker-compose logs mirakurun
>こもねさん
いつもありがとうございます。
> 録画しっぱなしで良いなら、Mirakurunとチューナを分けてrecpt1を直に叩いても良さそうですね。
そう思って今試していますが、エラーが出てしまって録画ファイルを再生すると、映像が真っ暗で音が出ない状況になっています。
ワンセグ放送は映るのでデコードの問題なような気はしているのですが設定箇所がわからずつまずいてしまっています。
$ docker exec mirakurun-3.5.0 recpt1 –device /dev/px4video11 –sid 1024 –b25 27 30 /media/HDD2/TEST/TEST.m2ts
using device: /dev/px4video11
recpt1: unrecognized option ‘–b25’
pid = 4286
device = /dev/px4video11
C/N = 33.271662dB
Recording…
Available sid = 1024 1025 1408 65520
Chosen sid = 1024
Available PMT = 0x1f0 0x3f0 0x1fc8 0x1cf0
Recorded 30sec
カードリーダーへのアクセスできないかと思い、コンテナ内で以下コマンドを実行して確認しましたが問題なさそうです。
:/app# pcsc_scan
(略)
Japanese Chijou Digital B-CAS Card (pay TV)
> docker-composeでログを見る場合は、docker-compose logs <サービス名> で見られますよ。
> $docker-compose logs mirakurun
コマンドありがとうございます。
>すたさん
返信ありがとうございます。
おそらく、Mirakurunコンテナ内にarib25ライブラリ(libarib25)がインストールされていないのと、recpt1のb25のオプションが有効になっていないためだと思います。
以下の記事を参考にしてください。
https://komone-life.com/2020/05/06/how-to-install-epgstation-bcas/#libarib25
https://komone-life.com/2020/05/06/how-to-install-epgstation-bcas/#recpt1
>こもねさん
返信ありがとうございます。
こちらの記事を参考にコマンドが実行できるようになりました。
https://komone-life.com/2020/05/06/how-to-install-epgstation-bcas/#libarib25
https://komone-life.com/2020/05/06/how-to-install-epgstation-bcas/#recpt1
ありがとうございました。
EPGStation使いたい…
>すたさん
ご報告ありがとうございます。
うまくいってよかったです:)
参考にさせていただいております。
raspberry pi4 raspbianで手順通り実行し、
docker-compose pull && docker-compose build –no-cache && docker-compose up -d
Pulling mirakurun … done
Pulling mysql …
Pulling epgstation … done
ERROR: for mysql no matching manifest for unknown in the manifest list entries
ERROR: no matching manifest for unknown in the manifest list entries
と出ます。どうすればよろしいでしょうか?
>taroさん
mariadbのimageがラズパイに対応してなさそうですね。
私はラズパイ4を持っていないですが、
私だったら、docker-compose.ymlの40行目
image: mariadb:10.4
を
image: linuxserver/mariadb
に書き換えて試してみます
(ヨソのブログでは別のやり方をしているみたいですが)
試していただいて、結果を教えていただけないでしょうか?
お返事ありがとうございます。
書き換えてみたところ
+ mirakurun@3.5.0
added 1 package from 2 contributors in 6.333s
Removing intermediate container 501aeb632af0
—> 49f5dd86278b
Step 7/13 : FROM ${ARCH}node:14.15.4-buster-slim
ERROR: Service ‘mirakurun’ failed to build: Get https://registry-1.docker.io/v2/: net/http: request canceled (Client.Timeout exceeded while awaiting headers)
となって止まってしまいました
また別のところでエラーが出てるみたいですケド、
そのエラーは修正を戻したら無くなりますか?
Successfully built 14745eaebf31
Successfully tagged docker-mirakurun-epgstation_epgstation:latest
Creating network “docker-mirakurun-epgstation_default” with the default driver
Creating volume “docker-mirakurun-epgstation_mysql-db” with local driver
Pulling mysql (mariadb:10.4)…
10.4: Pulling from library/mariadb
ERROR: no matching manifest for unknown in the manifest list entries
エラーになります
↑
実行したコマンドくらい書きましょう
何をどうしたときのログなのか、ログの抜粋なのか全てなのか、何を知りたいのか、情報が少なすぎてサッパリわかりません・・
エラーの切り分けをして頂きたかったのですが、docker-compose.ymlを修正して同じコマンドを打っただけじゃないですよね?
imageとvolumeは削除していますでしょうか?
すみません
docker-compose.ymlを修正して同じコマンドを打っただけです
適当に試してみます。ありがとうございました。
お世話になります。メルカリでPX-Q3PEを売ってPX-Q3PE4を購入しました。貴サイトを100%コピーさせていただき簡単に構築出来ました。次はCMカットに挑戦しようとtobitti0
さのサイト「UbuntuのEPGStation_v2でCMカットエンコードする。」を参考して何度かやってみましたがこちらのサイトみたいに解説が親切でないのでうまくいかないのであきらめました。こもねさんの方で是非記事にしていただければありがたいと思います。
>龍山さん
おめでとうございます、この記事が役に立ててよかったです:)
記事の執筆依頼については大変ありがたいお言葉です。
是非ともご要望に応えたいのですが、現状プライベートが忙しくて時間が確保できないので今すぐの対応は難しいです。
大変心苦しいですが、余裕ができたときにまだ需要がありそうなら検討させて頂きますm_ _m
せっかくご依頼いただいたのに、ご期待に沿えず本当に申し訳ございません。