片フィールドロゴ除去補助関数

スポンサーリンク
スポンサーリンク
エンコード

トップ(ボトム)フィールドにのみ出ているロゴを除去します。

スポンサーリンク
スポンサーリンク

スクリプト

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が片フィールドロゴ除去されます。

スポンサーリンク
スポンサーリンク
エンコード
thtsfをフォローする
スポンサーリンク
スポンサーリンク

コメント

  1. ho より:

    ロゴが出現するときや消失するときに片フィールドだけのことがあり、このサイトにたどり着きました。確かに、記事の通りにすると、ロゴがきちんと消えました。

    しかしながら、違和感を感じます。確かにstart=1000*2-1, end=1000*2とすれば、1000フレーム目の両フィールドが消えますが、start=1000*2, end=1000*2+1をしたほうが自然に感じるのは私だけでしょうか。

    私にとっては
    0フレーム → 0フィールドと1フィールド
    1フレーム → 2フィールドと3フィールド
    2フレーム → 4フィールドと5フィールド
    に感じるのです。

    • thtsf より:

      両フィールドを消すならこの関数を使う必要はありませんが、なぜそうしたいのでしょうか?
      この関数はVFR maniac 氏が作成したものなので、私は仕組みについて詳しく知りません。
      VFR maniac 氏がこの関数を紹介している記事は今はありませんが、Internet Archiveにあったのでそちらも読まれるといいと思います。
      https://web.archive.org/web/20100215013449/http://zoome.jp/VFR_maniac/diary/79/

  2. ho より:

    お返事ありがとうございます。

    私が書いたようにすると、例えば記事のように、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も拝見しましたが、この疑問は消えませんでした。

    • thtsf より:

      そういう使い方は想定されていないと思います。
      通しで設定できる関数は他にあったと思いますが、最近AviSynthを使っていないので思い出せません。

  3. ho より:

    わかりました。ありがとうございました。

タイトルとURLをコピーしました