AviSynth 学习笔记
本文发布于 1196 天前。

基本语法

赋值

variable_name = expression  # (变量名 = 表达)

在这个例子当中expression被求值并将结果赋予variable_name
还有一个很重要的省略形式:

expression

以上语句当中expression被求值并将结果赋予一个特殊的视频片段变量last
功能与以下语句相同:

last = expression

换行

AviSynth对换行敏感,如果同义句命令被放在了不同行,则应用\来连接

vid1 + vid2

i.e.

vid1 + \
vid2

结尾/返回值

结尾通常是

return expression

在这里expression被求值并用作了这个脚本的返回值,也就是说,若这个AVS文件被打开,视频程序看到的仅是这个值的视频片断。
若返回值没有被特意指派,那么last的值就会被用作返回值。

函数调用

基本的调用函数的表达如下:

Function(args)  # 函数(参数)

视频剪辑函数从来都是创建一段新视频而不更改现有视频。
args是一串以逗号“,”分隔开的函数参数列表,这个列表可以是空的(意味着所有参数或者部分参数可选)。
如果滤镜函数的第一个参数是一个视频剪辑,并且这个视频剪辑并没有被提供,那么将用特殊变量last来替代。
AVISynth的滤镜可以识别指定参数(arg=expression),它们之间的顺序可以随意调换。没有被指定的参数将使用默认值,这会使某些滤镜用起来简单些。
例如,你可以写

Subtitle("Hello, World!", text_color=$00FF00, x=100, y=200)

而不一定要

Subtitle("Hello, World!", 100, 200, 0, 999999, "Arial", 24, $00FF00)

滤镜的调用

Avisynth的滤镜分为两种:内置滤镜(核心滤镜)和扩展滤镜,内置滤镜不需要调用。
当扩展滤镜放在C:\Program Files (x86)\AviSynth\plugins文件中时,扩展滤镜也不需要语法调用,AviSynth会自动调用。

LoadPlugin("插件绝对路径")

属性

Clip属性

在AVS脚本中可以得到clip属性

Width(clip) 返回clip在宽度方向的像素数(类型:整数)。
Height(clip) 返回clip在高度方向的像素数(类型:整数)。
Count(clip) 返回clip的帧数(类型:整数)。
FrameRate(clip) 返回clip每秒的帧数(类型:浮点)。在内部,帧数作为一个比值储存
AudioRate(clip) 返回clip的音频的采样率(类型:整数)。
AduioLengthF(clip) 返回clip的音频的采样数(类型:浮点)。
AudioChannels(clip) 返回clip的音频的声道数(类型:整数)。
AudioBits(clip) 返回clip的音频的bit depth(类型:整数)。
HasAudio(clip) 如果clip有音频,则返回 true(真),否则返回 false(假)(类型:布尔)。
HasVideo(clip) 如果clip有视频,则返回 true(真),否则返回 false(假)(类型:布尔)。 作者:PIXIV日推-每日更新 https://www.bilibili.com/read/cv868301 出处:bilibili

源滤镜

Version

Version

可以获得一个显示avs版本的视频。

优先尝试AVISource,如果不行,再尝试FFmpegSourceLSMASHSource。最后可以尝试DirectShowSource.

AVISource

AVISource()

参数为文件的位置。

注意:AVI只是一种容器而非编码格式。AVI可以包括很多编码,例如MJPEG,VXID等。

FFmpegSource

LoadPlugin("C:\Program Files (x86)\AviSynth\plugins\ffms\ffms2.dll")

先加载插件

FFVideoSource

FFVideoSource(Route)

加载视频

FFAudioSource

FFAudioSource(Route)

加载音频

封装

AudioDub( FFVideoSource(X), FFAudioSource(X) )

例如

LoadPlugin("C:\Program Files (x86)\AviSynth\plugins\ffms\ffms2.dll")
inputPath = "Fumetsu no Anata e - 20 raw.mkv"
AudioDub(FFVideoSource(inputPath), FFAudioSource(inputPath))

DirectShowSource

通过DirectShow打开媒体文件。支持很多AVIsource不支持的格式。

DirectShowSource(string filename [, float fps, bool seek, bool audio, bool video, bool convertfps, bool seekzero, int timeout, string pixel_type, int framecount, string logfile, int logmask ] )

变换滤镜

缩小一半ReduceBy2

将视频横竖尺寸均减小一半。

HorizontalReduceBy2

视频宽度减半

VerticalReduceBy2

视频高度减半

ReduceBy2的三个滤镜,既可以不带参数,也可以带参数。

vid1=AVISource("scr.avi")
ReduceBy2
ReduceBy2(AVISource("scr.avi"))

裁剪Crop

Crop(clip clip, int left, int top, int width, int height [, bool align ] )

crop可以裁剪原视频,传入的坐标参数为左上的x,y坐标和裁剪后视频想要的宽高

重调分辨率Resize

vs中内建的resize滤镜有Bicubic, Bilinear, Spline16, Spline36, Lanczos等等。
区别在于:[1]

如果您要放大视频,使用BicubicResize 可以获得比使用 BilinearResize更清晰的结果。但是,如果您要缩小它,您可能更喜欢BilinearResize,因为它会执行一些抗锯齿。

LanczosResize的画质更锐利和真实,适合普通电影;而SimpleResize的画质较柔和,适合动画。

