TCAX 字幕特效制作工具官方论坛 | ASS | TCAS | Python | Aegisub | Lua

标题: 【NyuFX】NyuFX教程.基础篇 [打印本页]

作者: showjim    时间: 2013-1-25 07:00:20     标题: 【NyuFX】NyuFX教程.基础篇

本帖最后由 showjim 于 2013-2-4 21:17 编辑

总序

受milk大所托,开了这个坑,开学前能写多少算多少。
首先,虽然NyuFX也是基于Lua,但和Aegisub的auto4还是有点差别的。
然后,已经会NyuFX的可以无视这个教程,看这个算法楼来互相讨论吧,[后弃]一点记录

其实,想快速入门的话可以直接跳第三课看的……

基础篇之后还有进阶篇哦,【NyuFX】NyuFX教程.进阶篇


第一课:初识NyuFX

正文:

NyuFX是一款字幕特效软件,下载请看这里:【Lua】NyuFX(一款德国的字幕特效工具)
下载后安装即可用,不用再安装其他软件,比较方便。

本教程基于最新的1.5版本(不过好像就要出1.6了,希望变化不大),其软件截图如下:
Untitled.png
其中,左为Lua源代码编辑框,中为ass字幕文件编辑框,右为字幕生成状态区。

界面做得比较全,代码以及ass编辑都可以在同一界面下完成。
不过这个也是看个人习惯,我比较喜欢notepad++,代码高亮、自动完成,功能全些。

下面说下如何使用:
还是如上图在写好代码和加载好ass文件后在“Output”一栏里选择生成字幕的输出路径,然后点击“Generate”生成即可,最后可以点击“Open”来打开刚刚生成的字幕。

以上。

PS:没怎么写过大坑,大家有什么建议我再补上。

图片附件: Untitled.png (2013-1-25 06:54:08, 158.39 KB) / 下载次数 1046
http://tcax.org/forum.php?mod=attachment&aid=MTE0OXxkZTNlYjIxNHwxNzMyNDY4MzYwfDB8MA%3D%3D


作者: showjim    时间: 2013-1-25 07:05:23

本帖最后由 showjim 于 2013-1-28 23:56 编辑

第二课:浅谈Lua


NyuFX的脚本是基于Lua的,所以Lua必学。

Lua是款小巧轻便的脚本语言,维基介绍在此:Lua
Lua的中文教程:Lua 5.1 参考手册

我在这里指简单讲下比较常用的语法和关键字。

正文

Lua 的语法比较简单,学习起来也比较省力,但功能却并不弱。

Lua 有好几种程序控制语句,如:
控制语句  格式示例
If if 条件 then ... elseif 条件 then ... else ... end  if 1+1=2 then print("true") elseif 1+2~=3 then print("true") else print("false") end
While  while 条件 do ... end while 1+1~=2 do print("true") end
Repeat repeat ... until 条件 repeat print("Hello") until 1+1~=2
For for 变量=初值, 终点值, 步长 do ... end for i = 1, 10, 2 do print(i) end
For for 变量1, 变量2, ... 变量n in 表或迭代函数 do ... end for a,b in mylist do print(a, b) end


需要注意的地方:
1. for的循环变量总是只作用于for的局部变量;当省略步长值时,for循环会使用1作为步长值。

2. 使用break可以用来中止一个循环。

3. 在Lua 中,语句块是用do 和 end 括起来的。
     如:
  1. do print("Hello") end
复制代码
4. 逻辑运算,and, or, not
    其中,and 和 or 与C 语言区别特别大。
    在这里,请先记住,在Lua 中,只有false 和nil 才计算为false,其它任何数据都计算为true,0 也是true
    and 和 or 的运算结果不是true 和false,而是和它的两个操作数相关。
    a and b:如果a 为false,则返回a;否则返回b
    a or b:如果 a 为true,则返回a;否则返回b
    如:
  1. print(4 and 5) --输出 5
  2. print(nil and 13) --输出 nil
  3. print(false and 13) --输出 false
  4. print(4 or 5) --输出 4
  5. print(false or 5) --输出 5
复制代码
5. table,表的功能在Lua里被无限强化了,这个相当于C、python语言里的表、数组、队列、字典甚至于类。但是要注意的是,如果不写索引,则索引就会被认为是数字,并按顺序自动从1往后编

