2011年4月6日水曜日

地デジ録画データ編集

はっはっは、また会いましたね、エースです。


今回は地デジを録画したデータを、編集しやすい形式に変換する
流れを書こうと思います。


準備するもの

最後のFakeAacWavは、
FAAD 改造版Friio関係ファイル置き場のup1066.zip)
でも代用できます。ただし、FakeAacWavは特殊なソフトなので
どちらを使ったかによってエンコード時に使うソフトが変わります。
詳しくは最後に書きます。


流れとしては上から順に、
TsSplitter → DGIndex → FakeAacWav(or FAAD 改造版
と処理していきます。


それではこれらのソフトの詳細です。

詳細の最後にコマンドという欄がありますが、これは
バッチファイルなどでの処理のことです。
バッチファイルについての説明は長くなるので詳しくは省きますが、
簡単に言えば、メモ帳で作れる簡単なプログラムです。
上の3つのソフトを毎回1つずつ開いて1ファイルずつ処理するの
は面倒なので、3つのソフトでの処理を記述したバッチファイルを
作成しておけば、そこにファイルをドラッグ&ドロップするだけで
自動的に3つの処理をやってくれるというわけです。


ソフト名TsSplitter
説明高画質データを抽出するソフト。

地デジデータには、低画質データと高画質データが入っています。
どういう処理なのかは知りませんが、小さいテレビでは低画質、大きいテレビでは高画質データが採用されるって感じでしょうか。
とにかくその中から高画質データだけを抽出します。
コマンドTsSplitter.exe "入力tsファイルパス" -SD -1SEG -OUT "出力ディレクトリパス"


ソフト名DGIndex
説明映像と音声を分離するソフト。

ts形式を、d2v形式(映像)+aac形式(音声)に変換します。

ただし変換には少し面倒な作業が必要で、というのもts形式というのは色々な情報が1つのファイルにまとめられており、それぞれにPIDというものが振り与えられています。例えば映像データ1はPID 0x111で、音声データ1はPID 0x112、という感じです。そして変換のときにPIDの指定が必要なのですが、このPIDがテレビ局によって違うことがあるため、それを調べなければいけないのです。

とは言ってもテレビ局が同じならどの番組でも同じなので、最初に一回だけ調べればOKです。調べ方はDGIndexでtsファイルを開いて、

[Stream] → [Detect PIDs: PAT/PMT]


すると下のような画面が出てきます。


必要な情報は一番上の3つです。
上から順に、PCRデータ、映像データ、音声データとなります。

PCRデータというのは時間に関するデータで、詳しくは知らないのですが、これがないと動画がカクカクしたり、途中で飛んだり、不具合が出るらしいです。

上の画像の例だと、PCRデータがPID 0x100 (256) だと書いてあります。ちなみに0x100というのは16進数で100だという意味です。カッコの中が10進数ですね。コマンド実行では16進数での指定になるので、PCRのPID指定は100となります。

またコマンドでの出力ファイル名は、拡張子抜きのファイル名です。
(例えば「C:\output.d2v」ではなく、「C:\output」のみ)

その他のコマンド詳細
http://neuron2.net/dgmpgdec/DGIndexManual.html#AppendixC
コマンドDGIndex.exe -i "入力tsファイルパス" -o "出力ファイル名" -pp PCRのPID -vp 映像PID -ap 音声PID -tn track0 -om 1 -minimize -exit


ソフト名FakeAacWav
説明音声データをaac形式とwav形式で擬似的に相互変換するソフト。

擬似的にというのがポイントで、デコードやエンコードのような処理はしていないらしいです。ですので出力されたwavファイルをプレイヤーで再生しようとすると、ガガガーというノイズ音が再生されます。しかしちゃんと音声データは生きているので、wavファイルを開ける編集ソフトでシーンカットをすることができます。編集が済んだら再びFakeAacWavでaacファイルに戻してやると、普通に再生できるaacファイルが完成します。


また変換する際に、入力ファイル名にディレイ情報(音ズレ情報)が指定されていると、それを修正して出力してくれるという機能を持っています。

上のDGIndexで分離した音声ファイルは、ファイル名に自動的にこの情報が含まれます。例えば音ズレが100ミリ秒あった場合、音声データのPIDが112で出力ファイル名を「output」とすると、
output PID 112 DELAY -100ms.aac
という音声ファイルが出力されます。このファイルをFakeAacWavで開いてwavファイルに変換すると、
output PID 112 DELAY 0ms_aac.wav
という音ズレが修正されたファイルが出力されるのです。


ちなみにバッチファイルで処理する場合に入力ファイル名の指定が必要ですが、上記のようにファイル名にディレイ情報が埋め込まれるため、毎回ファイル名が違ってしまいます。そのため下のような処理をします。

for %%i in ("ファイル名*.aac") do 処理

これはファイル名から始まるaacファイルを検索し、見つけたファイルを処理するプログラムです。見つけたファイル名は「%%i」に入っています。
コマンドfor %%i in ("ファイル名*.aac") do fawcl.exe "%%i"


ソフト名FAAD 改造版
説明音声データをaac形式からwav形式に変換するソフト。

このソフトも上記FakeAacWavと同じように、入力ファイル名にディレイ情報(音ズレ情報)が指定されていると、それを修正して出力してくれる機能を持っています。

ただしこちらのソフトはaacからwavにしっかりデコード処理されます。ですので変換されたファイルは純粋なwavファイルであり、プレイヤーで再生できます。

私はFakeAacWavのデコード・エンコード処理をしないで編集できるという点が、余計な処理が間にない分処理が早くて劣化も少ないと思い、FakeAacWavを使っています。ですが擬似的な変換であるため動画のエンコード時にもFakeAacWavを使うための設定が必要となり、音質はどうでもいいよって人はFAADを使った方が設定は楽だと思います。

ただしFAADを使った場合は、FAADはaacをwavに変換するだけで逆にwavをaacに変換することはできないので、動画のエンコード時に別の音声エンコードソフトを準備する必要があります。
コマンドfor %%i in ("ファイル名*.aac") do faad.exe "%%i"


以上の処理で、編集可能な
映像(d2v)ファイルと、音声(wav)ファイルが完成します。
ちなみにd2vファイルの読み込みは

AviUtlの場合
[ファイル]→[環境設定]→[システムの設定]
→[aviutl.vfpをVFPlugin登録]のチェックを入れる

AviSynthの場合
LoadPlugin("DGDecode.dll")

で可能になります。
DGDecode.dllはDGIndex.exeと同じフォルダにあります。


動画の編集やエンコードについては、またそのうち
詳しく書こうと思います。

0 件のコメント:

コメントを投稿