続フィールドオーダーのナゾ


はじめに
 フィールドって難解ですよねえ。おいらも訳がわからなかったので、いろいろ調べてフィールドオーダーのナゾなんてものを書いたわけですが、その後掲示板情報などからいろいろ判明してきたことがありまして、そいつをちょっと書きとめてみたいと思います。ちょっと取り留めの無い話になっちゃっているんで、読みにくいかも。。。(;´Д`)

(注)情けないことに、一部フィールドオーダーのナゾと食い違っている部分もあります。このページの方が正しいと思いますので、こちらを信じてください(滝汗

フィールドオーダーってなんだろう
 いまさらこんな事言うのかっ、というツッコミは承知の上です(^-^;; 一言で言うと、「フレームのうち、どちらのフィールドを先に表示させるか」です。が、どうしてケースバイケースで順番を変えるのでしょうか。単純に動画をキャプチャさせているだけなのに。。。

TV放送
 TV放送、日本ではNTSCですが、フィールドオーダーのナゾで触れたとおり、59.97フィールド/secのインターレース画像です。


Fig1.NTSC放送

 この図を見てください。TV放送は単純にトップとボトムフィールドを交互に送ってきており、それを素直にTVに表示しているだけです。ここでフィールドオーダーを定義できるでしょうか? う〜〜ん、単純にフィールドを交互に送っているだけに過ぎず、フィールドオーダーという考え方はできないように思えます。どこを起点に取れば良いかわからないですよね? 番組の区切り? でも、それは実際に延々とキャプチャすればわかりますが、トップ−ボトムが切れ目だったりボトム−トップが切れ目だったり一定していません。とりあえず言えることは、放送局側でどちらが先か、と特に意識していないように見える、ということです。

キャプチャ
 じゃあ、キャプチャするときはどうなるでしょうか。現在のアナログキャプチャはフレーム単位でキャプチャします。フレーム単位、ということは両フィールドをひとつとしてキャプチャする訳です。ん? フレーム単位?


Fig2.フレームの選び方

 フレーム単位、ということは、そのフレームの取り方に図の通り2種類考えられます。どちらもフレームとしてはトップ+ボトムで構成されていて、問題ありません。じゃあ何が違うの?

 (A)の場合、トップ→ボトムを1フレームとしているので、フレームのうちトップを先に
    表示するようにしないと正常になりません。
 (B)の場合、逆にボトム→トップを1フレームとしているので、ボトムを先に表示しないとダメですね。

 おおお、フィールドオーダーらしきものが出来ましたっ。

 なんか煙に巻かれたような話ですが、フィールドオーダーなんていうややこしい概念が出てくるのは、インターレース素材をフレームでキャプチャしている事に全ての原因があります。もし、フィールド単位でキャプチャしていれば、時間軸に破綻が生じるわけはないので、何も考える必要は無くなるんです。ですが、2フィールド1組で取り込むフレームキャプチャでは、どちらのフィールドを先に表示すべきか指定することが必要になってしまいます。そして、困ったことにアナログキャプチャではフレームの選び方に特に規定は無いために、ユーザを更に混乱させています。

 実際には、
 (A)・・・Bt8x8のRGB系、PCProのRGB無圧縮、(DVD、MTV1000)
 (B)・・・PCProのMJPEG、DV、(WinTV PVRのMPEG2)

  ※Bt8x8のYUY2系は論外(;´Д`) もっとも、Codecで反転させれば(A)と同じになります。