6. 函数(function),这里和C、python差不多,但Lua的函数是可以被包含在table里的!所以,在遇到面向对象的编程时可以用拥有函数的表来模仿。例子如下:
  1. t = {
  2.       Age = 27,
  3.       add = function(self, n) self.Age = self.Age+n end
  4.       }
  5. print(t.Age) -- 27
  6. t.add(t, 10)
  7. print(t.Age) -- 37
复制代码
在Lua中t.add(t,10)可以简写成t:add(10)。

7. 字符串(string),这个在NyuFX的输出语句中要时常的用到。很重要,下一课讲。


Lua是个简单易懂的语言,只要花些许时间就能够掌握。在看我的简单介绍和链接里的教程时找些例子帮助理解和实践,相信这样会更快的对Lua上手了。
作者: showjim    时间: 2013-1-25 07:57:52

本帖最后由 showjim 于 2013-1-25 10:17 编辑

第三课:脚本教程1


本篇要用到的脚本点击这里下载: tutorial 1.zip (1.15 KB, 下载次数: 48, 售价: 1 论坛币)

注:收费非贪财,要下就注册。

正文

正式开始讲如何读懂并写脚本了。附件包里是这次的示例脚本和示例字幕文件,大家可以先生成一个看看。
讲解如注释。
这里贴下脚本(没注册的可以看这里):
  1. --[[
  2. 教程示例脚本1
  3. 读取ass文件句子和简单的输出

  4. 格式:
  5. for li=1, #lines do
  6.         local line = lines[li]
  7.         ...
  8. end
  9. ]]
  10. for li, line in ipairs(lines) do  --使用此句来读取ass文件里的所有句子(lines)
  11.         local l = table.copy(line)    --制作一个拷贝,以便用于编辑
  12.         l.start_time = line.start_time + 2000   --取原句的起始时间并加2秒
  13.         l.end_time = line.end_time + 2000       --取原句的结束时间并加2秒
  14.         l.text = string.format("%s","Hello World")
  15.         io.write_line(l)                                                --输出编辑后的l
  16. end
复制代码
输出效果如下图:
Untitled.png

这里讲下string的用法:
Lua提供了string.format()函数来生成具有特定格式的字符串, 函数的第一个参数是格式(formatstring), 之后是对应格式中每个代号的各种数据. 由于格式字符串的存在, 使得产生的长字符串可读性大大提高了. 这个函数的格式很像C语言中的printf().函数string.format在用来对字符串进行格式化的时候,特别是字符串输出,是功能强大的工具。这个函数有两个参数,你完全可以照C语言的printf来使用这个函数。第一个参数为格式化串:由指示符和控制格式的字符组成。指示符后的控制格式的字符可以为:十进制'd';十六进制'x';八进制'o';浮点数'f';字符串's'。在指示符'%'和控制格式字符之间还可以有其他的选项:用来控制更详细的格式,比如一个浮点数的小数的位数:

格式字符串可能包含以下的转义码:

%c - 接受一个数字, 并将其转化为ASCII码表中对应的字符
%d, %i - 接受一个数字并将其转化为有符号的整数格式
%o - 接受一个数字并将其转化为八进制数格式
%u - 接受一个数字并将其转化为无符号整数格式
%x - 接受一个数字并将其转化为十六进制数格式, 使用小写字母
%X - 接受一个数字并将其转化为十六进制数格式, 使用大写字母
%e - 接受一个数字并将其转化为科学记数法格式, 使用小写字母e
%E - 接受一个数字并将其转化为科学记数法格式, 使用大写字母E
%f - 接受一个数字并将其转化为浮点数格式
%g(%G) - 接受一个数字并将其转化为%e(%E, 对应%G)及%f中较短的一种格式
%q - 接受一个字符串并将其转化为可安全被Lua编译器读入的格式
%s - 接受一个字符串并按照给定的参数格式化该字符串

这里需要注意的是:
1. NyuFX脚本中常用的我已经标红。
2. 小数位数/字串裁切: 在宽度数值后增加的小数部分n, 若后接f(浮点数转义符, 如%6.3f)则设定该浮点数的小数只保留n位, 若后接s(字符串转义符, 如%5.3s)则设定该字符串只显示前n位。

