このエントリーをはてなブックマークに追加

4k放送を録画したやつ(MMT/TLV)をいろいろ処理する夢をみた

.
今回はWindows(Windows11)での話。
BS4K,8Kチューナー PT4Kを使っていろいろする環境が盛り上がってきたので、自分がこうやったらいいんじゃないかなーと夢見たことをメモ。最近になってこの話を知ったばかりなんで間違ったこと書くかも。その時はごめんなさい。
たぶんこのページはずっと下書き 完成はない。
  1. PT4K関係で使われそうなソフトウェア紹介(と、そのコンパイル/ビルド方法)
  2. ソフト入れた後の運用手順
  の流れで書く
.
2024/5/23 時点での話

1 PT4K関係で使われそうなソフトウェアの紹介

録画ソフト

急に録画したいときに使うソフト

BonRecTest

 GitHubでビルド済みのものがダウンロードできる。これのソースを改造したらTSの時みたいにB61デコーダーとffplayの組み合わせでリアルタイム視聴ができないかなーなんて妄想をしている。妄想だけだけど。

4K BS/CS recorder

 4K BS/CS recorderはビルド済みっぽいバイナリが入ってるけど上手く動かなかったので自分でビルドする方がよさそう。Visual Studioは2022を使用。そのままだとプリコンパイル ヘッダー関係でエラーが出るので、構成プロパティのC/C++のプリコンパイル済みヘッダーの項目で、「プリコンパイル済みヘッダーファイル」を「使用しない」にすることでビルド。

ISDB-S3対応のBon driver

 ビルドするにはBonDriverのソースコードだけでなく、他にも色々と必要なものがあるらしい。VisualStudio2022でビルドできる。

ソースコードをサブモジュール付きでとってくる
> git clone --recursive https://github.com/MMT-TLVassociation/BonDriver_BDA.git

他に足りないものをとってきてはBonDriver_BDAに入れていく
> git clone https://github.com/radi-sh/BDASpecial-PlexPX.git
> move BDASpecial-PlexPX\BdaSpecials\PlexPX BonDriver_BDA\BdaSpecials\
> git clone https://github.com/radi-sh/Rijndael4plex.git
> move Rijndael4plex\aes BonDriver_BDA\
> git clone https://github.com/radi-sh/BDASpecial-IT35.git
> move BDASpecial-IT35\CardReader BonDriver_BDA\
> move BDASpecial-IT35\BdaSpecials\IT35 BonDriver_BDA\BdaSpecials\
> git clone https://github.com/radi-sh/BDASpecial-DD.git
> move BDASpecial-DD\BdaSpecials\DD BonDriver_BDA\BdaSpecials\
> git clone https://github.com/radi-sh/BDASpecial-LWire.git
> move BDASpecial-LWire\BdaSpecials\LWire BonDriver_BDA\BdaSpecials\

で、BonDriver_BDA.slnをVisualStudioで開いてビルド。

録画予約ができるソフト

.

録画した後にいろいろ処理する時に使うソフト


atamadashi

 録画したデータはNULLパケット("7F FF"..."FF FF")を含めて保存されているので、TLVパケットの先頭"7F 03"が出現するところまで頭出ししてくれるソフト。これをやらないとB61デコードをしたところで、その辺の事情をしらない動画再生ソフトに読み込ませても再生できないことがある。ソースコードはこちらにある。 サイトは繋がらないことが多々あるが更新すれば見ることもある。
 コンパイルはVisualStudio2022でできる。空のコンソールアプリで新規作成をして、ソースコードをコピペ&コンパイル。

 使用例
 > atamadashi 4kmmt.mmts 4kmmt_cut.mmts

DumpTS

 TSやらMMTSやらを解析してくれるソフト。中にある動画データを、音声データを、両方を指定して取り出すこともできる。
 最新のバージョンだと上手く解析できないことがあるようなので、ちょっと古めのソースコードをダウンロードした方がよさそう。buildフォルダにソリューションファイルがある。DumpTS_vc16.slnをVisualStudio2022で開いてビルド。Failed to find MPU time descriptorがめっちゃ出るけど何とか使えると思う。

使用例(mmts動画の詳細情報を表示)
> DumpTS 4kmmt.mmts --showinfo

使用例(動画がF140にあったとして、音声がF141にあったとして、それらを抽出)
> DumpTS 4kmmt.mmts --CID=1 --pid="0xF140&0xF141" --output=4kmmt.hevc
より詳細な使い方はPT4K非公式wikiに書いてある。

