先日のBDAV作成をもうちょっと考える

先日の PT2→BDAV 作成をもうちょっと頑張ってみる。

指定PIDの抽出

BS2 のような SD の場合、予め PID で切りだしておかないとダメだったりする。


今回は TsSplitter を使う。


オプションに少し悩む…。

最低限 EPG 情報を残す (-EIT) オプションを付けておく必要がある模様。これをつけると NIT/SDT/EIT/TOT (PID:0x10/0x11/0x12/0x14) も一緒についてくる。いくつかオプションを指定しているけど、とりあえずこれだけは忘れないようにしておくこと。

つけない場合 ts2pts.exe で以下のような感じ (not exist...) で失敗する。

 > ts2pts.exe -i test01.ts -o 00001.m2ts -b
 analyzing TS [test01.ts]
 PAT:OK
 PMT:OK
 NIT:OK
 not exist PAT/PMT/NIT/TOT/EIT/SDT/BIT

NIT とか EIT とかなんぞや?というときは↓を読む。

wikipedia:MPEG-2システム

他のオプションは適当に。 HD 放送なら HD を残せばいいし SD なら SD 放送を残せばいい。 BIT で not exist エラーを吐くのが気持ち悪ければ PID 0x24 も残すようにするといいが、 SD 放送の場合にはなぜか残らない。

BIT はなくても通るので、まぁあまり気にしない。

DVDに焼いたらどうなるの?

DVD-R 一枚におさまるサイズで BDAV 形式で作ってみた。ライティングフォーマットは UDF2.50 を使用。とりあえず手持ちの BW770 に読ませたら AVCREC の DVD として認識してくれてちゃんと再生できた。まぁ 4G ちょっとだと地デジで1時間程度しかおさまらないからネタにしかなりませんけど。

wikipedia:AVCREC

字幕と第2音声について

先日未確認と書いた字幕と第2音声について。

NHK-BS2 でやっている韓国ドラマ (イ・サン) と、地上波 TBS のアニメ会長はメイド様!BDAV 形式に焼き付けて DIGA くんで確認してみたところ、字幕の再生・第2音声での再生ともに問題なく行うことが出来ることを確認した。

バッチファイル

いちいち 1 つづつコマンドを打ち込むのが面倒なのでバッチファイルを作った。


まず TsSelect/TsSplitter や MurdocCutter 等の TS 切り出し作業は事前に行なっておく。あとは入出力をディレクトリ指定してバッチを流してやればいい。なお必要なプログラムは C:\TOOLS ディレクトリにおいておくことを想定している。

@echo off
setlocal ENABLEDELAYEDEXPANSION

echo.
echo *****************************************************************
echo   PT2で取得したTSをBDAV形式に変換するバッチ。
echo.
echo   [書式]
echo     %~nx0 (input_dir) (output_dir) (temp_dir)
echo       引数は省略可能。
echo       省略時はこのバッチがあるディレクトリを使う。
echo *****************************************************************
echo.

PATH="C:\TOOLS";%PATH%


SET pwd=%1
SET out=%2
SET ltmp=%3
SET cnt_ts=0
SET CHECK=

IF "%pwd%" == "" (
    set pwd=%~dp0
)

IF "%out%" == "" (
    set out=%~dp0\BDAV
)

IF "%ltmp%" == "" (
    set ltmp=%~dp0\TEMP
)


echo.
echo -----------------------------------------------------------------
echo   入力元:%pwd%
echo   出力先:%out%
echo.  中 間:%ltmp%
echo -----------------------------------------------------------------
echo.

FOR %%i in ( "%pwd%\*.ts" ) do (
    echo "%%~nxi"
    set /a cnt_ts+=1
)


echo.
echo %cnt_ts%個のファイルがあります。
echo 処理してよろしいですか?

set /p CHECK="[Y,N,1-5]? %CHECK%"

IF /i %CHECK% == Y GOTO TS2PTS
IF /i %CHECK% == y GOTO TS2PTS
IF /i %CHECK% == 1 GOTO TS2PTS
IF /i %CHECK% == 2 GOTO CHOTBDAV
IF /i %CHECK% == 3 GOTO RPLSCONV
IF /i %CHECK% == 4 GOTO RPLSCOPY
IF /i %CHECK% == 5 GOTO STREAM
GOTO END


:TS2PTS
REM 生TSからBD用M2TSを作成する
echo.

IF NOT EXIST "%ltmp%" mkdir "%ltmp%"

set cnt_ts=0
FOR %%i in ( "%pwd%\*.ts" ) do (
    set pic_ts=
    set /a cnt_ts+=1
    set /a pic_ts=cnt_ts+100000
    set num_ts=!pic_ts:~1,5!
    ts2pts.exe -i "%%i" -o "%ltmp%\!num_ts!.m2ts" -b
)


:CHOTBDAV
REM M2TSからBDAV用各種ファイルを作成する
echo.

FOR %%i in ( "%ltmp%\*.m2ts" ) do (
    chotBDAV.exe "%%i" "%out%"
)


:RPLSCONV
REM プレイリストをSONY用にコンバートする
echo.

FOR %%i in ( "%out%\PLAYLIST\*.rpls" ) do (
    rplsconv.exe "%%i" -m
)


:RPLSCOPY
REM BDAV用プレイリストにTSから取得した情報を付与する
echo.

FOR %%i in ( "%out%\PLAYLIST\*.rpls" ) do (
    rplscopy.exe "%ltmp%\%%~ni.m2ts" "%%i" -nbieg
)


:STREAM
REM M2TSファイルをBDAV用のディレクトリに移動する
echo.

IF NOT EXIST "%out%\STREAM" mkdir "%out%\STREAM"

move "%ltmp%\*.m2ts" "%out%\STREAM\"
rmdir "%ltmp%" 2>NUL

:END
endlocal


こんなに FOR ループを回す必要はないのだが、 1 ファイルずつではなく 1 段階ずつ順番に進めたかったためあえてこうしている。 M2TS のファイル名は 00001.m2ts から順に自動採番で振るようにしているが特にソートとかしているわけではないため、最初の TS ファイルを読み込む順番には注意。

また、最初に入力待ちをする。通常の Y/N の他、数字キーで該当箇所に処理を飛ばせる。デバッグ用。