Chinachuの録画TSをWindows+RTX 4070 Tiで自動CMカット・H.265変換する

本ページはアフィリエイトプログラムによる収益を得ています。

やりたいこと

CentOS上のChinachuで録画したスクランブル解除済みMPEG-2 TSを、別のWindowsマシンへ自動投入し、CMを検出・除去してH.265/HEVCのMP4へ変換する。

そのうちやりたいと思っていたものをCodexで何とかしてもらったメモ。

CM切り出しだけChinachuの鯖でやってあとで MP4変換手動もしくはパッチ処理しないとだめなのかと思ったらすべて自動処理できるらしい。

ただし、この処理だとエンコード済みMP4はChinachuからは見えない。

中間ファイルとして「CMカット済みTS」は作らない。元TSをAmatsukazeへ直接渡し、CMカットとGPUエンコードを一度に行う。これにより、次の利点がある。

  • 再圧縮は1回だけ
  • TSのGOP境界で無理に切り貼りする必要がない
  • CM判定、インターレース解除、エンコードを同じ時間軸で処理できる
  • 自動化に失敗しても元TSが残る

構成

PT3
  │
  ▼
Chinachu / CentOS Stream 9
  │ NFS
  │ 録画完了時にAmatsukazeAddTaskを実行
  ▼
NAS

  │ SMB
  ▼
Windows 11 / RTX 4070 Ti
  │ Amatsukaze Server + NVEncC
  ▼
出力先

録画TSはNAS上にあるため、LinuxからWindowsへコピーしない。Linux上のNFSパスと、Windowsから見た同じファイルのSMB UNCパスをAmatsukazeAddTaskの--remote-dirで対応付ける。

使用したバージョン

  • Chinachu: Gitコミット 6b49bd7
  • CentOS Stream 9
  • Amatsukaze(rigaya版)1.0.8.8
  • NVEncC 9.31
  • NVIDIA GeForce RTX 4070 Ti 12GB
  • NVIDIAドライバー 591.86

Amatsukazeは、旧nekopanda版0.9.1.4ではなく、現在保守されているrigaya版を使用した。1.0.8.8にはLinuxからWindows Serverへタスクを投入するAmatsukazeAddTask_Linuxが公式配布されている。

  • Amatsukaze: https://github.com/rigaya/Amatsukaze
  • NVEncC: https://github.com/rigaya/NVEnc

Windows側の準備

Amatsukazeの配置

Amatsukazeを次へ展開した。

C:\Tools\Amatsukaze

NVEncCは次へ展開した。

C:\Tools\Amatsukaze\NVEncC\NVEncC64.exe

GPU認識は次のコマンドで確認できる。

& 'C:\Tools\Amatsukaze\NVEncC\NVEncC64.exe' --check-device

今回の環境では次のように認識された。

DeviceId #0: NVIDIA GeForce RTX 4070 Ti

Amatsukaze Server

ServerのAPIポートを32768、Web UIを32769とした。

API:    :32768
Web UI: :32769/

SMB共有の資格情報を利用できるよう、Amatsukaze ServerはWindowsへログオンしている通常ユーザーの権限で起動する。サービス用の別アカウントやSYSTEMで起動すると、UNCパスにアクセスできない場合がある。

Windowsログオン時の自動起動には、Startupフォルダへ次のVBScriptを配置した。

Option Explicit

