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

avsの小ネタ その2
■多局ソースのブレンド

・TX
video = MPEG2source("TX\datafile\datafile.d2v")
audio = WAVSource("TX\datafile\datafile.wav")
AudioDub(video, audio)
Import("TX\Trim1.txt")
EraseLOGO(logofile="D:\Movie\logo\TX_1440x1080.lgd", start=5, fadein=0, fadeout=0, end=framecount()-0)
#間引き
Its(def = "TX\time1.def", fps=-1, output = "TX\datafile\timecode.tmc")
#縞除去
Field2=yadif(Mode=1).SelectEven()
ConditionalFilter(last,Field2,last,"IsCombedTIVTC(blockx=512,blocky=512,MI=100000)","=","true")
#フレームレート固定
AssumeFPS("ntsc_film")
return last

・BSJ
video = MPEG2source("BSJ\datafile\datafile.d2v")
audio = WAVSource("BSJ\datafile\datafile.wav")
AudioDub(video, audio)
Import("BSJ\Trim1.txt")
logo_file="D:\Movie\logo\BSJ_1920x1080.lgd"
EraseLOGO(logofile=logo_file, start=0, fadein=0, fadeout=0, end=-1)
Its(def = "BSJ\time1.def", fps=-1, output = "BSJ\datafile\timecode.tmc")
#縞除去
Field2=yadif(Mode=1).SelectEven()
ConditionalFilter(last,Field2,last,"IsCombedTIVTC(blockx=512,blocky=512,MI=100000)","=","true")
#リサイズ&フレーム位置調整
Spline36Resize(1440,last.height,-0.2,0,1920,0)
#フレームレート固定
AssumeFPS("ntsc_film")
return last


・BSJ+TX
#動画編集
V1=AVIFileSource("BSJ 1.avs")
V2=AVIFileSource("TX 1.avs").Crop(0,0,-4,0)#TXでは右端がカットされているのでcropする
#開始位置調整
#V2=V1.Trim(0,-1)++V2
#V2=V2.Loop(0,0,1)

Overlay(V1,V2,opacity=0.3)

#テレビをみるときは BSJ(下) 250
V2mask=V2.Crop(140,770,-140,-100)
ApplyRange(20,270,"Overlay",V2mask,140,770)

#テレビをみるときは TX(上) 250
V1mask=V1.Crop(300,50,-300,-800)
ApplyRange(20,270,"Overlay",V1mask,300,50)

Spline36Resize(1280,720)
return last


■VFRなmp4の結合 AviUtlを使用
※AviUtl>ファイル>システムの設定>追加読み込みしたファイルのfpsを変換しない にチェック
AviUtlとL-SMASH Worksを使って、追加読み込み(Ctrlキーを押しながらD&D)、L-SMASH Works muxerで出力。
とりあえずこの方法で出来るようです。

スポンサーサイト
avsの小ネタ その1
普段使っているavsの小ネタをいくつか。

■Trimers - CMカット後のTrim貼り付けとロゴ消しを楽にするためのユーザー定義関数
ロゴの片フィールド残り等を気にしないのであれば、貼り付けるだけで済みます。

function Trimers(string trims,int i)
{
length=strlen(trims)
i=i-1
F=Findstr(trims,"T")
L=Findstr(trims,")")
str=Midstr(trims,F,L-F+1)
str_n=rightstr(trims,length-L)
return i>0 ? trimers(str_n,i) : str
}
・使い方 (TBSの場合)
trims="Trim(27,5540)++Trim(7340,24062)++Trim(25862,46479)++Trim(49178,50376)"
c1=Eval(Trimers(trims,1))
c2=Eval(Trimers(trims,2))
c3=Eval(Trimers(trims,3))
c4=Eval(Trimers(trims,4))
a=c1.EraseLOGO(logofile="D:\Movie\logo\TBS_1440x1080.lgd", start=6, fadein=9, fadeout=9, end=c1.framecount()-6)
b=c2.EraseLOGO(logofile="D:\Movie\logo\TBS_1440x1080.lgd", start=6, fadein=9, fadeout=9, end=c2.framecount()-6)
c=c3.EraseLOGO(logofile="D:\Movie\logo\TBS_1440x1080.lgd", start=6, fadein=9, fadeout=9, end=c3.framecount()-6)
d=c4.EraseLOGO(logofile="D:\Movie\logo\TBS_1440x1080.lgd", start=6, fadein=9, fadeout=9, end=c4.framecount()-6)
a++b++c++d


■ロゴ入出フレーム番号の確認
前から数えたフレーム番号と後から数えたフレーム番号を表示します。