重调前的裁剪

所有的大小调整有一个扩展语法,裁剪crop尺寸调整前的框架:

BilinearResize(100, 150, src_left =10, src_top =10, src_width =200, src_height =300)

也可以简写为

BilinearResize(100, 150, 10, 10, 200, 300)

当然也可以先写crop滤镜

Crop(10, 10, 200, 300).BilinearResize(100, 150)

双线性缩放BilinearResize

BilinearResize使用标准的双线性滤镜

BilinearResize(240,180)

双立方缩放BicubicResize

BicubicResize(双立方缩放)和BilinearResize相似,区别在于用Mitchell-Betravali的两部分立方算法代替了双线性滤镜。参数b和c用于调整两次立方的特性,某些时候分别指“blurring”和“ringing”。

当b = 0和c = 0.75时,这个滤镜和VirtualDub的“precise bicubic”完全一样,得到的结果也是完全一样的,除了上述的VirtualDub缩放问题。默认参数b = 1./3.、c = 1./3.,此参数是Mitchell和Netravali在人眼主观测试综合最满意的结果才得到的。增大b和c的值会得到有趣的反艺术效果——比方说试试b = 和 c= -5。

如果放大视频,用BicubicResize比BilinearResize得到的画面更好看。然而在缩小时,用BilinearResize可能和BicubicResize一样,甚至优于BicubicResize。尽管VirtualDub的bicubic滤镜比linear的效果好,但这是因为bicubic滤镜锐化了图像,而不是因为形状更好。比较锐利的图像看起来很舒服——但在压缩时非常容易出瑕疵。BicubicResize的默认参数不像VirtualDub那样锐化,但依然比bilinear锐利。若像压低码率的视频,用BilinearResize得到的结果整体较好也很正常。

为了最精确的数值,滤镜里b和c必须满足如下关系:

b + 2 * c = 1
因此当b = 0时c可以取最大值0.5,这其实是Catmull-Rom样条曲线。这是一个可以得到较锐利图像的推荐值。

c > 0.6后滤镜开始“ring”了。这不是真正的锐利,相反会得到像电视的锐化控制一样的效果。b不能取负值,当c > 0,5时,b取0。

Spline缩放

好像比较常用?
这三个缩放滤镜基于样条插值算法。(v2.56/v2.58加入)样条差值算法可以尽可能的锐化图像,同时产生的ringing瑕疵也比LanczosResize少。Spline16Resize用sqrt(16)=4个采样点,Spline36Resize用6个采样点,Spline64Resize用8个采样点。采样点用的越多,图像就越锐利。对比测试见此

Spline36Resize(Output,960,540)

淡入淡出FadeIn / FadeOut

FadeIn(frameNum)
FadeOut(frameNum)

视频前/后frameNum帧淡入/淡出

注意:AVISynth的起始帧数是从0算起的

截取Trim

Trim(startFrm,endFrm)

从第startFrm截取到第endFrm帧。
endFrm输入的是0,就代表到视频片段的最后一帧。

加黑边AddBorders

AddBorders( clip clip, int left, int top, int right, int bottom [, int color ] [, int color_yuv AVS+])

addborders(左,上,右,下)加黑边,上下加黑边
例如,把一段1280×720的视频上下裁剪各100像素,再加上黑边,再缩放为960×540,则脚本应为

AudioDub(FFVideoSource(inputPath), FFAudioSource(inputPath))
Crop(0, 100, 1280, 520)
addborders(0,100,0,100)
Spline36Resize(960,540)

显示帧数ShowFrameNumber

直接把帧数显示在视频中。

显示实时播放信息Info

Info()

多视频排布StackVertical

将视频垂直堆叠

StackHorizontal

类似,将视频横向堆叠

# show clips in variables a,b,c,d in a box like this:
# a b
# c d
StackVertical(StackHorizontal(a, b), StackHorizontal(c, d))

非线性连接UnalignedSplice

将视频剪辑首尾相接

UnalignedSplice(clip1,clip2,...)

例如

UnalignedSplice(AVISource("d:\capture.00.avi"), \
AVISource("d:\capture.01.avi"), \
AVISource("d:\capture.02.avi"))

也可以用+来简化连接视频,例如

UnalignedSplice(clip1,clip2)

可以简化为

clip1 + clip2

音频延迟DelayAudio

DelayAudio 使音频延迟由“秒数”值决定的时间。“秒数”可以为负数或分数。

# 使音频提前半秒
DelayAudio(-0.5)

混流封装AudioDub

混流不同的音视频

# Load capture segments from patched AVICAP32 which puts
# video in multiple AVI segments and audio in a WAV file
video = AVISource("capture1.avi") + AVISource("capture2.avi")
audio = WavSource("capture.wav")
# combine them into a single clip
AudioDub(video, audio)

字幕Textsub

需要挂载Vsfilter滤镜
可以挂入srt, sub, psb, smi, ssa, ass文件格式的字幕

TextSub (clip, string "file", int "charset", float "fps", string "vfr")

反转剪辑Reverse

Reverse()

参考

  1. ^https://www.nmm-hd.org/doc/%E7%BC%A9%E6%94%BE%E6%BB%A4%E9%95%9C
标题:AviSynth 学习笔记
作者:IKK
除转载和特殊声明外,所有文章采用 CC BY-NC-SA 4.0协议
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