『漫游』酷论坛>『影音数码技术学习交流』>用AVS能实现画中画的 ..
用AVS能实现画中画的功能吗?
evel@2006-04-20 10:51
偶想把某段影片缩小放到另一个影片的右上角..
可以用AVS来实现吗??
MeteorRain@2006-04-20 14:53
参看overlay和layer函数。
weilai@2006-04-20 20:36
試了一個
http://apr20.imghost.us/jwenma.jpg (範例圖)
用 (CPU)AMD XP2000+ 可以跑得很順
以下是 截錄於個人Avisynth Application Batch之部分功能
所以看起來會有點複雜,但有混音的功能,使用時只需填PIP函數各參數即可
=線上下文存成任意 .avs 即可
inukami_OP.avi 是母畫面
inukami_ED.avi 是子畫面
,請根據自己用的檔案修改
=========================
A=avisource("inukami_OP.avi", pixel_type="YUY2")
B=avisource("inukami_ED.avi", pixel_type="YUY2")
return PIP(A, B, -1, -1, 6, 10, "add")
#EX: PIP(PlayClip, sClip, X, Y, W_H, Sub_volume, mux_mode) #子母畫面
Function PIP (Clip MainP, Clip sClip, Int X, Int Y, Int W_H, Int Sub_volume, String mux_mode) {
## <設定>
# sClip [子畫面]
# W_H [子畫面大小] {EX:6 表示 "六分之一" 1/6=0.166}
# Sub_volume [子畫面靜音] {EX:0 表示 Yes / EX:不等於零:音量(正常範圍1~100)}
temp = 1/Float(W_H)
Sub_volume = (Sub_volume >= 100)? 1.1 : ((Sub_volume <= 0)?0: (1+(Sub_volume/1000.0)))
W = Int(MainP.width * temp)
H = Int(MainP.height * temp)
X = (X<0)? Int(MainP.width -W -(W*temp)) : X
Y = (Y<0)? Int(MainP.height -H -(H*temp)) : Y
IsMute = RevisionTo_Bool(Int(Sub_volume))
## <程序腳本>
sClip = sClip.LanczosResize(W, H).ConvertToYUY2.ChangeFPS(MainP.framerate)
MainP = !IsYUY2(MainP) ? MainP.ConvertToYUY2 : MainP
MainP = IsMute ? AudioChannelIsTwo(MainP, "1,2", sClip, "1,2", Sub_volume) : MainP
return Layer(MainP, sClip, mux_mode, 255, X, Y)
}
Function RevisionTo_Bool (Int Change_Bool) {
Return_Bool = (Change_Bool <= 0) ? False : True
return Return_Bool
}
#EX: AudioChannelIsTwo(PlayClip1, "1,2", PlayClip2, "1,2", 1.3),兩Clip聲道一左一右
Function AudioChannelIsTwo(Clip m, String mch, Clip s, String sch, Float L_R) {
s = s.ResampleAudio(m.Audiorate)
#mdB = Float(Ceil(L_R))
#sdB = Float(Frac(L_R)*10)
mdB = Float(Int(L_R))
sdB = Float(Frac(L_R)*10)
l_ch = Eval("GetChannel(m," +mch +")")
r_ch = Eval("GetChannel(s," +sch +")")
#MergeChannels 會變成 4聲道、Audio Resample不變
#PlayAudio = MergeChannels(l_ch, r_ch).ResampleAudio(44100).Amplify(mdB, sdB)
PlayAudio = MixAudio(l_ch, r_ch, mdB, sdB)
return AudioDub(m, PlayAudio) #.Subtitle(string(mdB))
}
工藤新一@2006-04-20 21:58
请问楼上2位前辈 有没有介绍AVS功能函数的好论坛?
找到的DOOM9是英文的 看起来累....
MeteorRain@2006-04-21 09:03
avs功能函数的英文档案在开始菜单中就有链接。AviSynth Documentation
工藤新一@2006-04-21 18:15
avs配合什么最好? VirtualDub? thanks
VirtualDub默认支持的视频格式没几个? 哪里有插件下?
evel@2006-04-21 19:45
看不太懂啊..哪些地方是可以改的哪不能改呀..
看不懂啊...
能用不同的颜色标明一下吗??
weilai@2006-04-21 22:55
蓝色 就是你的檔名
綠色 子畫面座落的 (X,Y)座標,如是負值就會自動调整於右下角
紅色 就是子畫面的 1/size
黃色 就是子畫面的音量,如是0 就是沒有子畫面音源
======================================
A=avisource("這個是母畫面.avi", pixel_type="YUY2")
B=avisource("這個是子畫面.avi", pixel_type="YUY2")
return PIP(A, B, -1, -1 , 6 , 10 , "add")
#EX: PIP(PlayClip, sClip, X, Y, W_H, Sub_volume, mux_mode) #子母畫面
Function PIP (Clip MainP, Clip sClip, Int X, Int Y, Int W_H, Int Sub_volume, String mux_mode) {
## <設定>
# sClip [子畫面]
# W_H [子畫面大小] {EX:6 表示 "六分之一" 1/6=0.166}
# Sub_volume [子畫面靜音] {EX:0 表示 Yes / EX:不等於零:音量(正常範圍1~100)}
temp = 1/Float(W_H)
Sub_volume = (Sub_volume >= 100)? 1.1 : ((Sub_volume <= 0)?0: (1+(Sub_volume/1000.0)))
W = Int(MainP.width * temp)
H = Int(MainP.height * temp)
X = (X<0)? Int(MainP.width -W -(W*temp)) : X
Y = (Y<0)? Int(MainP.height -H -(H*temp)) : Y
IsMute = RevisionTo_Bool(Int(Sub_volume))
## <程序腳本>
sClip = sClip.LanczosResize(W, H).ConvertToYUY2.ChangeFPS(MainP.framerate)
MainP = !IsYUY2(MainP) ? MainP.ConvertToYUY2 : MainP
MainP = IsMute ? AudioChannelIsTwo(MainP, "1,2", sClip, "1,2", Sub_volume) : MainP
return Layer(MainP, sClip, mux_mode, 255, X, Y)
}
Function RevisionTo_Bool (Int Change_Bool) {
Return_Bool = (Change_Bool <= 0) ? False : True
return Return_Bool
}
#EX: AudioChannelIsTwo(PlayClip1, "1,2", PlayClip2, "1,2", 1.3),兩Clip聲道一左一右
Function AudioChannelIsTwo(Clip m, String mch, Clip s, String sch, Float L_R) {
s = s.ResampleAudio(m.Audiorate)
#mdB = Float(Ceil(L_R))
#sdB = Float(Frac(L_R)*10)
mdB = Float(Int(L_R))
sdB = Float(Frac(L_R)*10)
l_ch = Eval("GetChannel(m," +mch +")")
r_ch = Eval("GetChannel(s," +sch +")")
#MergeChannels 會變成 4聲道、Audio Resample不變
#PlayAudio = MergeChannels(l_ch, r_ch).ResampleAudio(44100).Amplify(mdB, sdB)
PlayAudio = MixAudio(l_ch, r_ch, mdB, sdB)
return AudioDub(m, PlayAudio) #.Subtitle(string(mdB))
}
| TOP