ffmpeg(tlvmmt)

 MMTP パーサーと MMT/TLV デマルチプレクサーに対応したこちらのffmpegをビルドする。wsl2を使ってWindows用にビルドする。WindowsUpdate止めてたらwslのインストールもできないので注意。

WSL2インストール
> wsl --install -d Ubuntu-20.04

ffmpeg-windows-build-helpersをダウンロード&事前準備
> git clone https://github.com/rdp/ffmpeg-windows-build-helpers.git
> cd ffmpeg-windows-build-helpers
> ./cross_compile_ffmpeg.sh

 すると、次のようにaptアップデートして必要なソフト入れよう的なメッセージが出るので、ご指示のとおりコピペしてインストールする

$ sudo apt-get update
$ sudo apt-get install subversion ragel curl texinfo g++ ed bison flex cvs yasm automake libtool autoconf gcc cmake git make pkg-config zlib1g-dev unzip pax nasm gperf autogen bzip2 autoconf-archive p7zip-full meson clang python3-distutils python-is-python3 -y

ビルド実行
$ ./cross_compile_ffmpeg.sh --ffmpeg-git-checkout=https://github.com/superfashi/FFmpeg.git --ffmpeg-git-checkout-version=tlvmmt

途中のエラーと対処
途中、libffi-3.3のコンパイル中にエラーが出るが、ここを参考に、
「mv $srcdir/config.log」を「cp $srcdir/config.log」
に変更することで解決。

すごい時間をかけて ffmpeg.exe, ffprobe.exe, ffplay.exe ができる。
ffmpeg はご存じ、中の動画や音声を抽出したり別コーデックに変換するのに使う。
ffprobe でmmtsの情報を見ることができる。
ffplay では次のようなコマンドで動画の再生ができる。

使用例(mmts動画の詳細情報を表示)
> ffprobe 4kmmt.mmts

使用例(mmts動画を直接再生)
> type 4kmmt.mmts | ffplay -i - -v warning -x 960 -y 540




2 ソフト入れた後の運用手順

録画

 ダブル録画をすることを考慮して、MiSeTe4K Recorderを2か所に展開する。例えば「MiSeTe4K Recorder1」と「MiSeTe4K Recorder2」というフォルダを作ってそれぞれに同じようにMiSeTe4K Recorderを展開するとか。
 MiSeTe4K RecorderのBangumiRokugaを使って予約情報をRecordList.iniに書き込む。録画時間を見ながら時間が被りそうなら「MiSeTe4K Recorder2」のRecordList.iniに書き込むとか、考えながらRecordList.iniを作成する。
 両方のMiSeTe4K Recorderを起動、番組予約を開始する。

録画した後処理

録画ファイルが 4kmmt.mmts だとする。
> B61Decoder 4kmmt.mmts 4kmmt_dec.mmts
これをした後、以下の処理をする

動画エンコード

 ffmpegを使って別のコーデックにエンコードするなり。経験上、音ズレはなさそう。

使用例
> ffmpeg -i 4kmmt_dec.mmts -map 0:0 -c:v libsvtav1 -crf 30 -preset 6 -g 240 -pix_fmt yuv420p10le -svtav1-params tune=0:enable-overlays=1:scd=1 -map 0:1 -c:a libopus -b:a 128k -ac 2 -ar 48000 4kmmt.mkv

動画音声抽出〜MKV格納

 エンコードなしなので無劣化。だが、若干の音ズレがあるっぽい。
 ファイルサイズ大きいしズレあるならこの方法は使わないかなー。


> atamadashi 4kmmt_dec.mmts 4kmmt_cut.mmts
DumpTSでの方法
使用例
> DumpTS 4kmmt_cut.mmts --CID=1 --pid="0xF140&0xF141" --output=4kmmt.hevc
MKVToolNixを使って出力された2つのファイルをmixする。

ffmpegでの方法
使用例
> ffmpeg -i 4kmmt_cut.mmts -map 0:0 -c:v copy 4kmmt.hevc
> ffmpeg -i 4kmmt_cut.mmts -map 0:1 -c:a copy 4kmmt.mkv
MKVToolNixを使って出力された2つのファイルをmixする。

音ズレが課題
mmtsをMiSeTe4Kなりffplayで再生する分にはズレない
DumpTSやffmpegで映像と音声を別々に取り出した場合にはズレる
別々にせず、ffmpegでmmts→別の動画ファイルに変換した場合はズレない
mmtsをffmpegで変換して終わり。でいいかなー、DumpTS使わなくていいかーと思いつつある。

.