“Avisynth 2.5中文文档”的版本间的差异

来自NMM Doc
跳到导航 跳到搜索
 
(未显示3个用户的10个中间版本)
第1行: 第1行:
     是NMM开展的AVISynth文档中文化计划
==AviSynth 2.5入门==
* [[第一个脚本]] - 如果你完全是个新手,从 里起步。
* [[AviSynth2.5初步了解]] - 一个AviSynth的初步入门。
* [[滤镜简介]] - 粗略介绍一些AviSynth滤镜。
* [[脚本范例]] - 一些稍稍具备实用性的脚本范例


  我们希望借助将AVISynth的文档中文化,达到推广AVISynth使用,普及视频处理知识的目的。这份文档是基于AVISynth安装之后自带的HTML版文档翻译而成。
== 语法==
 
*[[语法|Avisynth语法]]
  目前中文化工作刚刚开展,WIKI程序也刚刚搭建,如果有版面安排不当,内容不全的问题,还望见谅。
**[[语法:插件|插件]] - 如何 入(调用)插件(Avisynth插件、VirtualDub插件、VFAPI和C-插 件), 自动调 和名称优先 级。
 
**[[ 法:脚本变量|脚本 变量]] - 怎样 在脚本中 声明 ,使用变
  我们使用MediaWiki搭建了WIKI平台,为了便于管理和维护,我们没有开放普通注册用户的编辑权限。如果您想为本计划贡献一份力量,那么请将您的注册用户名在[http://www.nmm-hd.org/bbs NMM论坛]留言,我们会将您添加至编辑权限组。本WIKI还处在测试阶段,如果出现各种问题还请见谅。
**[[语法:运算符号|运算符号]] - 用的 号和 相对优先级
 
**[[语法:用户自定义 脚本 | 户自定义 脚本 函数]] - 如 何在脚本 定义函 、使用函 数。
  维护人员:Dgwxx VempX
**[[ : 控制结构|控制结构]] - 脚本 流控制和
 
**[[语法:内部函数|内部函数]] - 以在脚本 中使 用的 非Clip 函数。
  编写人员:Dgwxx VempX mikoto Nelson Galaxy Holy Lititude 秋月くれは
**[[语法:Clip属性|Clip属性]] - 返回Clip属性 的函数。
 
**[[语法:运行环境|运行环境]] - 单帧编 脚本基础
 
== 初步了解==
 
===视频编辑===
 
    基本上来说,AviSynth是这样工作的:首先,你会创建一个包含命令的简单文本文档,它叫做脚本。这些命令代表若干个你想要的视频以及想要运行的滤镜。然后,当你运行一个视频程序,例如VirtualDub,并且打开刚才的脚本时,AviSynth就会运作起来。它会加 脚本中的视频,并且运行指定的滤镜,然后将结果输出给视频程序。然而视频程序并不知道AviSynth在后台运行,而是以为自己在直接读取一个硬盘上的AVI文
 
  AviSynth2增加了很多新功能,为了突出这些功能(尤其因为他们在以前的文章中都没有被完好阐述过 ), 我们在这篇文章中把它们标记为<font color="#F000F0">v2</font>''。
 
  由于v2.5在内核上做了较大的升级,请在使 前仔细阅读AviSynth v2.5。相关升 都被标记为<font color="#F000F0">v2.5</font>
 
====线性编辑:====
 
  在AVISynth里能做的最简单的事就好比在VirtualDub里的编辑视频。因为这些 句都太好写了,不需要担心 变量 以及复杂的表达式。
 
    作为测试,请先创建一个文件命名为“test.avs”,然后输入如下一行文字:
 
Version
 
  现 用Windows Media Player或其他来打开这个文件,你会看到一个10秒钟的写有AVS版本号及版权信息内容的视频片段。
 
  Version叫做“源滤镜”,这意味着它的作用是生成片段而非修改。在AVISynth 脚本中 第一个命令永远是源滤镜。
 
  现在加入第二句,让它看起来是这样:
 
Version
ReduceBy2
 
  在Media Player中再次打开这个文件,你应该还可以看到那些版权信息,不过只有以前的一半大小。'''ReduceBy2'''是一个“ 换滤镜” 它会以某种方式改变原有的视频片段。你可以连续 使用 多个 换滤镜就好像在VirtualDub里一样
 
    让我们再加一句使视频变成淡出至黑色的结尾,它应该是这个样子:
 
Version
ReduceBy2
FadeOut(10)
 
  现在再次打开文件,片段的前9秒应该是一样的,而最后一秒会平滑的淡出到黑色。
 
  FadeOut滤镜需要一个数值, 来代表淡出所需 帧数。
 
  渐变开始之前的时间太长了,所以我们需要修剪视频的起始部分以减少等待的时间。
 
  我们扔掉前120帧,保留120-150帧:
 
Version
ReduceBy2
# 砍掉前119帧,保留120-150帧
# (AVISynth的起始帧数是从0 起的)
Trim(120,150)
FadeOut(10)
 
  在这个例子中,我们第一次使用了注释。
 
  注视以”#”开头,一直到最后一个字母结束,是被AVISynth完全忽视掉的。Trim滤镜需要两个数值,以逗 “,”(英文半角,AVS脚本内一切皆为英文半角)分开,两个数分别代表视频中要保留的起始帧 中止帧,若最后一帧输入的是0,就代表到视频片段的最后一帧。所以如果要砍掉前119帧,可以输入Trim(120,0)
 
  像这样把帧数仔细记录真是一件麻烦事,在VirtualDub等这样的程序里直接打开一个部分完成的 脚本 就方便多了,它会把帧数都为你显示出来。你还可以用ShowFrameNumber滤镜,它会把帧 直接打在视频上。
 
  其实实际使 中在AVISynth里有一个比Version实用很多的源滤镜,就是AVISource,它用来从硬盘中读取一个AVI(或其它视频格式)的文件。如果你手头上已经有了一个AVI文件,那么你可以试试把这些相同的滤镜加到你的文件上。
 
AVISource("d:\capture.avi")  # 这里要写你实际的路径和文件
ReduceBy2
FadeOut(15)
Trim(120,0)
 
  只有单独一行AVISource命令的 脚本 可以为只支持小于2GB文件的视频程序提供大于2GB文件的支持。
 
----
 
====非线性编辑:====
 
    好了我们到了有趣的部分了,建立一个有 下语句的AVS文件:
 
StackVertical(Version, Version)
 
  打开它,结果是这样:输出的视频 有两行一模一样的版本信息,一行在另一行之上。
 
  StackVertical不需要 值或是字符串作为参 ,而是需要视频剪辑。在以上语句当中Version滤镜被两次调用,每一次都返回给StackVertical一个版本信息的视频,于是StackVertical把它们拼在一起(不管那视频从哪儿来的)
 
  UnalignedSplice也是有用的此类滤镜之一,它可以将视频剪及首尾相接,这段 句就是将3段视频(例如可能是AVI_IO生成的)读取并连接在一起:
 
UnalignedSplice(AVISource("d:\capture.00.avi"), \
  AVISource("d:\capture.01.avi"), \
  AVISource("d:\capture.02.avi"))
 
  StackVertical和UnalignedSplice都可以接受少到两个多到六七十个的视频。你也可以用加号“+”代替UnalignedSplice,作为速记。
 
  比如说这段语句,与上段语句的功能是一样的:
 
AVISource("d:\capture.00.avi") + \
  AVISource("d:\capture.01.avi") + \
  AVISource("d:\capture.02.avi")
 
  现在假设你的一个程序捕捉到的视频存到了多个AVI片段里,但音频又存到了一个单独的WAV文件里,你能把他们重新组合在一起么?你说呢:
 
AudioDub(AVISource("d:\capture.00.avi") + \
  AVISource("d:\capture.01.avi") + \
  AVISource("d:\capture.02.avi"), \
  WAVSource("d:\audio.wav"))
 
----
 
===语法===
 
====表达====
 
    一个AVISynth的 脚本 当中会有形如以下的陈述:
 
variable_name = expression  (变量名 = 表达)
 
  在这个例子当中expression被求值并将结果赋予variable_name
 
  还有一个很重要的省略形式:
 
expression
 
  以上 句当中expression被求值并将 果赋予一个特殊的视频片段变量last
 
    功能与 下语句相同:
 
last = expression
 
  结尾通常是这样:
 
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)
 
   


==核心滤镜==
==核心滤镜==


  内容后续添加,敬 期待……
 请 参照[[AviSynth2.5核心滤镜]]


==扩展滤镜==
==扩展滤镜==
 
 请 参照[[AviSynth2.5扩展滤镜]]
  内容后续添加,敬 期待……


==常见问题==
==常见问题==
第178行: 第31行:
==FAQ-YV12==
==FAQ-YV12==


  内容后续添加,敬 期待……
 请 参见[[AviSynth2.5_YV12常见问题]]


==进阶讨论==
==进阶讨论==

2010年8月28日 (六) 18:12的最新版本

AviSynth 2.5入门

语法

核心滤镜

请参照AviSynth2.5核心滤镜

扩展滤镜

请参照AviSynth2.5扩展滤镜

常见问题

请参照AviSynth2.5疑难解答

FAQ

请参照Avisynth2.5_FAQ

FAQ-YV12

请参见AviSynth2.5_YV12常见问题

进阶讨论

内容后续添加,敬请期待……

版本历史

内容后续添加,敬请期待……