Dim shell
Set shell = CreateObject("WScript.Shell")
shell.CurrentDirectory = "C:\Tools\Amatsukaze"
shell.Run """C:\Tools\Amatsukaze\exe_files\AmatsukazeServerCLI.exe"" -p 32768", 0, False

基本設定

Amatsukazeの基本設定は次のようにした。

  • NVEncC: C:\Tools\Amatsukaze\NVEncC\NVEncC64.exe
  • エンコード中はスリープしない: 有効
  • 自動ロゴ解析・採用: 有効
  • 並列数: 1(初期運用)

エンコードプロファイル

同梱のサンプル_NVEnc-HEVC10bit(要CUDA)を複製し、次の名前で保存した。

Chinachu_NVEnc_HEVC10_VFR_CMcut

主な設定は次のとおり。

項目設定
エンコーダNVEnc
映像HEVC 10bit
NVEncオプション-c hevc --output-depth 10 --qvbr 32 --preset quality --multipass 2pass-full --bref-mode each
出力MP4
CM処理CMをカット
インターレース解除KFM
出力fpsVFR
CUDA処理有効
リサイズ無効
音声再エンコード無効
チャプター別ファイル有効
SARコンテナにのみ記録
処理後の元TS移動無効
未登録DRCS外字無視して続行

「元TS依存」のフレームレートにするため、固定30fps化や60fps化はせず、KFMのVFRを使用した。

最重要なのは「処理の終了後、入力ファイルを別フォルダに移動する」を無効にすること。導入直後から元TSを移動・削除しない。

Linux側の準備

Amatsukaze 1.0.8.8のLinux x64用タスク投入クライアントを次へ配置した。

/home/{user}/amatsukaze-addtask/AmatsukazeAddTask

実行権限を付ける。

chmod 755 /home/{user}/amatsukaze-addtask/AmatsukazeAddTask

Chinachu録画後スクリプト

/home/shiongu/chinachu-amatsukaze-post.shを作成した。

#!/usr/bin/env bash

set -u

readonly ADD_TASK="/home/shiongu/amatsukaze-addtask/AmatsukazeAddTask"
readonly PROFILE="Chinachu_NVEnc_HEVC10_VFR_CMcut"
readonly SERVER_IP="{WindowsHOST}"
readonly SERVER_PORT="32768"
readonly RECORDED_DIR="/home3/public/Videos"
readonly WINDOWS_RECORDED_DIR='{TS保存ディレクトリ}'
readonly WINDOWS_OUTPUT_DIR='{変換後保存先}'
readonly LOG_FILE="/home/{user}/log/amatsukaze-post.log"
readonly PROC_MODE="${AMATSUKAZE_PROC_MODE:-auto}"

recorded_file="${1:-}"

log() {
  printf '%s %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$*" >> "$LOG_FILE"
}

if [[ -z "$recorded_file" ]]; then
  log "ERROR: Chinachu did not provide a recording path"
  exit 2
fi

if [[ "$recorded_file" != "$RECORDED_DIR/"*.m2ts ]]; then
  log "SKIP: unexpected path or extension: $recorded_file"
  exit 0
fi

if [[ ! -f "$recorded_file" ]]; then
  log "ERROR: recording does not exist: $recorded_file"
  exit 3
fi

log "ADD: $recorded_file"
if "$ADD_TASK" \
  --file "$recorded_file" \
  --setting "$PROFILE" \
  --proc-mode "$PROC_MODE" \
  --outdir "$WINDOWS_OUTPUT_DIR" \
  --remote-dir "$WINDOWS_RECORDED_DIR" \
  --ip "$SERVER_IP" \
  --port "$SERVER_PORT" >> "$LOG_FILE" 2>&1; then
  log "QUEUED: $recorded_file"
else
  status=$?
  log "ERROR: AmatsukazeAddTask exited with status $status: $recorded_file"
  exit "$status"
fi

権限と構文を確認する。

chmod 755 /home/{user}/chinachu-amatsukaze-post.sh
bash -n /home/{user}/chinachu-amatsukaze-post.sh

Chinachuとの接続

Chinachuのconfig.jsonへ次を追加した。

"recordedCommand": "/home/{user}/chinachu-amatsukaze-post.sh"

このChinachuでは録画終了時に次の形式でプロセスが起動される。

recordedCommand <録画ファイルの絶対パス> <番組情報JSON>

スクリプトは第1引数だけを利用する。パスが想定する録画ディレクトリ配下の.m2tsであることと、ファイルが存在することを確認してから投入する。

変更前の設定は次へバックアップした。

/home/{user}/chinachu/config.json.bak-before-amatsukaze-20260812

テストで遭遇した問題

SSH越しに空白・日本語入りファイル名を渡せない

PowerShellからSSHコマンドの中へ日本語番組名を直接埋め込むと、引用符の解釈が複雑になった。本運用ではChinachuが録画パスを直接スクリプトの第1引数として渡すため、この問題は発生しない。

テスト専用処理では、Linux側スクリプト自身が最新TSを選択するようにした。

DRCS外字のマッピングがなく停止

初回テストは次のエラーで停止した。

DRCS外字のマッピングがありませんでした

無人処理を優先し、専用プロファイルの「マッピングにないDRCS外字は無視する」を有効にした。字幕全体を無効化する設定ではない。

初回チャンネルは自動ロゴ生成が必要

チャンネルのロゴが未登録の場合、最初のタスクはペンディングになり、自動ロゴ生成が走る。

ペンディング / ロゴ設定がありません / 自動ロゴ生成中

今回のテストではTSをSMB経由で正常に解析し、ロゴ枠を検出・生成できた。以後、同じサービスIDの録画では生成済みロゴが利用される。

--weightpとBフレームの警告

ベースにしたサンプルプロファイルのオプションでは、NVEncC 9.31が次の警告を表示した。

weighted prediction with B frames unsupported.

エンコード自体は継続できたが、機能しない指定を残す理由がないため、専用プロファイルから--weightpを削除した。

実機テスト結果

2026年8月12日のABCテレビ録画をAmatsukazeのテストモードへ投入した。初回はDRCS外字で停止したが、設定修正後の再テストは完了した。

項目結果
全処理時間9分44秒
CM・ロゴ解析36.88秒
入力映像1440×1080、30000/1001fps、インターレース
フィルタ出力66,766フレーム、VFR(ベース60000/1001fps)
映像コーデックH.265/HEVC Main10
NVEnc速度197.60fps
NVEnc時間5分37秒
映像平均ビットレート約2,112kbps
テスト映像サイズ約280MB
GPU Video Engine使用率平均47.6%
音声MPEG-2 AACを再構築、2トラック
字幕SRTをMP4へ格納、ASSを別ファイル出力
チャプター別ファイル出力+MP4へ格納

出力先には次の4ファイルが生成された。

番組名.mp4
番組名.ass
番組名.chapter.txt
番組名-enc.log

ログ上ではCMカット用のTrim区間、KFMのVFR時間コード、NVEncCのMain10出力、MP4BoxによるMuxまで確認できた。元の.m2tsは移動も削除もされていない。

ログと確認先

Linux側の投入ログ:

/home/{user}/chinachu/log/amatsukaze-post.log

Windows側:

http://{windowsHOST}:32769/
C:\Tools\Amatsukaze\data\Server.log

ポート確認:

netstat -ano | Select-String -Pattern ':32768|:32769'

運用上の注意

  • CM判定は100%ではない。導入直後は元TSを残す。
  • ロゴ変更時には再採取が必要になる場合がある。
  • 通販番組、ロゴ付きCM、番組内広告などは誤判定しやすい。
  • Windowsが停止中の場合、現在の単純フックは投入に失敗してログへ残る。将来は再投入キューやWake on LANを追加できる。
  • WindowsのServerプロセスは、NASへアクセスできる通常ユーザーで起動する。
  • まず並列数1で安定性を確認し、NASとGPUに余裕があれば増やす。

まとめ

録画後にCMカット済みTSを作るのではなく、元TSをWindows上のAmatsukazeへ直接渡してCM解析とNVEnc変換を一度に処理する構成にした。NFSとSMBが同じNAS上のファイルを指しているため、巨大なTSファイルのコピーも不要だった。

この方式なら、Chinachuは録画に専念し、重い解析・エンコード処理はRTX 4070 Ti搭載Windowsへ分離できる。元TSを保持する安全設定から始められるのも大きい。

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください