2012 Aug. 初回アップ
概要
動画ファイル、とりわけ H.264などで採用されている TSフォーマットのファイルは、規格が複雑で解釈が難しくて扱う機器やアプリによって様々な形式のファイルが生成されてしまう。こうしたファイルは PCの動画再生アプリで再生すると問題なく再生できる場合でも、BDムービー化して Blue-Ray ディスクに書き出した場合は 規格を厳密に解釈する BDプレーヤーでは再生できない可能性が高い。 例えば デジタル放送を録画して BDにダビングして取り出し、それをリッピングしてPCの HDDに保存した *.m2tsファイルなどは、放送波を録画する際とダビングする際、リッピングする際の各段階でデータが変換されるためこうしたことが発生しやすい。
あるいは ハイビジョンカムコーダーで録画したファイルも、PCアプリでトリミングなどの編集を行うと同様のエラーを生じることが多い。
ここではこうしたエラーが表示される TSフォーマットのファイルを、問題なく BDムービー化するための処理方法について記す。
ただし下記の説明は単に私のPC環境で実験確認した結果に基づくものであって、結果を保証するものではありません。また不適切な説明なども含め、如何なる損害に関しても一切の責任は負いません。情報の利用はすべて自己責任で行なってください。
1.エラー動画ファイルの確認方法
2.異常ファイルの補正方法:Mediacoder を利用する
3.他の変換ツールの結果
4.異常ファイルの補正方法:tsMuxer でカットする方法
★ 補正後の動画ファイルによる BDムービーディスク作成方法
5.音声に問題がある場合の対処法
PCの再生アプリ(VLCプレーヤー や KMプレーヤーなど)はソフトウェアデコーダーの部分が多く比較的冗長性が高く作られており、動画ファイルが若干規格から外れていても再生できてしまうことが多い。PCで再生しているうちはそれでもいいが、BDムービー化して家電機器である BDプレーヤー(レコーダー)で再生しようとすると再生できないという問題にぶつかる。
これらの動画ファイルを フリーウェアの「真空波動研 Lite」などでチェックすると、以下の様な異常なデータになっていることがある。
こうしたファイルを オーサリングしようとしてもエラーで処理ができないか、無視して進めても BDプレーヤーでは再生できない。最悪、BDプレーヤーのトレーが開かなくなるという事もありうる。
私が今まで試した中*1では Mediacoder という動画変換ツールが一番確実にエラーを補正してくれるので、以下 Media coderを使ったエラーの補正方法について説明する。
(その後、簡易的な補正方法を見つけた。再エンコードしないので時間がかからない。その方法はこちら)
(Media coder のインストール方法に関しては別途アップする予定だが、それほど難しくはないので他のサイトを参照して欲しい。ただし、途中デフォルトで AVGなどの余分なアプリをインストールをするようになっているので注意してチェックを外した方がいい。)
アプリの起動時に必ず下図のようなロゴ画面が前面に表示されるので、その上でクリックして消す。
左上の「ADD」ボタンを押してファイルメニューを表示させて「ファイルの追加」をクリックする。
ファイルが追加されると、そのファイルのプロパティが右側のペインに表示される。ここでコンテナやビデオ、オーディオの各プロパティが正常に表示されるならエラーが補正できる可能性が高い。
補正変換のための各種パラメータの設定は画面下半分の設定タブを切り替えて行う。
まず下の図の「ビデオ」タブを押してビデオの設定を行う。高画質な再生をしたいなら「bufsize」の値を大きくする。(この項目名と単位はレートモードで選ぶ種類で変わる)
⑥ の形式は H.264、⑦ のレートモードは 初期値は「ABR(アベレージビットレート)」が設定されているが、変換中にエラーが出る場合は「VBR(バリアブルビットレート)」や「2-pass」などを試してみるとよさそう。一回変換してエラーが表示されて処理できなかったらここの設定を見直すと補正できることが多い。
⑧ の変換品質は、レートモードの設定によって設定する値の種類と単位が変わってくる。設定した数値によってファイルサイズも変わるので小さなファイルであたりを付けてみるといいが上の図の④の出力ファイル形式の一番下に「推定ファイルサイズ」が表示されるのでこの値を参考に決めてもいい。どちらにしても ② の入力ファイルのプロパティウインドウに表示される元ファイルのビットレート以上に設定しても意味が無い。
右側には 各圧縮形式の詳細な設定画面が表示されるが、殆どの物はデフォルトでいいようだ。
次に オーディオのタブを開いて形式を「AC-3」にする。このビットレートも元ファイルのオーディオのビットレート以上にしても意味は無い。
なお、2か国語放送のような場合は、IDを複数のトラックから選ぶようになると思われる。
次に コンテナのタブを開いてコンテナ形式で「M2TS」を選択する。
私は試してないが、どうしても *.m2tsファイルでエラーが出るようなら MP4や MKVなど H.264 の他のコンテナ形式を選択してためしてみるといいかもしれない。
以上でエンコード用パラメータの設定は終わったので、右上の出力フォルダの横のブラウズボタンを押して出力フォルダを指定する。ただし 2バイトコードには対応していないようで、漢字などのフォルダ名では文字化けを起こす。文字化けを起こしても動作に問題なくファイルは出力されるがフォルダ名が読めないので、設定を確認したければその横の「開く」ボタンを押せば対象のフォルダが開くので確認できる。
すべて設定したらもう一度「プレビュー」タブを押して出力ファイル形式や推定ファイルサイズを表示させて確認する。
問題なければ「START」ボタンをクリックして処理を開始する。
処理が始まるとプログレスバーが表示されて進行状況が分かる。
上記再エンコードに要する時間:上の図のエンコードレート(≒1.5)にも表示されている通り私のマシン(Intel Core i7 2600K/Memory 8GB/Radion HD6670)でのエンコードには動画の再生時間の約 7割程度の時間が掛かる。CPU使用率は 80%以上で CPUファンが回りっぱなしになることからマシンの性能が直接処理時間に影響すると思われる。
処理されたファイルを真空波動研 Liteで確認すると、元ファイルで異常だった解像度情報などが正常になっているのが分かる。
変換された M2TSファイル 5~6本を tsMuxerGUIでオーサリングして ImgBurnで BD-REに焼いたディスクは BDレコーダー(三菱:DVR-BZ350)で正常に再生できることを確認した。
下記の結果は、各ツールの設定値を最適化したものではなく単に少し設定を振ってみただけなので、最適化により問題が解決する or 入力ファイルの条件によっては異なる結果が出る可能性が多いにある。
入力ファイル:デジタル放送をBDにダビング後HDDにリッピングして先頭 2分ほどをカットしたファイル。41.8MB
Mediacoder の表示では ビデオビットレート:2700Kbps/1440x1080/29.97fps Audio:AAC
アプリ名 | 主な設定 | 結果 |
Mediacoder | 1440x1080 ABR:2000Kbps | ◎ file size:30.2MB 1440x1080/29.97 BDレコーダーで見た目にはブロックノイズも目立たず、音声も問題なく再生できた。 但し、Mediacoder の変換ではビデオと音声の同期がズレることがあるので、変換後のファイルは確認が必要。 |
Super | 画面size:NoChange bit rate:3360Kbps | X 2分ほどの動画処理で 1時間待っても処理が終わらなかった。途中キャンセルしたら 18MBほどのファイルができたが 30秒ほどの音声のみが再生されるだけ |
Any Video Converter | 1920x1080 (1440x1080だと画面が縮小) 2500Kbps | ▲ file size:75.8MB 1920x1080 29.97fps 真空波動研 Liteでの表示は正常に行われるが、生成されたファイルはファイルサイズが2倍以上になっても移動被写体のブロックノイズがひどい(ビットレートの調整をしてもほとんど改善しない。下の画像参照) 出来上がったファイルを tsMuxerでオーサリングしたら BD-Rへの書き込みは出来て BDプレーヤでも再生可能になった。ビットレート以外のパラメータの設定でブロックノイズが減る可能性はあるかもしれない |
VLC Media Player の変換機能 | 3000Kbps | X file size: 28.5MB 音声のみで画面は静止状態(オリジナルのビデオトラックを保持 ON) 0MB: (オリジナルのビデオトラックを保持 OFF) |
下は Any Video Converter の出力のブロックノイズの例
(カメラが高速でパンした時の画面の一部を実サイズで切り出したもの)
*2:(以下、説明中の語句は私の勝手な想像ですので間違いが多いと思います。メモ的な記述なので「そんなもんか~ぁ」くらいに読んでください)
MPEG-2までの動画ファイルはビデオ・オーディオ各ストリームのパケットにはビデオやオーディオの圧縮データのみが記録されており、画面のピクセル数やサンプリングレート、変換ビットレートなどのプロパティ情報は埋め込まれておらず、それらはファイルヘッダーというファイルの先頭部分やストリームデータの先頭部分にだけ記述されていた(と思う)。しかもそれらの情報はASCIIストリングのマーカー付きだったのでエディタで開くと比較的簡単に確認できた。したがって動画ファイルを再生しようとしてエラーが返されるとヘッダーと呼ばれるファイルの先頭部分のそうした情報を書き換えれば再生できることもあった。
しかし、H.264/AAC などのTSフォーマットが登場して事情が一変し、そうしたストリームのプロパティ情報はストリームのパケット中にビット単位で書き込まれるようになった。別の見方をすれば 188~192Byte単位のパケットの全てに圧縮データと一緒にプロパティ情報が埋め込まれてしまっており、1GBのファイルなら ≒5,000,000個(5M)もある計算になるので簡単には書き換えできない。
理由はおそらく、複数のソースから編集などの処理を行い結合した場合、途中で画面サイズやビットレートなどが変わった場合でもなるべく破綻なく再生させるようなことを考慮しているんだろうと思うが、現状ではそうした規格の解釈がツールの開発者まできちんと理解されていないためか、処理するツールによって埋め込むデータがバラバラになってしまっているようだ。穿った想像をすれば、変換処理ライブラリがどこかのメーカーから流出して、それを使用したプログラマは細部を理解しないまま使って試し、一通り動作すればリリースしてしまうためこうしたことが起きるのではないか。
更にそれに輪をかけているのが、放送データで、アナログ放送をデジタル録画する場合は記録フォーマットは録画機で一義的に決められたが、デジタル放送の場合は すでにそうした情報が埋め込まれた MPEG-2ストリームとして流れてくる。しかし録画機の多くは録画時間を稼ぐために それらを H.264という高圧縮フォーマットに再変換して記録しているが、この変換過程でもビット情報の変換が行われ、更にユーザーがそれを DVD/BD ディスクにダビング >> リッピングしたりすると、もうそれらのビット情報はどうなるかわからないというのが実態のようだ。
そんな現状を「仕方ない」と肯定すれば、じゃぁ転んでしまったビットを正しく補正してくれるツールが欲しいということになるんだが、それに対して Mediacoder はフォーマット変換の際に、各種パラメータを比較的直接的に指定できるUIを搭載しており、それは多分こうしたパラメータを規格通りにストリームパケットに埋め込んでいるのではないかと思われる。
以下の方法でもエラーファイルは補正されることがわかった。
まず、tsMuxerGUI で一旦ファイルの最初の部分をほんの僅かでもカットしておいて、そのファイルを再び読み込むことでエラーは出なくなる。(最初のカット時に読み込む場合はエラーが出るが、カット後のオーサリングで再度読み込ませる場合にはエラーが表示されなくなって、オーサリング後のBDディスクも正常に再生される。)
具体的には、まず tsMuxerGUI に 動画ファイルを D&Dしてから、下の図のように「Split & Cut」タブを開いて、「Enable cutting」にチェックを入れてから「Start」に小さな数字 1sなどと指定して、「M2TS muxing」をONしてからその下の出力フォルダを適当に指定して「Start muxing」ボタンを押して処理する。
再エンコードはされないので、長いファイルでも数十秒で終わる。同じフォルダーで同じファイル名だと元ファイルが上書きされるので注意。これで出力されたファイルを、もう一度 tsMuxerGUI に読み込み直して今度はこのページのように通常のオーサリングを行えば、今度はエラー表示されることなく、作成された BDディスクも正常に再生された。
理由は不明だが、tsMuxerGUI は一旦処理を行うと M2TS >> M2TS 変換であっても認識できないヘッダーやトラック情報を削除してしまうのではないかと思われる。
Access Counter: