tsreplace で録画済みテレビ番組を正しくトランスコードする

はじめに

おうちの録画番組が3TBまで膨れ上がってしまったので、何とかしてフリースペースする必要があった。

そこで少し調べてみて、tsreplace を使うことにした。

本文

録画した番組は m2ts 形式で、実際には映像と音声以外にも様々なデータが含まれているが、ffmpeg ではこのコンテナを正しく処理できない。直接 ffmpeg でエンコードすると、番組情報やデータ放送などの領域が失われてしまう。最も重要なのは、KonomiTV が番組を正しく解析できなくなることだ。そのため、tsreplace を使って正しくトランスコードする必要がある:

https://github.com/rigaya/tsreplace

もちろん readme にも書いてあるが、大体の意味は:

introduce

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

before

alt text

さて、紹介は終わった。特に言うこともない。 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日近くかかった。戻ってくる速度は悪くなかったが、実際にはハードディスクの速度上限に達していたはずだ。

KonomiTV の魔改造

当然、併用するには、私の HonomiTV のロジックをまた変更する必要があった。もちろん claude に任せたが、大まかな方針は明確にしておく必要がある:

まず、再解析ロジックを追加した。
ファイル名は変わらず、再生時間もほぼ変わらず、ファイルサイズだけが変わった場合は、ビデオを新規追加しない(以前のロジックでは修正ではなく新規追加していた)。
それから、速度が遅すぎるので files_only パラメータを追加して、ファイルのエンコード情報のみをチェックし、サムネイル/キーフレームなどの時間のかかる重複操作を再生成しないようにした。
次に、以前のシンボリックリンク(Symlink)の自動検出ロジックを調整した。現在、ファイルがトランスコードされたかどうかを目視で確認するためにシンボリックリンクを使っているが、KonomiTV の以前のロジックでは、自動的に解析して実際のファイルパスでデータベースに登録していた。
最後に、パッシブ判定を設定した。ファイルサイズの差異が20%の場合はパッシブスキャンをトリガーし、サムネイルをリネームする(現在、サムネイルは実際にはファイルハッシュで命名されているが、ファイルが変わるとハッシュも変わってしまう)。

まとめ

AI がなかった時代、このちょっとした機能の修正にどれだけ時間がかかったか想像するのは難しい

以上。






制作・著作
━━━━━
ⒽⓊⒼⒼⓎ