MPEG2source("datafile\datafile.d2v")
#Trim
ScriptClip("Subtitle(String(framecount()-current_frame),y=20,align=9)")
ScriptClip("Subtitle(String(current_frame),align=9)")
#logo_file=""
#EraseLOGO(logofile=logo_file, start=0, fadein=0, fadeout=0, end=framecount()-0)


■間引き後フレームでのソースフレーム番号確認

MPEG2source("datafile\datafile.d2v")
Import("trim.txt")
video=last
ScriptClip("Subtitle(String(current_frame),align=7,y=30,size=50)")
Its(video,def = "time.def", fps=-1, output = "datafile\timecode.tmc")


■Bobの高速化 (SD画質へのリサイズ)
先に横リサイズしておいたほうが高速になります。それだけですが、SDサイズともなるとかなり差が出ます。

Spline36Resize(720,last.height,180,0,1080,last.height)
yadif(Mode=1)
Spline36Resize(last.width,480)


■リサイズを利用したフレームの座標移動
Crop等では出来ない奇数・小数点単位での調整。リサイズフィルタのオフセット機能を利用します。
"src_left", "src_top"に移動距離を入力。マイナスをつけることで逆方向へ。削られた分は端1pxが伸びて補填される点に注意。ピクセル単位の移動ならPointResizeを使うのがいいかも。

Spline36Resize(last.width,last.height,-2.2,0,last.width,last.height)
MXのフィールドズレ
追記:avsで不要な部分があったので省略しました。


某スレで話にでていたので、確認してみました。

フィルタ前

#フィールド分離後、ボトムフィールドの位置を1px下にずらしてweave
separatefields()
Top=SelectEven()
Bottom=selectodd().Pointresize(last.width,540,0,-1,0,540)
Interleave(Top,Bottom)
Weave

フィルタ後

綺麗になりました。
まあ、リサイズすれば潰れるので特に処理する必要は感じないですね。

実際に使うならItsとの併用で
separatefields()
Top=SelectEven()
Bottom=selectodd().Pointresize(last.width,540,0,-1,0,540)
MXfield=Interleave(Top,Bottom).Weave
Weave
Its(...
300-400 [24] 'MXfield.DoubleWeave().SelectEvery(5, 2, 4)'
て感じでしょうか。

追記:ごく一部に適用するものなので、Itsではなく関数化してApplyRangeで適用したほうが良さそうです。
関数って殆ど使わないのでよくわかりませんが。

function MXfield(clip clip){
clip.SeparateFields()
Top=SelectEven()
Bottom=SelectOdd().Pointresize(last.width,540,0,-1,0,540)
Interleave(Top,Bottom)
Weave
return last
}


ちなみにマジンボーンにも似た感じの異常がありますが、似て非なるものです。
あれは完全に制作上のミスですね。
私は30p部分を yadif(Mode=1).SelectEven として片フィールドだけ使うようにしています。
yadif(Mode=0)でいいじゃん、ということに気付く…。
フレーム数を指定して一部分にOverlayを使う (ApplyRange)
2局ブレンド前提の話です。
OverlayとApplyRangeを使って一方のソースだけに出るテロップを消します。

before.png

V1=AVIFileSource("BSJ 1.avs")
V2=AVIFileSource("TX 1.avs")
overlay(V1,V2,opacity=0.3)

#テロップ消し
V2mask=V2.Crop(0,700,0,0)#テロップなしのソースをCrop
ApplyRange(20,300,"Overlay",V2mask,0,700)#20-300までOverlay

after.png

実際に使うときはテロップの範囲だけCropします。
この例の他にムービングロゴや宣伝テロップなどに有用です。
レターボックス収録のDVD映画を拡大して視聴する
普通にプレイヤーで再生すると上下左右に黒帯の付いた額縁で再生されてしまう。
TVの機能を使って拡大してみると上下左右が微妙にカットされ、字幕は半分しか見えない…
16:9が当たり前となった今では、困った存在のレターボックスです。マイナーな旧作映画にありがち。

PCで再生するならプレイヤーの機能で拡大縮小をするのもありですが、
その機能を持たないプレイヤーを使う場合はどうするか。

まずTVの機能でズーム表示を使います。次にメディアプレイヤーをウィンドウモードにしてDVDを再生します。
TV画面に合わせてプレイヤーのウィンドウサイズを調節すれば、収録映像に合わせたピッタリのサイズで再生できます。
アナログな方法ですが、簡単で効果的でした。

DVD.png
赤枠内がTV画面で表示される部分




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