FC2ブログ
にわとり遊び
PC関連とエンコードの覚書き
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

テレシネと逆テレシネについて
テレシネとは、フィルム映像の24fps (24p) をテレビ放送の30fps (60i) に合わせて変換する事を言い、
それを元に戻すのが逆テレシネです。

※この記事はちゃんとした知識のもとに書かれたものではないので、
間違いがあったら教えていただけるととても助かります。


テレシネの種類


24pソース
24p.png

24fpsのソースです。ここでは1-4までの4枚のフレームで表しています。時間的には1/6秒の区間です。
テレシネではこれを30fpsの映像へと変換するため、4枚から5枚へとフレーム数が増え、
インターレース方式によりトップフィールド/ボトムフィールドへと分割されます。



23プルダウン
23pulldown_20140611001003b04.png

各フレームを2フィールド、3フィールド、2フィールド、3フィールドという順番で表示するため23プルダウンと言います。
32プルダウン、2323プルダウンとも。
フレームの増加に伴う違和感が少ないため、24pソースをテレシネする際に多く使われている方式です。
なお、上図をTFF(トップフィールドファースト)とすると、BFFは下図のように表せます。

23pulldownBFF.png



2332プルダウン
2332pulldown.png

23プルダウンと似ていますが、フィールド増加のタイミングが異なります。



2224プルダウン
2224pulldown.png

インターレースを使用せず、フレーム単位で1枚多く表示する方式。
単純なだけに、増フレームによる違和感が多くなります。



逆テレシネ


Avisynthでの逆テレシネにはDoubleWeaveとSelectEveryを使います。
DoubleWeaveはフィールドを2倍に増やす効果があり、
結果的にテレシネ前のプログレッシブフレームを作り出す事が出来ます。
そのままでは余分なフレームがあるので、SlectEveryで必要なフレームだけを取り出します。
フィルタの適用方法は色々ありますが、今回はItsを利用した5フレーム区切りの間引きを前提として書きます。


23プルダウンのDoubleWeave
23pulldown_20140611001003b04.png
                   
23pulldownDW.png

2332プルダウンのDoubleWeave
2332pulldown.png
                   
2332pulldownDW.png

Avisynthではフレームのカウントが0からスタートするので、図の23プルダウンの例では0,2,3,5,7,8がプログレッシブフレームとなり、2と3、7と8、はそれぞれダブりフレームとなるので通常はどちらかを選択します。

ここまでをフィルタで表すと DoubleWeave().SelectEvery(10,0,2,5,7) となりますが、繰り返しになるので
DoubleWeave().SelectEvery(5,0,2) として後半を省略しても同じ結果になります。

2332プルダウンの例では DoubleWeave().SelectEvery(10,0,2,5,8) でプログレッシブフレームが取り出せます。
2224プルダウンに関してはそのままSelectEvery(5,0,1,2,3)で重複フレームを間引きます。


間引きフレームのブレンド
blend.png

DoubleWeaveでダブったフレームを捨てるのが通常の間引きですが、それをブレンドすることで
ソースのノイズを多少緩和できます。詳しくは以下の記事を参照。
間引きフレームのブレンド 間引きフレームのブレンドの記述



特殊な例1
テレシネ後編集によるフィールドのズレ
23pulldown2.png
                    DoubleWeave()
23pulldown2DW.png
                    SelectEvery(5,0,2)
23pulldown2DWSE.png

テレシネ後の映像が継ぎ接ぎされていると、前後のテレシネ周期が同じでもDoubleWeaveでプログレッシブフレームが作り出せない場合があります。

通常の方法ではインターレースフレームが残ってしまうので、私は逆テレシネの後に条件フィルタを使っています。
Field2=yadif(Mode=1).SelectEven()
ConditionalFilter(last,Field2,last,"IsCombedTIVTC(blockx=512,blocky=512,MI=100000)","=","true")
一定以上の縞を検出した場合にbob化した片方のフィールドを自動的に選択します。
この例では5TをBob化して使います。

条件フィルタによるフレームの置き換え
23pulldown2bob.png



特殊な例2
テレシネ周期の変化
23pulldown3.png
                    DoubleWeave()
23pulldown3DW.png

こちらは、テレシネ素材が継ぎ接ぎされている場合で前後のテレシネ周期が異なる場合です。
これをSelectEveryで間引くなら、SelectEvery(10,1,3,5,7)がベターだと思います。3がインターレースフレームとなるので、「特殊な例1」で紹介した条件フィルタを利用できます。


Bobを適用した場合(DupMC2DefのBSModeを利用した間引き)
23pulldown3bob.png
                   
23pulldown3bobSE.png
この例では周期の変わり目を省いた1,4,5,7を利用し、yadif(Mode=1).SelectEvery(10,1,4,5,7)となります。



30pソース
30p.png

全てプログレッシブフレームで、特に何もする必要のないストレートなソースです。


30pB.png

同じ30fpsでもフィールドのズレによりインターレースフレームとなる場合があります。
この場合は DoubleWeave().SelectOdd() でプログレッシブフレームに戻せます。



60pソース
60i.png

全フレームがインターレースフレームです。
プログレッシブフレームにするためには、Bob系のフィルタを使って足りないフィールドを補完する必要があります。

60p.png



なお、ここで紹介した逆テレシネ処理は、DupMC2Defを使うと自動化できます。
スポンサーサイト

コメント

コメントの投稿














管理者にだけ表示を許可する


トラックバック
トラックバック URL
http://sasamisi.blog24.fc2.com/tb.php/280-feea5483
この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。