折腾 JA
tsreplace で録画済みテレビ番組を正しくトランスコードする
本页目录
はじめに
この記事は中国語からの翻訳です。不自然な点がありましたらご容赦ください。
おうちの録画番組が3TBまで膨れ上がってしまったので、何とかしてフリースペースする必要があった。
そこで少し調べてみて、tsreplace を使うことにした。
本文
録画した番組は m2ts 形式で、実際には映像と音声以外にも様々なデータが含まれているが、ffmpeg ではこのコンテナを正しく処理できない。直接 ffmpeg でエンコードすると、番組情報やデータ放送などの領域が失われてしまう。最も重要なのは、KonomiTV が番組を正しく解析できなくなることだ。そのため、tsreplace を使って正しくトランスコードする必要がある:
https://github.com/rigaya/tsreplace
もちろん readme にも書いてあるが、大体の意味は:

そう、実質的には MPEG2 を HEVC に変換して容量を節約するというもので、20Mbps のビットレートを HEVC にすると大体 3-5Mbps になる。


さて、紹介は終わった。特に言うこともない。 readme で推奨されているコマンドを使って、CPU ソフトウェアデコードで実行した:
tsreplace.exe -i <入力tsファイル> -o <出力tsファイル> -e ffmpeg.exe -y -f mpegts -i - -copyts -start_at_zero -vf yadif -an -c:v libx265 -preset medium -crf 23 -g 90 -f mpegts -
もちろん最終的には友人のスーパーコンピュータクラスタで実行した。 大体900本の動画(平均30分)で、1日程度でエンコードが完了した。
最後にファイル転送の時間が一番長かった。合計3TBで、アメリカまで転送するのに2日近くかかった。戻ってくる速度は悪くなかったが、実際にはハードディスクの速度上限に達していたはずだ。
2026年7月30日更新:その後、今度はデータ放送をいじり始めた。
映像を小さくした後でも、チャンネルによってはデータ放送がかなりの容量を使っていることに気づいた。最初は --remove-typed ですべて消せばいいと思ったが、web-bml に入れると「データ取得中」のまま。さすがにデータが途中までしかなければ、運がよくても動かないらしい(
そこで、起動に必要なデータは残し、それ以外は14.5分ごとに1分間だけ残す --smart-remove-typed を作った。今のところ web-bml でも正常に開けて、番組によってはさらに30~40%ほど小さくなった。もちろんほとんど0%のチャンネルもあり、差はかなり大きい。
tsreplace -i input.m2ts -o output.m2ts --smart-remove-typed
数百本を手作業で処理するわけにもいかないので、Codex に tsreplace-trim-directory も書かせた。.processing を作ってTSDuckで確認してから元ファイルを置き換え、空き容量不足、録画中、検証失敗の場合は元ファイルに触らない。10Mも減らないファイルは置き換えるのも面倒なので、そのまま残す。結果はTSVに書き、次回は完了済みを飛ばして失敗したものだけ再試行する。
紅白歌合戦のようにデータ放送にも保存する価値がありそうな番組は、番組名を見てtrimしないようにもした。とりあえず、また少しディスク容量を取り戻せた。コードは自分の tsreplace fork に置いてある。
KonomiTV の魔改造
当然、併用するには、私の HonomiTV のロジックをまた変更する必要があった。もちろん claude に任せたが、大まかな方針は明確にしておく必要がある:
まず、再解析ロジックを追加した。
ファイル名は変わらず、再生時間もほぼ変わらず、ファイルサイズだけが変わった場合は、ビデオを新規追加しない(以前のロジックでは修正ではなく新規追加していた)。
それから、速度が遅すぎるので files_only パラメータを追加して、ファイルのエンコード情報のみをチェックし、サムネイル/キーフレームなどの時間のかかる重複操作を再生成しないようにした。
次に、以前のシンボリックリンク(Symlink)の自動検出ロジックを調整した。現在、ファイルがトランスコードされたかどうかを目視で確認するためにシンボリックリンクを使っているが、KonomiTV の以前のロジックでは、自動的に解析して実際のファイルパスでデータベースに登録していた。
最後に、パッシブ判定を設定した。ファイルサイズの差異が20%の場合はパッシブスキャンをトリガーし、サムネイルをリネームする(現在、サムネイルは実際にはファイルハッシュで命名されているが、ファイルが変わるとハッシュも変わってしまう)。
まとめ
AI がなかった時代、このちょっとした機能の修正にどれだけ時間がかかったか想像するのは難しい
以上。
終
制作・著作
━━━━━
ⒽⓊⒼⒼⓎ