Home -> 雑用 -> 雑用メモ -> [12. TS→M2TS→BDAV の手順メモ]
2016/05/06 作成
一切推敲していない糞文章故、大変読み難い代物となっております。
メモ。色々な情報があったためどれが正解なのか確かめた。
また今度まとめておこうと考えているがEDCB+TVTestで録画再生環境を構築した。
この環境における録画予約は民生機よりも便利だがHDDが一杯になった時にBDAVを作成するための準備は面倒。
検索したら色々と紹介されているがその記述内容はまちまち。
そして今回やりたいのは以下のようなこと。
つまり必要であれば以下のツールを使うことになりそう。
検証には以下を用いる。
というわけで色々と試した。
tsを1つだけ用意し、CMカットもSD画質分離も行わないでm2tsに変換してBDAVを作成してみた。地デジのtsは後回し。
ここから先、全ての検証においてBDライティングソフトとしてImgBurnを使用した。
とりあえずという感じでこのソフトを選んだだけなので、使えれば何でもおk。
メディアはその辺にあったBD-REを用いたが、その際ファイルシステムを「UDF」、UDFリビジョンを「2.50」または「2.60」にする。
ファイルシステムはデフォルトでは「ISO9660 + UDF」になっている。そのまま書き込もうとするとImgBurnでは
BDAVフォルダを検出して警告を出してくれるはず。
UDFリビジョンは初めは適当に2.50にしていたが、後で調べたら「BD-Rは2.60、BD-REは2.50」という使い分けで大丈夫そうだとわかった。
ラベルは適当に「test」とかを指定しておく。SONY製BDレコーダで焼くと「SONY_BD_RECORDER_VOLUME」になるが、合わせる必要もないので。
188バイトパケットTS → BD用192バイトパケットM2TS の変換を行うために使う。
以下の要領で変換する。tsが複数ある時はその分だけ繰り返しこの操作を行うらしい。
ファイル名は民生機で焼いたBDAVと同じく「00001.m2ts」、「00002.m2ts」、…とすればよいらしい。
> BD2FW input.ts 00001.m2ts -b
同様の変換をts2ptsで行っている例もいくつかあるが、BD2FWで大丈夫そうなのでts2ptsは用いない。
BDAVに必要なフォルダやファイルを作成するために使う。
「ysk.orz.hmのミラー」→「BDのインデックス」から取ってくる(直リンク禁止なので検索)。今回はchotBDAV060を使用。
以下のようにして使う。先に作ったBDAVフォルダを指定するが、その中にSTREAMフォルダを作ってm2tsを入れておくと後々楽。
> chotBDAV X:\test\BDAV\STREAM\00001.m2ts X:\test\BDAV
BD2FWで-bオプションを付け忘れた。どうやら誤って「BD192 -> FW192 変換」を行ってしまったらしい。
BD書き込み後に気付いたのでそのままテストしてみた。その結果は以下の通り。
TVTestで表示できる番組情報はm2ts内のものだが、ふつう民生機ではプレイリスト側の番組名・番組情報しか表示できない。
民生機で正常に動作させるにはプレイリストの編集がどうしても必要なようだ。
それはともかくとして、間違えてFW192でm2tsを作ってしまったのでBD192で検証し直すことに。
BD2FWで-bオプションをちゃんと付けて「188 -> BD192 変換」した。
出力されたm2tsファイルサイズは変わらないがMD5を計算したら違っていたので別なファイルになっているはず。
chotBDAVは処理にかかった時間をミリ秒まで表示してくれるが、さっきは27秒掛かったのに今度は12秒しか掛からなかった。
進捗をじっと眺めていた感じだとm2tsのファイル長修正に掛かる時間が大きく違ったようだ。
で、検証結果は以下。
結局のところ、BDAVならBD192だろうがFW192だろうが支障はなく、i.LINK転送時のみこれを考慮すればよい、ということらしい。
ただ保証はできない。
そんなわけでプレイリストの編集過程を追加。
chotBDAVで作ったrplsを変換して番組内容詳細情報と番組ジャンル情報を扱えるようにする。
以下のようにして使う。
> rplsconv 00001.rpls
rpls内の番組情報をコピーするためのツールだが、コピー元としてtsも指定可能なのでm2tsからrplsに番組情報を移植するのに使う。
以下のようにして使う。スイッチ"-x"は"-i"とは一緒には使えない。
とりあえず他のスイッチは指定できるだけ指定してみた。
> rplscopy X:\test\BDAV\STREAM\00001.m2ts X:\test\BDAV\PLAYLIST\00001.rpls -dtpzmscnbieg
番組情報を弄っただけなので再生はさっきと同じく問題なし。
番組情報はtsから引っ張ってきたので「」(=[字])なんかも正常に表示される。
DBR-Z620だと、タイトルには[字]と書かれていても字幕が表示できないという状態。
BDZ-RX105で焼いたBDをDBR-Z620に入れても普通に字幕を表示できたので、新しく出た民生機だと何か仕様が異なるのかも?
先に紹介した記事によると、どうやらPS3ではtsをそのまま焼いても再生できるらしい。データディスクっぽい。
m2tsにすると何かファイルサイズがデカくなるし、変換も面倒だし、tsのままでいいならtsのまま焼きたい。
という訳でtsのままBDAVが作成できるか試してみた。
> chotBDAV BDAV\STREAM\00001.ts BDAV m2tsのファイル長が正しくないため、m2tsに追記補正します。 Sync Error!!! >
異常終了してしまった。後でtsをそのままm2tsにリネームしてから試してみたが結果は同じだった。
やっぱり普通のtsだとデータディスクを作る路線じゃないと駄目っぽい。
データディスクなら何とでもなるので今回はBDAV作成にこだわって検証を続ける。
お試し②の後ろにチャプター作成の手順を追加する。
rplsにチャプタ情報を埋め込むために使う。
「ysk.orz.hmのミラー」→「BDのインデックス」から取ってくる(直リンク禁止なので検索)。今回はrplsChap_1001を使用。
細かい使い方はリンク参照。というか細かいことはreadmeに書いてある。
実は以前にlogoGuilloでゴニョゴニョして作った.chapters.txtと.chapterが手元にあるので、これを流用して何とかする。
この.chapters.txtを元にして作った.chapterはTVTest上で正しく動作することを既に確認しているものとする。
このあたりの操作はBDAV作成からは離れてしまうので、後日改めて備忘録を書いておきたい。
.chapters.txtは以下の書式。時刻だけにして保存し直してもよいが、何となくこのままrplsChapに突っ込んでも動きそうなので1回このままやってみる。
本当はStartとかBlkとかは書いてないテキストじゃないといけない(っぽい)ので、上手くいかなければやり直す。
00:00:00.000 Start 00:00:06.373 Blk-0-in 00:01:44.338 Blk-0-out 00:02:14.368 Blk-1-in 00:24:51.323 Blk-1-out 00:25:36.368 Blk-2-in 00:26:06.331 Blk-2-out
これを00001.chapters.txtとか適当な名前で保存し、以下のようにしてrplsChapに突っ込む。
> rplsChap BDAV\PLAYLIST\00001.rpls BDAV\CLIPINF\00001.clpi out.rpls -t 00001.chapters.txt
out.rplsが正常に生成できていそうなら00001.rplsに上書きする。
やってみたところrplsのサイズが3.77KBから3.90KBになっていた。チャプタ情報が書き加えられたようだ。
変えたのはチャプタだけなのでチャプタが動作するようになればおk。
という訳で、チャプタ境界の誤差を無視できるような神経質でない人はこれで完成ということにしてもよさそう。
私は神経質なのでこれをどうにかしたい。という訳で⑤へ続く。
お試し④のチャプター作成手順で、代わりにキーフレームベースチャプタを用いる。
こいつはAviUtlで画面を見ながら手作業で入力して作った。先にAviUtlでm2tsが読み込めるようにしておく必要がある。
ウィンドウタイトル部分に現在のフレームインデックスが表示されるので、これをキーフレームの番号として採用する。
0始まりと1始まりのどちらが正解か不明なので、とりあえず普通にインデックスを採用して検証。
0 191 3128 4027 44696 46045 46944
これを00001.keyframeとか適当な名前で保存し、以下のようにしてrplsChapに突っ込む。さっきとは「-k」が違う。
> rplsChap BDAV\PLAYLIST\00001.rpls BDAV\CLIPINF\00001.clpi out.rpls -k 00001.keyframe
さっきの調子だと恐らく再生は問題ないので、今回はボリュームラベルをマルチバイト文字列だけにしてみた。
サロゲートペアやら織り交ぜてみたかったので「あいうえお愛上御‱➡𠮷😃[字]」という感じで。
将来的には番組名とか入れたら便利そうだし、きちんと動いてくれたらうれしい。
着目すべきは、フレームのズレが解消されているかと、そもそもボリュームラベルがこれでも大丈夫かということ。
という訳で、キーフレームベースチャプタの作り方がこれで正しいということもわかった。
BDAVはデフォルトではUnicodeをサポートしていないようで、ImgBurnの「詳細設定」→「制限」→「UDF」タブに
「BDビデオ - Unicodeのサポートを無効にしない」、「特殊フォルダも含む」「BD ビデオ - Unicodeのボリュームラベルを許可」のチェックボックスがある。
この3つをチェックすれば良さそうなのだが、「BDビデオ=BDMV」と思っていたのでチェックせずに検証してしまった。
ベリファイでエラーがあったのは、もしかしたらサロゲートペア文字が原因じゃないかとも感じ、今度はボリュームラベルを
「あいうえお愛上御[字]」にしておいた。このままだと動くことがほぼ確実なので、BDAV/STREAM/に日本語ファイル名のtxtを置いてみた。
BDAVフォルダは先に出てきた「特殊フォルダ」の1つで、この中に本来の動作とは関係のないファイルがあった場合の民生機の振る舞いを検証した。
これでもちゃんと動くなら、STREAMフォルダ内にはTVTest用のチャプタファイルが置けるようになる。
結局ベリファイ時のエラー原因がサロゲートペア文字なのかPasskeyなのかはっきりしないままだが、差支えないのでこのまま突き進む。
お試し⑤の手順で使用するm2tsを別のファイル名にしたらどうなるのか試してみた。
今までは「00001.m2ts」を用いてきたが、これを「2016-01-23_2345_放送局_番組名 #789.m2ts」にしてみた。
このためにはchotBDAVの段階からやり直す必要がある。
やっぱりファイル名は「00001.m2ts」みたいに通常通り連番にしておかないと駄目っぽい。
仕方ないので、STREAMの詳細はテキストファイル等の別ファイルに突っ込むことに。
今度はTSのCMをカットしても大丈夫か検証する。
CMを削るとトラブルの元になるという話は幾度か聞いているため無用な編集は避けてきたのだが、
BS等で流れる保険屋の宣伝なんて見返す機会もないだろうということで、問題がないなら削っておきたい。
tsをGOP単位(≒0.5秒単位)でカット編集できる。
GUIソフトウェアなので使い方は割愛する。.glのGOPリストは流用できないのでリスト作成に少し時間が掛かる。
民生機のカット編集に慣れているなら、残す区間の終端は1GOPだけ余分に含むつもりで区間を指定すると丁度いい(っぽいけど確信なし)。
カット編集により生じる不具合を解消する。
ファイルが残っていない関係で今回はup0802.zip(TsTimeKeeperV3.4.15.2)を用いた。
こっちもGUI付きなので使い方は割愛する。
GOP単位でカット編集したのでCMが1フレームだけ残ったりしている。
再視聴目的なら先に説明した通りのカット編集でよいが、保存目的かつ欠損が心配な場合は、残す区間の前1GOP、後ろ2GOPを残せばよい。
地デジならTsSplitterで前処理するべき。
ワンセグなどの不要な情報を消して容量を削る。上で出てきた「DTV関係ファイル置き場」の「up0797.zip」を用いた。
これもGUI付きなので細かい使い方は省略する。
番組内のCMは残して番組前後のCMだけ除去した。地デジの30分アニメ1本を用いたところ容量の変化は以下のようになった。
元TS: 2.49GB →(TsSplitter)→ 2.39GB →(MurdocCutterで末尾CM除去&TsTimeKeeper)→ 2.30GB →(BD2FW)→ 2.35GB
最後のm2tsは2.35GB(2,525,537,088バイト)だったので1クールをBD-R(25GB)1枚に収めるのは無理そうだ。
また、STREAMフォルダ直下にchaptersフォルダを作ってその中に.chapterを入れてTVTestで使えるか試した。
DBR-Z620で動作しなかった原因は何なのか考えてみたが以下(全て仮説)くらいしか思いつかない。
そこで、今度はTsSplitterもMurdocCutterも通さないで直接BD2FWに流してみた。
またUnicodeサポートを有効にしつつボリュームラベルは普通の文字列にした。
というわけで犯人は TsSplitter・MurdocCutter・TsTimeKeeper のどれかである可能性が高くなってきた。
今度はMurdocCutter+TsTimeKeeperを追加、TsSplitterは使わないままでBD2FWに流してみた。
番組の開始・終了部はそれぞれ2GOP・3GOPだけ余分に入れておいた。
犯人は TsSplitter か?
今度はTsSplitterだけを使って分割、MurdocCutter+TsTimeKeeperを使わないでHD本編をBD2FWに流してみた。
TsSplitterが犯人という訳でもなさそう。
となると、TsSplitter + MurdocCutter + TsTimeKeeper の組み合わせが悪いのか?
今度はもう一回TsSplitter + MurdocCutter + TsTimeKeeperで試してみた。
念のためボリュームラベルはまだ英数字のままで。
最初にDBR-Z620で再生できなかったのは偶々なのか、はたまた手順に誤りがあったのか…
ここまでで使ってきたTsTimeKeeperは3.4.15.2だったが、3.5.16.7改造版が配布されていたのでこちらに変える。
同じファイルを突っ込んでそれぞれに出力されたファイルのHashを調べたところ異なっていたので挙動も多少変化するかも。
3.5.16.7改造版にはGUIが同封されていないので、コマンドプロンプトから動かすか3.4.15.2のGUIを流用する。
上のリンク先ページは「TSファイル編集の覚え書き」だが、中々に興味深いので読んでみる価値あり。
TSのカットについて詳細に述べられているが、下記ページ記載の通り他の方法もある。
この通り色々なツールがあるが、フレーム単位でカットできてスマレンが使えるものは有料ばかりなのでGOP単位のカットで妥協。
TsTimeKeeperを3.5.16.7改造版にして、ボリュームラベルを日本語にしてやり直してみた。
この時点では.chapterとか余分なファイルは入れていない。
やっぱりDBR-Z620でも問題なく再生できた。
ここまでで使ってきた TsTimeKeeper と TsSplitter は旧版だった。実は新バージョンがあった。
さっきリンクを載せたTsTimeKeeper Ver.3.5.16.7 改造版配布元にアップローダへのリンクがあるのでそこからダウンロードできる。
以下ではどちらもこっちのバージョンを使うことにする。
もう一度、ここまでで出てきたツールを(チャプタ関係以外)全て使って、日本語ボリュームラベルでBDAVを作ってみた。
ここまで経験して、CMをカットする場合は前後2GOPずつ残すくらいで本編を欠損なく保存できることを悟った。
チャプタファイルや番組説明用ファイルはまだ突っ込まないことにした。
ということで、DBR-Z620で再生できなかった件はTsTimeKeeperが古かったことあるいは操作ミスが原因であるという線が濃厚に。
今度はチャプタ関係も全部突っ込んで試した。TVTestは当然.chapterを突っ込んでおく必要がある。
TsTimeKeeperが古い版だったからDBR-Z620に嫌われてしまっただけだった、ということでひとまず納得。
ここまでは1つのtsをBDAVにしてきたが、ここからは複数のtsをBDAVにする。
BD-R(25GB)1枚にどれだけ入るのか考えながら作らないといけない。
1クール分の地デジアニメ全12話について不要なCMをカットしてm2tsにするところまでこなした。
合計サイズはm2tsが12本で 22,555,895,232 バイト。これなら1本に収まりそうだ。
チャプタ等の設定をすべて終えたところBDAVフォルダ全体で 22,581,858,891 バイト。ディスク容量の93%で収まった。
早くブルーレイを超える光ディスクが登場しないものか(業務用じゃなくて一般庶民向けで)。
先に紹介したように、AviUtlを使えば .keyframe を手動で作ることができる。
これを以下のページで配っている.batに突っ込むと.chapters.txtに、さらにそこから.chapterへと変換することができる。
ここまでに色々やってきた結果、例えば12フレーム目から本編が始まる場合は以下のように記述すればよいことがわかっている。
以降の行はCMの始まるフレームインデックスと本編が再開するフレームインデックスを交互に書き、最後は本編を抜けるフレームインデックスを書く。
12 6006 6047 19892 21748 43266
で、そのbatを使って何も考えずに .keyframe→.chapters.txt→.chapter と変換すると以下のような出力が得られる場合がある。
具体的には、0フレーム目から本編が始まるような場合。
c-0cix-0cox-193961cix-210342cox-583350cix-644743cox-1457724cix-0eox-c
これをこのままTVTestに読み込ませると最初のブロックが丸々飛ばされてしまうので、以下のように修正する必要がある。
c-193961cix-210342cox-583350cix-644743cox-1457724cix-0eox-c
DBR-Z620は忘れた。
とりあえず異常は見られなかった。chotBDAVには動画回数分だけ何回も突っ込んでいたが、これで大丈夫らしいということも確認できた。
さっき焼いている途中で気づいたが、今まで info.bdav はノータッチだった。
でもこれを弄ったら便利そうということを知った。
info.bdav を弄るツール。再生順、ディスク名を編集できる。一般的なレコーダではディスク名はボリュームラベルではなくこちらが採用される。
GUIなので簡単に使えて便利だが、保存ボタンを押すと上書きされてしまうので原本を残したい場合は注意。
今度はちゃんとDBR-Z620でも検証。上手くいったが、結局こいつでは最後まで字幕は表示できずじまいだった。
BDZ-RX105では表示できただけに残念だが他に方法も思いつかないので断念。
ここまでの検証は全て同一のBD-REを用いて行ってきたが、保存目的ならBD-Rに焼くのが普通。
BD-RはUDFリビジョンを2.60にする必要があるのでそこだけ変更して、後は何も買えずに焼いてみた。
今度はディスク容量の90%しか使わなかった。2.27GiB余っていたので、あと1本くらい入りそうだ。
BD-Rに焼くのなら追記はできないので1回でちゃんとしたものを作る必要があるっぽい。
ここだけ読めば何とかBDAVが作れるようにまとめて書いておく。
同じ操作を動画の数だけ繰り返す所が多いのでバッチにでも書いておいた方が楽。
手順1: 「TsSplitter」(GUI付き)で余分な情報を削る。複数のtsを一括で処理できる。
手順2: 「MurdocCutter」(GUI付き)でCMを削る。
手順3: 「TsTimeKeeper」(GUI付き)で不具合を解消する。複数のtsを一括で処理できる。
手順4: 「BD2FW」でm2tsに変換する。この際、「-b」を忘れないように注意。動画の数だけ繰り返す。
> BD2FW input.ts 00001.m2ts -b
手順5: 「chotBDAV」でBDAVに必要なフォルダやファイルを作成する。動画の数だけ繰り返す。info.bdavは繰り返すごとに更新される。
> chotBDAV X:\test\BDAV\STREAM\00001.m2ts X:\test\BDAV
手順6: 「rplsconv」で番組内容詳細情報と番組ジャンル情報を扱えるようにする。動画の数だけ繰り返す。
> rplsconv 00001.rpls
手順7: 「rplscopy」で番組情報をコピーする。動画の数だけ繰り返す。
> rplscopy X:\test\BDAV\STREAM\00001.m2ts X:\test\BDAV\PLAYLIST\00001.rpls -dtpzmscnbieg
手順8: AviUtl等を用いてキーフレーム情報をまとめたテキストを作っておく。
手順9: TVTest用の.chapterを作成する。実際に再生してみて不具合があれば.chapterを手動で書き換える。
手順10: 「rplsChap」でrplsにチャプタ情報を埋め込む。動画の数だけ繰り返す。きちんと出力できていたら元のrplsと入れ替える(上書きでもOK)。
> rplsChap BDAV\PLAYLIST\00001.rpls BDAV\CLIPINF\00001.clpi 00001_.rpls -k 00001.keyframe
手順11: 「BDAVTOOL」(GUI付き)でディスク名を設定する。動画の順番を変更したい場合はここで変更する。
手順12: BDAVに不要なファイルを退避させてからBDに焼く。UDFリビジョンは BD-R なら 2.60、BD-RE なら 2.50 にする。ボリュームラベルやファイル名に日本語を用いる場合はUnicodeサポートを無効にしないよう適宜設定する。
普通は録画用と記載のあるディスクを用いるだろうが、データ用ディスクでBDAVを作っても全く問題ない。民生機でも普通に再生できる。
これを裏付けるためにわざわざデータ用と記載されているBD-Rを購入して試したので間違いない。
賢い人はバッチ作りましょう。全部手動だとかなり面倒なので。
管理人Twitter: @su_te_ak/◆mmft4k9vgtL6
要望等はTwitterへ
Home -> 雑用 -> 雑用メモ -> [12. TS→M2TS→BDAV の手順メモ]
ここ以降は鯖が勝手に付加するやつです