tas吧 关注:1,460贴子:8,141
  • 9回复贴,共1

[应用]avisynth实战的简单应用1

只看楼主收藏回复

相关资料下载见2楼,转载请注明by mtvf1
#####################################################
#avisynth实战演示
#在使用avisynth对视频进行处理前,你需要对avisynth有一定的了解.
#入门过程我这里不多讲,因为网上的教程实在是太多了.这里我举两个
#对比版tas的实战例子做详讲解,如果你能看懂这些脚本代码并灵活
#运用的话,相信在处理其他视频的时候也能做到游刃有余.
#avisynth官网地址 avisynth.org/mediawiki/Main_Page
#相关函数说明以及插件下载,官网首页都有链接地址,具体位置在黑体
#字Filters, external plugins, script functions and utilities的下方
#####################################################
#实战1开始,以TAS超级马里奥兄弟1,2日版,2美版,3,同一个操作最速通关,并加入按键显示为例.
a1=trim(AVISource("F:\agwawaf-smb1 quad.avi"),0,48360)
a2=trim(AVISource("F:\agwawaf-smb2j quad.avi"),0,48360)
a3=trim(AVISource("F:\agwawaf-smb2 quad.avi"),0,48360)
a4=trim(AVISource("F:\agwawaf-smb3 quad.avi"),0,48360)
#avisource("file")载入视频源文件,但只支持avi格式,载入其他类型文件可尝试使用Directshowsource(“file”)函数.
#Trim(开始帧,结束帧) 截取:决定需要处理的部分。trim是以0为第一帧的。
#例:trim(0,100) 截取1-101frame(帧),
#trim(100,0) 删除前100帧,即输出后面的101帧至结束
a5=trim(AVISource("agwawaf-smb122j3input quad.avi"),0,48360)
#这里是我另外输出的按键视频,需要配合lua脚本从模拟器avi导出. 细讲的话需要很长篇幅,故这里不做说明,还望谅解
input=a5.Crop(10,200,-197,-9).AddBorders(0,0,207,1)
#Crop(左切,上切,-右切,-下切) 切边:为了保持比例或切除黑边,参数是整数,顺序是左、上、-右、-下。
#例:Crop(16,8,-16,-8) 左右各切掉16像素,上下各切掉8像素
#Crop(4,0,640,480) 左右各切掉4像素,640X480为切掉边后的分辨率,一般填片源分辨率减去切边像素
#切割只留下按键所在的49×15像素区域,再使用AddBorders(左,上,右,下)函数添加黑边.为后期合并用
logo1 = ImageSource(file="F:\mario.jpg", start=0, end=48360, fps=a1.FrameRate).ConvertToRGB24().Lanczos4Resize(128, 120)
logo2 = ImageSource(file="F:\luigi.jpg", start=0, end=48360, fps=a1.FrameRate).ConvertToRGB24().Lanczos4Resize(128, 110)
logo3 = ImageSource(file="F:\peach.jpg", start=0, end=48360, fps=a1.FrameRate).ConvertToRGB24().Lanczos4Resize(128, 136)
logo4 = ImageSource(file="F:\kupa.jpg", start=0, end=48360, fps=a1.FrameRate).ConvertToRGB24().Lanczos4Resize(128, 114)
#用ImageSource来载入图片,这里的图片不包括gif动画. 几个注意点: fps=a1.FrameRate一定要加上,使图片的帧率和视频帧率相同.
#ConvertToRGB24()转为RGB24色,因为我原视频导出的为RGB24色,图片必须与视频有相同的色阶, 这里视个人的视频源情况而定. 也许要用到ConvertToYV12或者ConvertToRGB32或者什么都不用加
#Lanczos4Resize(宽, 高) 放大缩小滤镜,只有当宽和高都是4的倍数时才能使用
b1 = StackVertical(a1,input,a3,input)#第一竖排
b2 = StackVertical(a2,input,a4,input)#第二竖排
b3 = StackVertical(logo1,logo2,logo3,logo4)#右边插画
#重要函数StackVertical 按从上向下的顺序同时显示两个或更多视频剪辑
a=StackHorizontal(b1,b2,b3)
#StackHorizontal按从左向右的顺序同时显示两个或更多视频剪辑
#注意使用StackVertical时宽度必须保持一致,StackHorizontal高度必须保持一致
#排列完成后,视频的分辨率恰好为640×480,达到了土豆优酷的高清转码分辨率标准. 顺便说一下,边排的logo还可以挡住土豆优酷图标.
al = MixAudio(a1, a3, 0.5, 0.5)
ar = MixAudio(a2, a4, 0.5, 0.5)
#混音用,这步很关键. 因为fc游戏都是单声道,如果只有两个视频放在一起的话可以直接用MergeChannels(a1,a2)
#但四个视频放在一起最好不要简单使用MergeChannels(a1,a2,a3,a4),因为并不是所有的音频格式都支持独立的4声道,上传网络上经过转换后就更难说了.
#所以最好先把左边右边的视频分别混音一次,合为一个声道, 至于两个0.5就不用管了,自己有兴趣试验一下,保证两者相加等于1
stereo = MergeChannels(al,ar)
#合并音轨,这样左右耳就能听到不同的声音
st=AmplifydB(stereo, 9, 9)
#混音过程中可能会使音量降低,这里用来提升分贝,我左右耳分别提升了9dB,一般可以不加,或者6dB足以
logo = ImageSource(file="F:\9562_1_other_video_games_nintendo.jpg", start=0, end=119, fps=a.FrameRate).ConvertToRGB24()
logoaudio = BlankClip(logo, audio_rate=48000, channels=2)
muxedlogo = AudioDub(logo, logoaudio).Lanczos4Resize(a.width, a.height).AssumeFPS(a.FrameRateNumerator, a.FrameRateDenominator)
#以上内容是加入片头logo以及空白音频. 注意音频频率要和导出的视频源文件一致, fc的音频一般48000Hz的单声道,即使用audio_rate=48000, channels=1
#由于我已经做成了两声道,所以这里的channels为2. 合并视频音频用AudioDub(视频, 音频). 别忘了logo的分辨率必须和处理后视频分辨率一致,帧率一致.
last=muxedlogo + AudioDub(a, st)
#任何载入源文件的行为都需要用last结束(也可以用return XXX), 只有当视频的帧率分辨率,音频的采样率 声道一致时才能拼接.
Subtitle("Super Mario Bros1, 2(J), 2(U), 3 playthrough\n(One movie file completes multiple games)\nPlayed by agwawaf\nPlaying time: 10:39.75\nRerecord count: 64617", align=9, first_frame=300, last_frame=900, size=26.0, text_color=$15FFFF00, halo_color=$00000000, lsp=1)
Subtitle("This is a tool-assisted recording.\nlf you think this is being played in real time,\ngo visit http://TASVideos.org/", align=9, first_frame=901, last_frame=1200, size=26.0, text_color=$15FFFF00, halo_color=$00000000, lsp=1)
#添加字幕, align代表了1~9种不同的对齐方式, 一般要配合x= , y= 使用.有兴趣可以自己试验. text_color=$15FFFF00 字体颜色, 头两位表示透明度,00不透明,FF全透明. 后面6位为RGB红绿蓝3种颜色的深度, 具体能组合成什么颜色自己上网查找RGB对照表. halo_color当然是字体环状颜色
ConvertToYV24(chromaresample="point", matrix="PC.601")
ConvertToYV12(chromaresample="lanczos4", matrix="PC.601")
#固定格式,放到最后,不要改动.
到此为止,avisynth脚本编写完毕, 接下来就可以利用MeGUI或者VirtualDub等软件编码并封装.
预览一下效果吧
视频来自:优酷

还有什么不懂得请到tasvideos官网上认真学习.


IP属地:辽宁1楼2014-08-20 21:44回复
    占领2楼,专门提供相关下载


    IP属地:辽宁2楼2014-08-20 21:45
    收起回复
      Mark。。。。。。看某天某日学习学习


      IP属地:上海3楼2014-08-21 08:27
      回复
        想给视频加个计时器……


        来自Android客户端4楼2014-08-23 08:23
        收起回复
          很棒的教程!谢谢楼主!
          顺便我想找FCEUX输出AVI时显示按键的Lua脚本,不知楼主有没有外观好看一些的,多谢……


          IP属地:吉林5楼2014-09-04 18:57
          收起回复
            学习了。


            IP属地:广东来自Android客户端6楼2014-09-06 09:31
            回复