となっています。Bt8x8はDVと反対になっていますね。だからフィールドオーダーも反対にしなければならないわけです。ちなみに、DVは(B)ボトムが先で決まっているのに対し、DVDは(A)トップが先と決まっているそうです。なんでやねん凸(−−#) どっちかに統一せいっ。

 蛇足ながらMPEG2のフィールドエンコードストリームは、内部にフィールドオーダーを示すフラグを持っていますので、どちらでも良いことになっています。が、それによる弊害もちょっとありますんで、それは後ほど触れます。

その他フィールドオーダーに関する事項
 フィールドオーダーの概念を知っていただいたところで、それに関するTipsをつらつらと書き綴ってみたいと思います。ここから先は統一性の無い話題になりますので、ちょっと読みにくいですが我慢してください(汗

TMPGEncのフィールドオーダーの扱い
 TMPGEncにフィールドオーダーの設定がありますが、これは1フレームのうち、どちらが時間的に先か、を決める文字通りの動作をしています。例えば、

フレーム  ・・・
トップ At Bt Ct Dt Et
ボトム Ab Bb Cb Db Eb

 というフィールド構成の映像データがあったとします。これをTMPEGEncに読みこませ、内部で処理されるフィールド順を表示すると、

 1)「トップフィールドを先に表示させる」
  AtAbBtBbCtCbDtDbEtEb・・・

 2)「ボトムフィールドを先に表示させる」
  AbAtBbBtCbCtDbDtEbEt・・・

 となります。この方法の特徴は、どちらに設定してもフレーム内のフィールドの組み合わせは変わらず、フィールド順を変えてもフレーム構造が変化しないことです。フィールド順が影響する操作は、TMPGEncの場合、
 1)24fps化、30fps化、60fps化などの、フィールド操作を伴ったフレームレート変換
 2)MPEG2エンコードの場合、フィールドオーダーフラグのセット
の2つだけです。したがって、この2つの操作をしない使い方なら、出力に影響しないためどちらでも構わないことになります。

AviUtlのフィールドオーダーの扱い
 AviUtlの場合は、TMPGEncと異なります。AviUtlは常にボトムフィールドから読むため、フィールドオーダーの反転は、ボトムフィールドを1フレーム遅らせる事によって実現しています。上の映像データにまた出てきてもらいますが、

1)「奇数ラインを1フレーム遅らせる」OFFのとき。
フレーム
トップ At Bt Ct Dt Et
ボトム Ab Bb Cb Db Eb

2)「奇数ライン〜」ONのとき。
フレーム
トップ At Bt Ct Dt Et
ボトム Ab Ab Bb Cb Db Eb
      ↑Abのコピー    ↑Ebがはみ出るが、破棄される

 1)はそのままですが、2)はボトムフィールドを1フレーム全体的に後ろに動かし、隙間の開いたフレーム1ボトムフィールドは、元の画像のコピーを使用するようです(=Ab)。また、後ろに動かしてはみ出てしまったフィールドEbは破棄されるようです。この2つをボトムフィールドから読むと、

 1)のとき
  AbAtBbBtCbCtDbDtEbEt

 2)のとき
  AbAtAbBtBbCtCbDtDbEt

となります。2)は1)と比べてトップ−ボトムの順番が入れ替わっているのが分かります。この方法の特徴は、フレーム構造を変化させることにあり、たとえ24fps化などを行っていなくても、出力される映像のフィールドオーダーが変化します。もっと平たく言うと、AviUtlは、ボトムフィールドを先に表示させる映像データを前提にしているので、トップが先の映像を「奇数ライン〜」をONにして読み込ませると、DVなどと同じボトムが先の映像に変換されます。また、フレーム構造を変化させるので、ノンインターレースな映像をONで読みこませてしまうと、映像が壊れてしまうことが分かります。ここらへんがTMPGEncと大きく異なる点です。

VFAPIを駆使するとき
 TMPGEncとAviUtlでフィールドオーダーの扱いが異なることは分かってもらえたと思います。そのまとめとして、VFAPIでデータをやり取りしたときの設定例を示します。前提としては、Bt8x8でキャプチャした、トップが先に表示されるデータをソースとします。

1)ケース1 TMPGEncで24fps化→AviUtlでMPEG4出力
 「トップフィールドを先に表示させる」、「奇数ライン〜」OFF

2)ケース2 AviUtlで24fps化→TMPGEncでMPEG出力
 「奇数ライン〜」ON、どちらでも構わない

3)ケース3 TMPGEncでゴースト除去→AviUtlで24fps化→TMPGEncでMPEG化
 どちらでも構わない、「奇数ライン〜」ON、どちらでも構わない

