トップ(ボトム)フィールドにのみ出ているロゴを除去します。
スクリプト
function FieldShift( clip clip, bool plusShift ) { clip = clip.AssumeTFF().SeparateFields() clipA = clip.SelectEven() clipB = clip.SelectOdd() lastFrame = clipA.Framecount() - 1 clipB = ( plusShift ) ? clipB.trim(1,0) + clipB.trim(lastFrame, lastFrame) : clipB.trim(0,-1) + clipB.trim(0, lastFrame - 1) clip = Interleave(clipA, clipB).Weave() return clip } function DwShift( clip clip, bool plusShift ) { clip = clip.DoubleWeave() clip = clip.FieldShift( plusShift ) return clip } function UnDwShift( clip clip, bool plusShift ) { clip = clip.FieldShift( plusShift ) clip = clip.SelectEven() return clip }
VFR maniac 氏作です。
使い方
拡張子を.avsiにしてpluginsフォルダに入れてください。
Importしてもいいです。
片フィールドロゴのフレームをDwShiftとUnDwShiftで挟みます。
出現する場合は「フレーム番号*2-1」を、消失する場合は「フレーム番号*2」を与えます。
BFFの場合は逆です。
lgd = "C:\lgd\sample.lgd" # 普通のロゴ除去 EraseLOGO(logofile=lgd, start=101, end=199, interlaced=true) # 片フィールドロゴ除去 DwShift(true) EraseLOGO(logofile=lgd, start=100*2-1, end=100*2-1, interlaced=true) EraseLOGO(logofile=lgd, start=200*2, end=200*2, interlaced=true) UnDwShift(false)
この場合、フレーム番号100と200が片フィールドロゴ除去されます。
コメント
ロゴが出現するときや消失するときに片フィールドだけのことがあり、このサイトにたどり着きました。確かに、記事の通りにすると、ロゴがきちんと消えました。
しかしながら、違和感を感じます。確かにstart=1000*2-1, end=1000*2とすれば、1000フレーム目の両フィールドが消えますが、start=1000*2, end=1000*2+1をしたほうが自然に感じるのは私だけでしょうか。
私にとっては
0フレーム → 0フィールドと1フィールド
1フレーム → 2フィールドと3フィールド
2フレーム → 4フィールドと5フィールド
に感じるのです。
両フィールドを消すならこの関数を使う必要はありませんが、なぜそうしたいのでしょうか?
この関数はVFR maniac 氏が作成したものなので、私は仕組みについて詳しく知りません。
VFR maniac 氏がこの関数を紹介している記事は今はありませんが、Internet Archiveにあったのでそちらも読まれるといいと思います。
https://web.archive.org/web/20100215013449/http://zoome.jp/VFR_maniac/diary/79/
お返事ありがとうございます。
私が書いたようにすると、例えば記事のように、100から200フレームのロゴを消したくて、100フレーム目(出現)と200フレーム目(消失)が片フレームなら、100フレーム目の後半201フィールドから200フレーム目の前半400フィールド目までとなるので、
DwShift(true)
EraseLOGO(logofile=lgd, start=100*2+1, end=200*2, interlaced=true)
UnDwShift(false)
とすれば、両フィールドも片フィールドも分けずに、通しで設定できるからです。
そのままだと、199、201~398、400フィールドに設定していることになるからです。
また、別の理由として、0フレーム目が片フィールドで出現なら、-1フィールドになってしまうからというのもあります。
お示しのURLも拝見しましたが、この疑問は消えませんでした。
そういう使い方は想定されていないと思います。
通しで設定できる関数は他にあったと思いますが、最近AviSynthを使っていないので思い出せません。
わかりました。ありがとうございました。