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

多局ブレンドのエンコードについて
ここで紹介する多局ブレンドというのは、同じ番組の放送局が違うソースを重ね合わせてノイズを抑えるエンコードの方法です。

画像の比較
BSJ.png
BSJ

TX.png
TX

BSJ+TX.png
BSJ+TX (7:3)

利点
局によってノイズの出方が異なるので、これを重ね合わせるとノイズ部分が平滑化され、全体的な画質の向上が見込めます。ノイズが減ることでファイルサイズを抑える効果もあります。

難点
まず手間がかかることが挙げられます。2局分のCMカット/逆テレシネなどの基本処理に加えて、CM明けの開始フレームのズレがあるため、パートごとに確認・修正の作業が必要です。フレームの縦横位置がずれている場合は位置合わせも必須です。
他にもエンコードの速度低下、多局ソース確保の日時的な遅れなどもあり、番組によっては難しい手段となります。
※VFRなmp4の場合、結合すると不具合が出るかもしれません。

方法
1.多局のソースを用意し、パートごとに切り分け、逆テレシネを行う。
※Itsを使用する場合は、Itsを複数箇所で同時に使用することができない為、Its1.dll,Its2.dllなどとして複数のファイルを用意し局ごとに違うItsをロードする必要があります。

各局・パートごとに用意するavs
#video = MPEG2source("datafile\datafile.d2v")
#audio = WAVSource("datafile\datafile.wav")
#AudioDub(video, audio)
MPEG2source("datafile\datafile.d2v")
AssumeTFF()
Import("Trim1.txt")
Its(def = "time1.def", fps=-1, output = "datafile\timecode.tmc")
Spline36Resize(1440,last.height,-0.2,0,1920,0)
#Loop(2,0,0)
#DeleteFrame(0)

AssumeFPS("ntsc_film")
return last

2.パートごとに分けたavsをOverlayによって重ねあわせ、開始フレームの位置をあわせる。
開始位置合わせは、LoopやDeleteFrameを使用するのが簡単。

まとめavs
V1=AVIFileSource("局1.avs") 音声入りのavsをV1で読み込む。
V2=AVIFileSource("局2.avs")
overlay(V1,V2,opacity=0.5)
Spline36Resize(1280,720)
return last

3.まとめavsをエンコードする
エンコード後、パートごとのmp4を結合する。

補足
フレームの縦横位置は意外とずれている事が多いので、AvsPmodで拡大して比較するとわかりやすいです。
細かい位置合わせにはリサイズを使用します。

局の画質に優劣がある場合はOverlayのopacityを調整すると良い結果になります。

フレームの状態によっては片方の局がノイズが多くて足を引っ張る事もありますが、
動画としては安定した画質になるので一度試してみる事をおすすめします。

さらなる安定化を計るには間引きフィールドのブレンドという手もありますが、これは気持ち程度の効果です。
自動化に組み込めるので、手間がかからないという意味では良いかもしれません。
間引きフレームのブレンド 間引きフレームのブレンドの記述

スポンサーサイト
テレシネと逆テレシネについて
テレシネとは、フィルム映像の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を使うと自動化できます。
間引きフレームのブレンド の記述
前回の間引きフレームのブレンドで書いた事を実用するならこんな感じになるかと思います。
一部をのぞく4フレーム中2フレームがブレンド処理されてノイズを緩和できるはず。地味ですが。
シーンチェンジで縞が出る場合、微妙にブレンドされてしまうのがネック。


[avs]
...
DW023a=DoubleWeave().SelectEvery(5, 0, 2)
DW023b=DoubleWeave().SelectEvery(5, 0, 3)
DW013a=DoubleWeave().SelectEvery(5, 0, 3)
DW013b=DoubleWeave().SelectEvery(5, 1, 3)
DW134a=DoubleWeave().SelectEvery(5, 1, 3)
DW134b=DoubleWeave().SelectEvery(5, 1, 4)
DW124a=DoubleWeave().SelectEvery(5, 1, 4)
DW124b=DoubleWeave().SelectEvery(5, 2, 4)
DW024a=DoubleWeave().SelectEvery(10, 0, 2, 5, 7) *
DW024b=DoubleWeave().SelectEvery(10, 0, 2, 4, 7) *
Its(def = "time.def", fps=-1, output = "datafile\timecode.tmc")
...

*:a,bで選択フレームがズレてしまうので、ここだけ処理が異なります。

[def]
...
Set [24] DW023='Overlay(DW023a,DW023b,opacity=0.5)'
Set [24] DW013='Overlay(DW013a,DW013b,opacity=0.5)'
Set [24] DW134='Overlay(DW134a,DW134b,opacity=0.5)'
Set [24] DW124='Overlay(DW124a,DW124b,opacity=0.5)'
Set [24] DW024='Overlay(DW024a,DW024b,opacity=0.5)'
...
0-17589 [24] DW013 # 17590
17590-41954 [24] DW024 # 24365
41955-43153 [24] DW013 # 1199

間引きフレームのブレンド
「他局の同一ソースをOverlayで重ねるとノイズが緩和されて綺麗なフレームができる」
という豆知識の応用、と言うか灯台下暗し的な話。

24p→30pのテレシネ化の際にフレームが水増しされているので、
それを「間引く」のではなく「ブレンド」したらどうなる?
実験。

1945_1.png
DoubleWeave().SelectEvery(5, 0, 2)

1945_2.png
DoubleWeave().SelectEvery(5, 0, 3)

1945_12.png
DoubleWeave().SelectEvery(5, 0, 0, 2, 3).AssumeFieldBased().Weave().BilinearResize(last.width,1080)
a=DoubleWeave().SelectEvery(5, 0, 2)
b=DoubleWeave().SelectEvery(5, 0, 3)
Overlay(a,b,opacity=0.5)

たった1フィールドの差ですが、ノイズを打ち消し合って比較的マシなフレームに落ち着いていると思います。

ただし、片方が綺麗なフレームでも片方がノイズだらけ、という場合も結構あるので
そういう場合は綺麗な方だけを使うのが理想的ではあります。
でもどっちが綺麗かは該当するフレームを目視で比べてみないとわからないので、
ブレンドしちゃえば手っ取り早くベターな結果を残せる
と思うんですが、どうでしょう。


追記
weave+リサイズだと若干ボケるので、やはりoverlayが無難かも。


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