この記事は半分ギャグのような力技なので使わないで下さい。もう少しまともなアプローチの改良版はこちらにあります。MXの速報がテロップからL字に変わってアニメ放送中のL字に何度も遭遇しているけれど、最初に調べた
R.O.Dの時にも書いた通り、多少問題はあっても及第点程度の絵には戻すことはできるはず、というところで実験で作ったものを参考に書いておこう。動画加工に興味ない人はスルーして下さい。
MXのL字は、開始から30フィールドを使って少しずつ目的のサイズに伸びてきて、同様に30フィールドを使って少しずつ隠れていきます。L字中はすべてフィールドごとに処理されている状態のため、開始後の30フィールドと終了前の30フィールド以外は同じ処理で問題なし。
L字の大きさが変わるところは1フィールドずつ状態が異なるので、だったら1フィールドずつそれなりの絵になるようにリサイズしてやればいいだけ、という単純なアプローチで元の絵に近い状態に復元してしまおう。
L字の開始位置と終了位置を指定することで、間のフィールドを全部元のサイズにしてしまう処理をAvisynthで関数化したもの。
function DeLetterL_sub(clip "c", int "cl", int "cb", int "s", int "e"){ e = default(e, s) t = c.trim(s, e) return t.crop(cl, 0, 0, -cb).Lanczos4Resize(1440, 540)}function DeLetterL(clip "c", int "s", int "e"){i0 = DeLetterL_sub(c, 6, 2, s+0)i1 = DeLetterL_sub(c, 12, 4, s+1)i2 = DeLetterL_sub(c, 18, 7, s+2)i3 = DeLetterL_sub(c, 24, 9, s+3)i4 = DeLetterL_sub(c, 30, 11, s+4)i5 = DeLetterL_sub(c, 36, 13, s+5)i6 = DeLetterL_sub(c, 41, 15, s+6)i7 = DeLetterL_sub(c, 47, 17, s+7)i8 = DeLetterL_sub(c, 53, 19, s+8)i9 = DeLetterL_sub(c, 59, 22, s+9)inpart1 = i0+i1+i2+i3+i4+i5+i6+i7+i8+i9i10 = DeLetterL_sub(c, 65, 24, s+10)i11 = DeLetterL_sub(c, 71, 26, s+11)i12 = DeLetterL_sub(c, 76, 28, s+12)i13 = DeLetterL_sub(c, 82, 30, s+13)i14 = DeLetterL_sub(c, 88, 33, s+14)i15 = DeLetterL_sub(c, 94, 35, s+15)i16 = DeLetterL_sub(c, 100, 37, s+16)i17 = DeLetterL_sub(c, 106, 39, s+17)i18 = DeLetterL_sub(c, 111, 41, s+18)i19 = DeLetterL_sub(c, 117, 43, s+19)inpart2 = i10+i11+i12+i13+i14+i15+i16+i17+i18+i19i20 = DeLetterL_sub(c, 123, 46, s+20)i21 = DeLetterL_sub(c, 129, 48, s+21)i22 = DeLetterL_sub(c, 135, 50, s+22)i23 = DeLetterL_sub(c, 141, 52, s+23)i24 = DeLetterL_sub(c, 146, 54, s+24)i25 = DeLetterL_sub(c, 152, 56, s+25)i26 = DeLetterL_sub(c, 158, 59, s+26)i27 = DeLetterL_sub(c, 164, 61, s+27)i28 = DeLetterL_sub(c, 170, 63, s+28)i29 = DeLetterL_sub(c, 175, 65, s+29)inpart3 = i20+i21+i22+i23+i24+i25+i26+i27+i28+i29inpart = inpart1+inpart2+inpart3lpart = DeLetterL_sub(c, 181, 67, s+30, e - 30)o0 = DeLetterL_sub(c, 175, 65, e-29)o1 = DeLetterL_sub(c, 170, 63, e-28)o2 = DeLetterL_sub(c, 164, 61, e-27)o3 = DeLetterL_sub(c, 158, 59, e-26)o4 = DeLetterL_sub(c, 152, 56, e-25)o5 = DeLetterL_sub(c, 146, 54, e-24)o6 = DeLetterL_sub(c, 141, 52, e-23)o7 = DeLetterL_sub(c, 135, 50, e-22)o8 = DeLetterL_sub(c, 129, 48, e-21)o9 = DeLetterL_sub(c, 123, 46, e-20)outpart1 = o0+o1+o2+o3+o4+o5+o6+o7+o8+o9o10 = DeLetterL_sub(c, 117, 43, e-19)o11 = DeLetterL_sub(c, 111, 41, e-18)o12 = DeLetterL_sub(c, 106, 39, e-17)o13 = DeLetterL_sub(c, 100, 37, e-16)o14 = DeLetterL_sub(c, 94, 35, e-15)o15 = DeLetterL_sub(c, 88, 33, e-14)o16 = DeLetterL_sub(c, 82, 30, e-13)o17 = DeLetterL_sub(c, 76, 28, e-12)o18 = DeLetterL_sub(c, 71, 26, e-11)o19 = DeLetterL_sub(c, 65, 24, e-10)outpart2 = o10+o11+o12+o13+o14+o15+o16+o17+o18+o19o20 = DeLetterL_sub(c, 59, 22, e-9)o21 = DeLetterL_sub(c, 53, 19, e-8)o22 = DeLetterL_sub(c, 47, 17, e-7)o23 = DeLetterL_sub(c, 41, 15, e-6)o24 = DeLetterL_sub(c, 36, 13, e-5)o25 = DeLetterL_sub(c, 30, 11, e-4)o26 = DeLetterL_sub(c, 24, 9, e-3)o27 = DeLetterL_sub(c, 18, 7, e-2)o28 = DeLetterL_sub(c, 12, 4, e-1)o29 = DeLetterL_sub(c, 6, 2, e-0)outpart3 = o20+o21+o22+o23+o24+o25+o26+o27+o28+o29outpart = outpart1+outpart2+outpart3return c.trim(0, s-1)+inpart+lpart+outpart+c.trim(e+1, 0)}力技らしく思いっきり冗長で、諸事情で無駄もあるけれど、使い方はフィールドオーダーが正しいことを確認した上で、フィルードに分け、L字の範囲をフィールドの位置で指定して、戻すだけ。
#separatefields()ConvertToRGB24()DeLetterL(45980, 51168)ConvertToYUY2()weave()#インタレ解除とかは後で劣化覚悟でRGB化するのは微妙なサイズからのリサイズになるため。全体をこれで処理するとよろしくないので、L字の始まるカットの冒頭から、終了のカットの終わるところまでを切り出した上で処理した方が無難かな。45980と51168の数字は先週のかんなぎ@MXの番組の最初を0フレームとした場合の数字なので、同じところで切れば2~4程度の補正で合うはず。
やってみるとわかるけれど、この処理の後でもL字が少し残った状態になる。というのもL字が元の映像の一部にかぶってしまっているためで、この範囲は少し余分に切り取って誤魔化すとか、さらに面倒な作業も必要だったりするので覚悟の上でのチャレンジがおすすめ。今まで確認した限り、MXのL字は常に同じ挙動なので、他でも開始、終了位置を変えるだけで使えます。
フィールドごとのリサイズの数字はTSで適当に調整したものですが、1440x1080でのキャプであれば、変更は不要のはず。この数字も調整が少し雑なので、さらに微調整することでもっとよい状態にもできると思います。