4)ケース4 AviUtlでフィルタ処理→TMPGEncでMPEG2(インターレース)
 「奇数ライン〜」OFF、「トップフィールドを先に」(推奨)
 または、「奇数ライン」ON、「ボトムフィールドを先に」
 前者を推奨するのは後述します(DVDプレーヤーのナゾの項)。

 この他にも様々なケースがあるかと思いますが、「AviUtlはフレーム構造が変化・出力に影響、TMPGEncは構造変化無し・影響無しと」覚えておけば良いかと思います。

 またまた蛇足ですが、ボトムが先の映像を、AviUtlの「奇数ライン〜」ONで読みこむと、時間軸的にフィールドがばらばらになります(汗 残念ながらトップが先にはなりません。これは各自紙にでも書いてフィールドをいじってみれば分かると思います。

※VirtualDUBは編集に使ったことが無いのでわかりません(滝汗

DVDプレーヤーのナゾ
 MPEG2はご存知の通り、フィールドエンコードをサポートしており、24fps化などのインターレース解除の手間が要らない、という利点をもっています。が、一般に出回っているMPEG2が再生できるソフトというのは、ソフトウェアDVDプレーヤーです。既に述べたとおり、DVDはトップが先と決まっています。

 じつは、この事がほんの少し弊害をもたらしていて、ほとんどのDVDプレーヤーはMPEG2フィールドオーダーフラグを見ずに、TOP First決めうちでデコードしています。このプレーヤーにBottom FirstなMPEG2を再生させると、時間軸的に逆にデコードされるため、動きがカクカクしたり、テロップ等の輪郭がギザギザになったり、デインタレース処理が誤動作します。

 われわれローコス勇者(笑 は、トップが先の映像がキャプチャされるので問題ありませんが、PCPro、DVユーザーの方が困った事になってしまいます。前述の通り、ボトムが先の映像をトップが先にするのは容易では無いからです。

 が、安心してください。私がその方法を編み出しました(笑

 ・方法1
  1)AviUtlで読みこみ、全範囲指定で「編集」-「選択範囲のインターレース解除を指定」
   -「反転」を選び、プロジェクトを保存する「奇数ライン〜」はもちろんOFF
  2)TMPGEncでそのプロジェクトをソースに、「トップフィールドを先に」でMPEG2エンコード。

 ・方法2
  1)TMPGEnc「ボトムフィールドを先に」で読みこみ、24fps化画面で"b"フレームのみを
    選ぶ30fps化を行ってプロジェクト保存。
  2)そのプロジェクトをソースに、「トップフィールドを先に」でMPEG2エンコード。

 やっていることは、「奇数ライン〜」とは逆に、トップフィールドを1フレーム遅らせる操作を行っています。それをこの2つの方法で実現可能です。どうしてそうなるかは、各自紙にでも書いて悩んでください(ぉぃ

※全てのプレーヤーがフラグを見ないか、と言うとそうでも無いようです。が、まだ情報が
 錯綜しているので何とも言えません。少なくともG400付属のMatrox DVD Playerはダメでした(;´Д`)

30fps動画
 CMや、最近のデジタルなアニメは、30fpsの作品があります。これをフレームキャプチャを行うと、それだけでインターレース縞の無い動画ができそうですね。

 が、現実にはそううまく行きません(汗 前述の通り、フレームの選び方が任意であること、さらに放送側にフレームと言う概念が無い様子であることから、CMによっては全編縞あり、別のものは縞無し、なんていう現象が起きます。これはぞれぞれ、インターレース解除処理を行わないとダメですね。

 よく、CMの区切りがフィールドにまたがったからフィールドオーダーが逆だ、と言う方がいらっしゃいますが、誤りです。冒頭に書いたとおり、区切りは特に一定していない様子だからです。フィールドオーダーはそのキャプチャカードがどのフィールドの組み合わせでフレームを構成しているか、で決まるもので、映像の内容で決めるものではありません。もっとも、縞無しな30fps作品をキャプチャできたら、その時点で既にプログレッシブ化されたと言えるので、フィールドオーダーもくそもあったもんじゃないですが(;´Д`)

(注)小生、放送局のことは良く知らないので、ツッコミがあったらお願いします(汗

今後も、何かフィールドネタがあったら付け加えていきたいと思います。

 戻る


 Copyright(C) もりのみやこ

hi6@nnet.ne.jp