下面是一些例子:
  1. string.format("pi = %.4f", math.pi)    输出 pi = 3.1416

  2. d = 5; m = 11; y = 1990
  3. string.format("%02d/%02d/%04d", d, m, y)      输出05/11/1990

  4. tag, title = "h1", "a title"
  5. string.format("<%s>%s</%s>", tag, title, tag)      输出<h1>a title</h1>
复制代码


附件: [tutorial 1] tutorial 1.zip (2013-1-25 07:56:50, 1.15 KB) / 下载次数 48
http://tcax.org/forum.php?mod=attachment&aid=MTE1MHw5MWQyY2M1NnwxNzMyNDY4MzYwfDB8MA%3D%3D

图片附件: Untitled.png (2013-1-25 08:04:54, 15.5 KB) / 下载次数 1026
http://tcax.org/forum.php?mod=attachment&aid=MTE1MXwwZjY5NzJjMnwxNzMyNDY4MzYwfDB8MA%3D%3D


作者: 忘却の小伊    时间: 2013-1-25 09:41:18

好高级....这个是lua的...
也是跟tcax那样,只需基本的概念和用法就能了么?
作者: showjim    时间: 2013-1-25 09:52:04

忘却の小伊 发表于 2013-1-25 11:41
好高级....这个是lua的...
也是跟tcax那样,只需基本的概念和用法就能了么?

对的,会tcax的话,由python基础,学得可以更快
作者: ひまり    时间: 2013-1-28 21:53:54

nyufx也有人教了
作者: milkyjing    时间: 2013-1-28 21:57:20

ひまり 发表于 2013-1-28 21:53
nyufx也有人教了


  記得鬼道也用Nyufx
作者: ひまり    时间: 2013-1-28 22:15:55

milkyjing 发表于 2013-1-28 21:57
記得鬼道也用Nyufx

我会点生成
作者: tnti    时间: 2013-1-29 01:06:09

showjim 发表于 2013-1-25 07:57
第三课:脚本教程1




下载地址Lua程序设计.rar (145 Bytes, 下载次数: 35, 售价: 1 论坛币)

想起有本书 需要者自撸


附件: 下载地址Lua程序设计.rar (2013-1-29 01:05:42, 145 Bytes) / 下载次数 35
http://tcax.org/forum.php?mod=attachment&aid=MTE4MnwyZTIxNWM3MXwxNzMyNDY4MzYwfDB8MA%3D%3D
作者: RunCross    时间: 2013-2-3 22:15:02

还有吗,还有吗? 接下来呢?
作者: mzlmcx    时间: 2013-2-4 05:53:02

我去,刚看到弃弃竟然开此坑……鬼道和弃弃完全可以独自开坑来教程了!!
作者: zxcqwert    时间: 2013-2-4 23:45:05

虽然好久没来了…但看到后弃开了教学必须来一下啊!!
作者: RunCross    时间: 2013-2-6 00:22:01

举手,请问这写好的代码可以放到Aegisub中使用吗?
作者: showjim    时间: 2013-2-6 07:21:18

本帖最后由 showjim 于 2013-2-6 09:23 编辑
RunCross 发表于 2013-2-6 02:22
举手,请问这写好的代码可以放到Aegisub中使用吗?


答案是不行的,NyuFX的Lua结构和Aegisub的auto4-Lua结构和关键字还是有点区别,加载后会出错。

补上:auto-Lua虽然也强大,但无法处理粒子字和复杂的mask,这会使效果打折扣。
作者: qzx1993    时间: 2013-3-8 23:55:20

好像没有找到auto4-lua的语法,也不知道其line类里边有什么数据成员,所以无法调用。

所以就学NyuFX好了?
作者: tiankongshang    时间: 2015-9-24 22:20:50

感谢啦
作者: Det.Rush    时间: 2016-2-4 11:15:01

9楼的网盘失效了
搜到CSDN的资源,不知道是不是这个http://download.csdn.net/detail/myy2012/5349646
下载也是免费
作者: sfz205    时间: 2017-6-15 01:34:23

谢谢




欢迎光临 TCAX 字幕特效制作工具官方论坛 | ASS | TCAS | Python | Aegisub | Lua (http://tcax.org/) Powered by Discuz! X2