前回の記事では Ubuntu 26.04 + PT2 + Mirakurun(Docker)で地デジ 31 サービスの EPG 検出まで完了しました。今回はその続きとして、B-CAS デスクランブルの設定、EPGStation v2 の構築、チューナー増設(PT3)、そして Amatsukaze と連携した自動エンコードの仕組みについてまとめます。
B-CAS カードによるデスクランブル
地デジ(ISDB-T)の映像はスクランブルがかかっているため、B-CAS カードで解除する必要があります。Mirakurun の Docker コンテナに b25 ライブラリと pcscd(スマートカードデーモン)を組み込んだカスタムイメージを作成して対応しました。
カスタム Dockerfile
FROM chinachu/mirakurun:latest
RUN apt-get update && apt-get install -y pcscd pcsc-tools libpcsclite-dev build-essential git cmake && rm -rf /var/lib/apt/lists/*
# libarib25 のビルドとインストール
RUN git clone https://github.com/stz2012/libarib25.git && cd libarib25 && cmake . && make && make install && ldconfig && cd / && rm -rf libarib25
コンテナ起動スクリプト(/start.sh)で pcscd --foreground & を実行してからMirakurun を起動します。B-CAS カードが正常に認識されると、Mirakurun のチューナー状態で Clear 率が 100% になります。
ISDB-T チャンネル設定の確認(channels.yml)
Mirakurun は channels.yml(またはデフォルトのチャンネルリスト)を使ってチューナーに物理チャンネル番号を指定します。既成の設定ファイルをそのまま使った場合、地域によって実際の周波数と食い違っていることがあります。
シグナルレベルが 0 dB のまま変わらない場合は、チャンネル設定の誤りを疑いましょう。以下のコマンドで受信確認できます。
# チューナー受信確認(シグナルが 0 なら周波数が合っていない)
dvbv5-zap -a 0 -c /etc/mirakurun/isdb-t-channels.conf <チャンネル名> -P -o - -s
ISDB-T の物理チャンネル番号は地域によって異なります。総務省の「放送エリア情報」や地域の周波数表を参照して、channels.yml に正しい番号を設定してください。
EPGStation v2 のセットアップ
録画スケジュール管理には EPGStation v2 を使います。Mirakurun と同じく Docker Compose で起動します。
services:
epgstation:
image: l3tnun/epgstation:latest
container_name: epgstation
network_mode: host
volumes:
- ./config:/app/config
- /mnt/recordings:/recordings
restart: unless-stopped
録画用ストレージの追加マウント
録画ファイル専用の HDD を ext4 でフォーマットして永続マウントします。
# フォーマット
sudo mkfs.ext4 /dev/sdX
# マウントポイント作成
sudo mkdir -p /mnt/recordings
# UUID で /etc/fstab に登録(nofail でディスク不在でも起動可能)
UUID=$(sudo blkid /dev/sdX -s UUID -o value)
echo "UUID=$UUID /mnt/recordings ext4 defaults,nofail 0 2" | sudo tee -a /etc/fstab
sudo mount -a
PT3 チューナーの追加
PT3(PCI Express 接続)も earth_pt3 ドライバーが Ubuntu 26.04 のカーネルに組み込まれており、差すだけで認識します。
PT2 + PT3 混在時の adapter 番号に注意
PT2(PCI)と PT3(PCIe)を同時に挿すと、PCI バスのプローブ順序によって adapter 番号がインターリーブして割り当てられます。連番にはなりません。起動後に実際の番号を確認してから tuners.yml に反映させる必要があります。
# adapter 番号の確認
ls /dev/dvb/
# dmesg でドライバー認識順を確認
dmesg | grep -E "pt[23]|dvb"
確認した番号を Mirakurun の tuners.yml に反映します。チューナー種別(GR / BS+CS)は PT2・PT3 の仕様から判断します(例: PT2 は 地デジ×2 + 衛星×2、PT3 も同様)。
EPGStation → Amatsukaze 連携(録画後の自動エンコード)
録画完了後に自動でエンコードを開始するため、EPGStation の「録画後スクリプト」機能を使います。
全体の流れ
録画完了(EPGStation)
→ 録画後スクリプト(Linux)
→ SSH で Windows の PowerShell スクリプトを呼び出し
→ AmatsukazeAddTask.exe でエンコードキューに追加
→ エンコード完了 → NAS 出力先フォルダへ保存
Linux(録画サーバー)から Windows(Amatsukazeサーバー)へ SSH の公開鍵認証を設定し、PowerShell スクリプトをキックする形にします。
#!/bin/bash
# EPGStation 録画後スクリプト(例)
# 録画ファイルのパスが $1 に渡される
TSFILE="$1"
BASENAME=$(basename "$TSFILE")
# Windows 側のパスに変換(録画サーバーの TS 共有 or SMB 経由)
WINPATH="D:\ts\${BASENAME}"
# SSH 経由で Amatsukaze にキュー追加
ssh Administrator@amatsukaze-server "powershell -File D:\Amatsukaze\add_to_queue.ps1 '${WINPATH}'"
エンコードプロファイルのフレームレート設定(24fps 化)
Amatsukaze でアニメを 24fps にエンコードする際にハマったポイントです。
症状: エンコード後が 19fps になる
FilterSetting で Yadif(CFR24)を設定しつつ、エンコーダーオプションに --vpp-afs preset=anime,24fps=true を加えると二重に 24fps 化処理が走ります。
- Yadif(CFR24): 29.97i → 24p に変換(約 37,000 フレーム)
- AFS(force24): さらにその 24p 映像から 24/30 ≈ 80% にフレームを間引く
- 結果: 24 × 0.8 ≈ 19.2fps になる
解決策: エンコーダーオプションから AFS を削除
VCEEncC / NVEncC の追加オプションから AFS 関連をすべて削除します。
<!-- アニメ用プロファイル(Amatsukaze の .profile XML)-->
<NVEncOption></NVEncOption> <!-- --vpp-afs を削除 -->
FilterSetting は以下の通りにして Yadif + CFR24 のみで変換を完結させます。
DeinterlaceAlgorithm: Yadif
YadifFps: CFR24
AutoVfr30F: false # VFR 化を無効化
AutoVfr60F: false
これで出力は正しく 23.976fps(24000/1001)になります。
注意: プロファイルファイルを直接編集した場合、Amatsukaze Server が設定をメモリにキャッシュしているため、サーバーを再起動しないと変更が反映されません。
SCRename による自動リネーム(しょぼいカレンダー連携)
エンコード後のファイルを「作品名 第N話 -サブタイトル- [放送日]」形式に自動変換するため、SCRename を設定しています。
<!-- Amatsukaze プロファイルの RenameFormat -->
$SCtitle$\$SCtitle$ 第$SCnumber$話 -$SCsubtitle$- [$SCdate$]
SCRename.srv(チャンネル設定ファイル)は必ず CP932(Shift-JIS)で保存してください。 UTF-8 で保存するとフィールドずれが起き、全件「番組情報が見つかりませんでした」になります。
EPGStation が生成する録画ファイル名(「YYYY年MM月DD日HH時MM分SS秒-番組名.mp4」形式)は SCRename が内部で日付を解析できないため、エンコード直後のリネームが失敗することがあります。この場合は PowerShell のバッチスクリプトで EPG 形式の日付を変換してから SCRename を呼び出し、30 分ごとにタスクスケジューラで自動実行する仕組みで対処しています。
まとめ
| 項目 | 状態 |
|---|---|
| Mirakurun(GR 31 + BS 51 サービス) | ✅ 稼働 |
| B-CAS デスクランブル(Clear 率 100%) | ✅ 稼働 |
| EPGStation v2 | ✅ 稼働 |
| PT2 + PT3 計 8 チューナー | ✅ 稼働 |
| Amatsukaze 録画後自動エンコード | ✅ 稼働 |
| アニメ 24fps エンコード(AFS 二重処理の修正) | ✅ 修正済み |
| SCRename 自動リネーム(30 分ごとバッチ実行) | ✅ 稼働 |
旧 Windows 録画サーバーと比べて消費電力が大幅に下がり、PT2 × 2 枚 + PT3 × 1 枚で計 8 チューナーの同時録画が可能になりました。Linux への移行は一筋縄ではいきませんでしたが、ドライバーがカーネル標準搭載になったことで以前より格段に構築が楽になっています。

コメント