Вы находитесь на странице: 1из 11

TUTORIAL FX LUA4 Parte I

Trataré de ser lo más claro posible para evitar preguntas xD. Si no sabes que es Zheolib, no te preocupes, ya que lo
explicaré en el siguiente tutorial, y por último, y no explicaré los Tags de .ass, eso tienen que aprenderlos antes de
hacer Efectos.

En esta primera parte explicaré el uso de los Colores y Fonts en los karaokes, ya que muchas veces podemos tener
un gran efecto, pero con unos colores mata ojos, así que más o menos los guiare para que aprendan un poco a
manejar estos 2 factores.

Primero, la Font tiene que ser la personalidad que quiere representar el video, no es llegar y poner la primera Font que
uno encuentra bonita, no, tiene que ser una que vaya acorde al video, ya que ésta es el primer aspecto visual en que
uno se fija (aparte de los efectos). Una vez que tengamos nuestra Font lista, seguimos con el colorido, y este punto
también es muy importante, ya que es el siguiente aspecto visual que uno se fija. El colorido al igual que la Font, tiene
que representar el video, y para ello se pueden utilizar los colores que más predominan en éste. Otra cosa, es la
combinación color borde + color relleno, ya que me he pillado con bordes verdes y relleno rosado ó degrado de rojo a
azul con fondo celeste, algo que de seguro hará sangrar muchos ojos. El relleno por lo general tiene que ser un color
suave/pastel y el borde ha de ser algo más oscuro, pero si no se coloca borde, pero si sombra, ésta también tiene que
ser algo más oscura.

Como ven la primera es mata ojos, ya que su borde color verde con un fondo rosado, no pegan ni con “La Gotita”, pero
en nuestro segundo caso, la combinación es mejor ya que usamos un color morado, y da un mejor contraste visual.

Otro punto a rescatar es la alineación del karaoke, que quizás para muchos es insignificante pero también es
importante ya que hay videos en el karaoke se ve mejor en los costados que en el centro, pero éste punto de vista es a
gusto de cada uno.

Por último, al trabajar con figuras, también hay que estar consciente de los colores y los bordes, ya que figuras color
rojo con karaoke color azul, son otro tipo de mata ojos.

En el primer caso, los corazones con borde azul no van con el fondo, pero si son de color más oscuro, se lleva con el
color rosado. Otro punto a notar es el tamaño del borde de las figuras, ya que muchas veces es preferible no usarlo,
como por ejemplo, en copos de nieve, y que en algunos videos, los he visto con bordes y realmente matan el
karaoke.

En éste primer tutorial ya hemos aprendido a manejar las combinaciones de colores y el uso de alineación y el
tamaño de los bordes. En nuestra segunda parte empezaré con la explicación de crear scripts de Lua usando la
Zheolib.
TUTORIAL FX LUA4 Parte II

Comenzamos con el segundo tutorial y en éste nos vamos de lleno a lo que es crear nuestro primer script en Lua y
para eso, vamos a usar la Zheolib, la cual pueden descargar en el Primer Post Superior de este Blog. Una vez
descargada seguimos las instrucciones que trae el archivo de texto y listo. Ya instalada nuestra Zheolib,
descargaremos el siguiente ARCHIVO y el siguiente PROGRAMA.

Primero que todo les contaré en qué consiste la Zheolib. Esta librería de funciones fue creada por mí a principios
de años para simplificar la forma de hacer efectos, pero gracias a la ayuda de varias personas externas, se ha ido
completando mucho más y las posibilidades de hacer efectos han crecido. El trabajo visual es mucho mejor que el
antiguo método de usar String.Format ya que confundía demasiado a la hora de declarar valores. En el tutorial
que viene dentro del Rar podrán darse cuenta como era antiguamente y como se trabaja actualmente.

Ahora vamos a lo nuestro, ya descargado ambos archivos, instalamos el Notepad++ y abrimos nuestro Basico.lua con el
programa. Lo bueno del programa es que nos colorea el código, de esta forma nos resulta más fácil leerlo. Al ver
nuestro script no se vayan a asustar, sé que enredado y complicado de leer en un comienzo, pero luego se podrán ir
acostumbrando.

Nuestro inicio luce así:


include("karaskel.lua")
include("zheolib.lua") -- Agregar la Librería
script_name = "FX Prueba Básico"
script_description = "Lua4 con Zheolib"
script_author = "Zheo"
script_version = "2.0"

En esta parte incluimos el karaskel.lua que es la librería principal de Aegisub para crear los Efectos, ya que contiene
todas las variables esenciales para la creación de éstos. Luego agregamos nuestra zheolib.lua para poder agregar
nuestras funciones de Efectos. El resto habla por sí solo, y es más que todo para que al momento de agregar
nuestro Lua al Automation de Aegisub nos de la descripción y el nombre de nuestro script.

Después viene nuestra Macro:

function fx_zheolib(subs)
aegisub.progress.task("ESPERA MIESTRAS SE HACE EL FX... (Sale a dar una vuelta D:)")
local meta, styles = karaskel.collect_head(subs)
aegisub.progress.task("Aplicando tu FX D:")
local i, ai, maxi, maxai = 1, 1, #subs, #subs
while i <= maxi do
aegisub.progress.task(string.format("Esto llevo trabajado (%d/%d)...", ai, maxai))
aegisub.progress.set((ai-1)/maxai*100)
local l = subs[i]
if l.class == "dialogue" and
not l.comment and
(l.style == "Default" or l.style == "Karaoke") then --Acá se puede
cambiar por el nombre del Estilo que quieras ó agregar más estilos
karaskel.preproc_line(subs, meta, styles, l)
do_fx(subs, meta, l)
maxi = maxi - 1
subs.delete(i)
else
i = i + 1
end
ai = ai + 1
end
aegisub.progress.task("Por fin termine D:!")
aegisub.progress.set(100)
aegisub.set_undo_point("fx_zheo")
end
Esta es una función (function) en la cual le damos a elegir el Estilo al cual queremos aplicarle el Efecto (línea 21) . En
este ejemplo se los estamos aplicando al estilo “Default” y “Karaoke”, pero si queremos aplicarlos a más estilos, es
tan fácil que poner “or” y después l.style == “ESTILO” (En ESTILO obviamente colocaremos nuestro Estilo). Además
esta función nos crea una Macro que es la que nos aplica nuestro Efecto sobre los karaokes, tal como muestra la
siguiente imagen:

El resto de las cosas las dejaremos igual, ya que no nos interesan por ahora. Continuando con nuestro script
nos encontramos con lo siguiente:

function do_fx(subs, meta, line)


for i = 1, line.kara.n do
local syl = line.kara[i]
local x=syl.center + line.left
local y=line.margin_v + 25
sil(syl) -- Agregamos la nueva Función de sil

Acá comienza la función do_fx que es la que con la cual vamos obteniendo datos de nuestro archivo ass. Luego viene
un bucle con el for. Un bucle es cuando queremos repetir algo X cantidad de veces, en este caso lo repetiremos según
cantidad de sílabas que tenga nuestro karaoke completo, y para ello utilizaremos line.kara.n que es una variable que
nos dirá la cantidad de sílabas por lineas. Después nos encontramos con un par de variables, syl que es nuestra
silaba, luego vienen nuestras posiciones X-Y y al final nuestra función sil, que es para mostrar las silabas en nuestro
.ass final.

Ahora vienen los bloques de los Efectos, y estos están divididos en secciones de tiempos según como aparecen en
pantalla, INICIO-ESTATICO-FX-SALIDA. Cada bloque se compone de una línea con el Efecto, tiempo inicio, tiempo
final y el número de la Capa. Este último es importante a la hora de sobre poner cosas una sobre otra, ya que al jugar
con las capas logramos tal objetivo, porque mientras más elevado sea el número, más se sobrepone de las otras.

Y para finalizar, queda el registro de las macros:


aegisub.register_macro(script_name, "Aplica tu FX! D:", fx_zheolib)
aegisub.register_filter(script_name, "Aplica tu FX! D:", 2000, fx_zheolib)

Este registro es para que nos aparezcan en el menú Automation/Automatización y también al momento de exportar
los subtitulos.

Ya finalizamos esta segunda parte donde explique la estructura del script, y en la próxima clase trataré de explicar
cosas esenciales ya que de seguro quedaron en la duda de que es syl.start_time, l.style, etc. Pues aunque eso este
en el manual de Aegisub, igual los detallaré para que entiendan como usarlos, al igual que ciertas cosas de
programación básica pero necesaria en Lua.
TUTORIAL FX LUA4 Parte III

En esta tercera parte se nos viene un poco pesada, ya que entramos en campo de aprender varios nombres que nos
servirán de mucho al momento de pensar el cómo hacer tal cosa para un Efecto. Primero explicaré cosas necesarias
de Lua y en el próximo tutorial las cosas fundamentales de Aegisub.

1- LUA:

-Símbolos: Estos son muy frecuentes y tenemos que saberlos para poder realizar operaciones matemáticas.

== es idéntico a
~= no es igual a
< menor que
> mayor que
<= menor ó igual que
>= mayor ó igual que
+ sumar
- restar
* multiplicar
/ dividir
^ potencia

-function: Con ella creamos funciones que nos servirán para acortar trabajo. Son muy necesarias si no queremos
repetir el mismo código una y otra vez, y si esta malo éste, no hay que andar corrigiendo todas las partes del script, sino,
que sólo modificaremos la función.

Ejemplo:
function Sumar(a, b) -- creo la función Sumar, y que consta de 2 valores: a y b
sumando = a+b –- creó una variable donde sumaré los valores a + b
return sumando –- finalmente retorno la variable y ésta será el resultado a imprimir
end –- finalizo la función

Modo de Uso:
Sumar(5, 10)
>>15

-if – else – not – elseif: Con if logramos ver si algo es Verdadero ó es Falso. If sola nos devuelve un valor True
(verdadero) definido por nosotros y un valor False (falso) que lo podemos definir nosotros si utilizamos else.

Ejemplo 1:
var = rand(5, 10) –- creó una variable con números aleatorios desde 5 a 10
if var == 10 then –- SI la variable VAR es IGUAL a 10 ENTONCES...
val = 20 –- la variable VAL tendrá valor 20 (valor True)
end –- finalizamos el if
–- Como no definimos un FALSE, si no es igual a 10 su valor seguirá siendo el mismo.
Ejemplo: Si era 5, seguirá siendo 5, pero si era 10, cambiara a 20, porque así lo definimos
en nuestro valor TRUE.

Ejemplo 2:
var = rand(5, 10) –- creó una variable con números aleatorios desde 5 a 10
if var == 10 then –- SI la variable VAR es IGUAL a 10 ENTONCES...
val = 20 –- la variable VAL tendrá valor 20 (valor True)
else –- PERO SI NO LO ES...
val = 30 –- entonces VAL tendrá valor 30 (valor False)
end –- finalizamos el if
–- Acá si definimos un FALSE, entonces todo número que no es igual a 10, cambiará
automáticamente a 30, ya que así lo definimos.
También podemos mezclar el if dentro de las funciones y ejecutar un NOT, el cual aplicaremos si es que no hay un
Valor declarado en la función. Esto es muy útil, así que también hay que tenerlo en consideración.

Ejemplo 3:
function Sumar(a, b) –- creo la función Sumar, y que consta de 2 valores: a y b
if not b then –- SI NO hay valor en B ENTONCES...
sumando = a+a –- creó una variable donde sumaré los valores a + a
else –- PERO SI hay un valor en B...
sumando = a+b –- creó una variable donde sumaré los valores a + b
end –- finalizo el if
return sumando –- finalmente retorno la variable y ésta será el resultado a imprimir
end –- finalizo la función

Modo de Uso:
Sumar(5, 10)
>>15
Sumar(3)
>>6

Por último tenemos elseif que nos da la posibilidad de crear otra opción True/False.

Ejemplo 4:
function Sumar(a, b, c) –- creo la función Sumar, y que consta de 3 valores: a, b y c
if not b and c then –- SI NO hay valor en B y C ENTONCES...
sumando = a+a –- creó una variable donde sumaré los valores a + a
elseif not c then –- PERO SI NO hay valor en C ENTONCES...
sumando = a+b –- creó una variable donde sumaré los valores a + b
else –- PERO SI hay un valor en A, B y C...
sumando = a+b+c –- creó una variable donde sumaré los valores a + b + c
end –- finalizo el if
return sumando –- finalmente retorno la variable y ésta será el resultado a imprimir
end –- finalizo la función

Modo de Uso:
Sumar(5, 10, 3)
>>18
Sumar(3)
>>6
Sumar(2, 8)
>>10

-for – while: Estos son los 2 tipos de bucle, esto quiere decir que podemos repetir algo X cantidad de veces a
nuestro gusto. El primero, for, es el más utilizado a la hora de hacer Efectos ya que es más rápido y sencillo.

Ejemplo1:
for j = 1, 5 do –- creó un For con variable J, que es la contendrá la repetición, en este
caso se repetirá 5 veces, ya que va de 1 a 5
var = 5+j –- creó una variable con nombre VAR y valor 5 a la cual sumo el bucle
end –- finalizo el bucle

Resultado:
>>6
>>7
>>8
>>9
>>10

Como j se repite 5 veces (del 1 al 5), se va auto sumando al valor de VAR, que es 5, entonces los que hace es algo así:
5+1=6, 5+2=7, 5+3=8, 5+4=9, 5+5=10. El valor en rojo, es el bucle que como ya detalle, va desde 1 al 5.
Para el while es algo mucho más distinto, ya que primero tenemos que hacer una variable de auto suma la cual
tiene que ser menor que la cantidad a repetir.

Ejemplo2:
ini = 0 –- creó una variable de auto suma, esta debe ser cero
while ini < 5 do –- creo el while diciendo que si la variable INI es menor a 5, entonces
comenzará el bucle que será de 5
var = 5+ini –- creó una variable con nombre VAR y valor 5 a la cual sumo el bucle
ini = ini+1 –- hago la auto suma de 1 en 1 (0+1=1, 1+1=2, 2+1=3, 3+1=4, 4+1=5)
end –- finalizo el bucle

Resultado:
>>6
>>7
>>8
>>9
>>10

.local – do – then – end – and – or: Cuando usamos Local, queremos decir que sólo se ejecutará de manera Local y
no Global. Mayormente el Local se pude usar dentro de Funciones ó bucles, de esta forma la Variable funciona dentro
de estas (localmente) y no en todo el script de manera global. El do se usa para iniciar un bucle y el then para iniciar el
if ó el elseif. El end lo usamos para finalizar alguna función ó bucle. Finalmente el and y el or los usamos para dar más
alternativas dentro del if.

Ejemplo:
local valor = 10 –- variable local
if valor <= 10 and valor >=5 then –- si VALOR es menor ó igual a 10 Y mayor ó igual a 5
ENTONCES...

end

valor = 10 –- variable global


if valor == 10 or valor == 5 then –- si VALOR es igual a 10 ó VALOR es igual a 5 ENTONCES...

end

.Librería math: Esta librería que viene dentro de Lua, nos sirve para hacer ejecuciones matemáticas, es de ahí el
math. Existen varías las cuales las pueden ver acá. Nosotros por ahora sólo ocuparemos algunas de ellas que son las
más recurrentes a la hora de hacer un Efecto. La primera es math.random, que nos permitirá números al azar en un
rango que nosotros determinemos. El primer valor tiene que ser menor que el segundo, puede partir en negativo. Este
math es reemplazado en Zheolib con la función rand(), que hace lo mismo.

Ejemplo1:
var1 = math.random(16, 33)
var2 = math.random(-10, 0)
var3 = rand(-5, 11)

Resultado:
>>21
>>-2
>>9

Continuamos con math.ceil y math.floor, que nos serán de utilidad a la hora de trabajar con números flotantes.
Math.ceil obtiene el mayor entero, mientras que con math.floor obtenemos el menor entero.

Ejemplo2:
var1 = math.ceil(0.94)
var2 = math.floor(0.94)

Resultado:
>>1
>>0
También nos encontramos con math.cos y math.sin, con los cuales obtenemos el coseno y el seno de algún ángulo.

Ejemplo3:
var1 = math.cos(360)
var2 = math.sin(360)

Resultado:
>>-0.28369109148653
>>0.95891572341431

.Arrays: Los arrays son un tipo de almacén donde podremos poner distinta información, tanto letras, como
números, incluso variables y otros arrays. Los arrays son muy útiles ya que al guardar información, podemos
utilizarla cuando queramos y con una forma muy simple de usar.

Ejemplo1:
array1 = {'00ff00', 'ffffff', '0000ce'} –- este es un array con colores
array2 = {'hola', 'chao'} –- este es un array con palabras
array3 = {c1 = 'ec12ff', t1 = 'prueba'} –- este es un array con variables
array4 = {c2 = {'bc45ef'}, t2={'test'}} -- este es un array con otros 2 arrays dentro

Modo de Uso:
array1[1]
>>00ff00
array2[2]
>>chao
array3.c1
>>ec12ff
array4.t2[1]
>>test

Otra cosa interesante al usar arrays es que podemos mezclarlo con math.random ó rand() y obtener resultados al
azar, muy útil si nuestro array es de colores ó números.

Ejemplo2:
array5 = {'00ff00', 'ffffff', '0000ce'} –- este es un array con colores
Array6 = {20, 30, 40} –- este es un array con números

Modo de Uso:
array5[math.random(1,3)] –- coloco un rango desde 1 al total de colores que hay dentro del
array, en este caso, 3.
>>ffffff
array6[rand(1, 3)] –- lo mismo del caso de arriba, pero usando rand().
>>20

Con esto ya dimos por terminado esta tercera parte del nuevo tutorial, que esta vez está mucho más completo que
el anterior.
TUTORIAL FX LUA4 Parte IV

Continuando con la parte de programación, esta vez toca la de Aegisub, donde explicaré aquellos nombres que suelen
aparecer. Sólo explicaré los más usados, para el resto, lo pueden ver en la Ayuda de Aegisub, en el archivo
“Automation
4 karakel.lua”.

2- AEGISUB:

karaskel.collect_head: Esta función lee nuestro archivo .ass y obtiene la información de su


cabecera(resolución, version de .ass, etc.) y estilos. Nos devuelve meta y style.

karaskel.preproc_line: Esta otra función nos proporciona el tamaño y posiciones de cada línea en nuestro archivo, y
para ello, llama a otras funciones: karaskel.preproc_line_text, karaskel.preproc_line_size y
karaskel.preproc_line_pos. La primera nos va a retornar la duración de nuestra línea, como también el texto de ella.
La segunda función nos retornará el estilo de la línea y el alto junto con el largo. Y la última función nos retornará la
posición de la línea.

line.kara.n: Es la cantidad de silabas por linea.

syl = line.kara[i]: Recorrido dentro de cada línea para extrae cada silaba.

line.styleref: Estilo correspondiente a la línea actual. Se extrae desde karaskel.preproc_line_size. Se pueden


usar otros nombres adjuntos con esta tabla, como por ejemplo:

raw: texto en crudo name:


nombre del estilo fontname:
nombre de la Font fontsize:
tamaño de la Font
color1, color2, color3 y color4: colores de la Font
bold: negrita
italic: cursiva
underline y strikeout: subrayado y tachado
scale_x y scale_y: escala x-y
angle: angulo del texto
outline: tamaño borde
shadow: tamaño sombra
align: alineación según teclado numérico

line.text: Texto de la línea.

line.text_stripped: Texto de la línea sin Tags. En Zheolib se usa como syl(line)

syl.text: Texto de la silaba.

syl.text_stripped: Texto de la silaba sin Tags. En Zheolib se usa como syl(syl) ó syl().

line.layer: Número de la capa.

line.style: Estilo de la línea.

line.width - line.height: Ancho y alto de la línea.

syl.width - syl.height: Ancho y alto de la silaba.

line.top, line.middle - line.bottom: Corresponde a la posición de Y en la cima, medio y fondo de la línea.

line.x - line.y: Posiciones X-Y de la línea.


l.start_time: Variable que indica el inicio de los

tiempos. l.end_time: Variable que indica el fin de los

tiempos. line.start_time: Es el tiempo en que comienza

la línea. line.end_time: Es el tiempo en que termina la

línea

line.duration: Es el tiempo que dura la línea (line.end_time – line.start_time).

syl.start_time: Es el tiempo en que comienza la silaba.

syl.end_time: Es el tiempo en que termina la silaba.

syl.duration: Es el tiempo que dura la silaba en milésimas de segundo (syl.end_time – syl.start_time).

syl.kdur: Es el tiempo que dura la silaba en centésimas. Es el mismo valor dentro de la \k.

syl.i: Index de silabas.

Con esto damos por finalizado lo que es programación, ya más o menos saben como hacer cosas sencillas
utilizando funciones, alternativas y que variables se usan para cada cosa. El próximo tutorial será como mezclar lo
aprendido en nuestro script lua y así hacer nuestro primer FX en grande.
TUTORIAL FX LUA4 Parte V - Final

Finalmente esto se acaba y en esta última parte la voy a tratar como si fuese un FAQ, así que habrán muchas
preguntas clásicas con su clásica y lógica respuesta.

1-¿Por qué al aplicar el FX, las silabas quedan separadas?


R: Esta es la típica pregunta que se encuentra en cualquier foro de Aegisub ó en alguno de los Blog de los FMSC. La
respuesta es muy fácil del por qué quedan separadas y es porque la resolución del script .ass no es la misma del
video. El como reparar esto es sencillo, tan sólo presionamos el botón Cambiar Resolución (el que esta al lado del
pez naranjo) y le damos al botón que nos aparecerá y automáticamente nos pondrá la resolución de nuestro video.
Terminado esto, grabamos y reabrimos el mismo archivo .ass y listo.

2-¿Cómo puedo pasar los FX de AFX al Aegisub?


R: Esta pregunta la vi en el foro de Aegisub y me reí bastante, y la respuesta es que no se puede, ya que ambas
cosas son totalmente distintas. No insista!.

3-¿Cómo puedo hacer que un dibujo se repita X cantidad de veces y se muevan para distintos lados?
R: Si leíste bien el tutorial, en una parte hable sobre los bucle, que son con los que podemos repetir cosas, entonces,
si queremos repetir un bloque de nuestro Lua, donde tengamos un dibujo, es tan simple como esto:
l = table.copy(line)
cant = 5 -- cantidad de veces que queremos que se repita
for j = 1, cant do -- generamos el bucle l.text =
"{"..an(5)..move(x,y,x+rand(20),y+rand(30))..color(1,line.styleref.color1)..bord(0)..t(alpha('ff'
)).."}"..p(2, Festrella())
l.start_time=line.start_time+syl.start_time
l.end_time=l.start_time+syl.duration+rand(200,400)
l.layer = 2
subs.append(l)
end -- terminamos el bucle

Si se dan cuenta, en \move puse valores en rand(), y gracia a esto que saldrán en posiciones aleatorias. También puse
un rand() en la variable del tiempo final, ya que así cada dibujo terminará en un tiempo distinto. Como dato extra, el
valor en “cant” puede ser random, pero mayor de 1.

4-¿Cómo puedo hacer que un dibujo se mueva desde un extremo a otro en la silaba?
R: Pregunta que me han hecho bastante, y la respuesta está en la lógica. Primero que todo, nuestra silaba se
compone de x-y ancho-alto, con estos datos ya tenemos algo de nuestra respuesta lista. Algo que siempre hago, es
tomar un pedazo de papel y dibujar 2 letras, hacer una cruz sobre el centro de ella y que representan X-Y, y una L
gigante que representa el Ancho-Alto. Sabiendo que nuestra X esta en medio de la silaba, nos queda el cómo
empezar desde un extremo y que vaya para el otro, y esto se resuelve si dividimos el ancho en 2, quedándonos
(ancho/2) y luego se lo restamos a X. Si entienden esa ecuación se darán cuenta a lo que voy. Al restar el ancho/2 a
X, obtenemos nuestro extremo izquierdo, y si lo sumamos, obtenemos nuestro extremo derecho, el resto es aplicar
eso en el \move.

5-¿Cómo puedo hacer que un dibujo tenga un FX Intro y Outro?


R: como explique en el tutorial pasado, constamos con algo llamado syl.i, que es nuestro índice de silabas por líneas,
esto quiere decir que si nuestra línea tiene 6 silabas, hará un índice del 1 al 6, y si la línea que viene tiene 10 silabas,
hará un índice del 1 al 10, y no del 7 al 16. Ahora para que nuestra primera y última silaba tengan un FX tanto de
entrada como de salida, es tan fácil como:
if syl.i == 1 then -- esto es para la primera silaba
blablablá
end

if syl.i == line.kara.n then -- esto es para la última silaba


blablablá
end
6-¿Cómo puedo poner una palabra ó símbolo en vez de la sílaba?
R: Debemos de cambiar el "sil()" ó el "char", según estemos trabajando y creamos una variable con lo que
queremos poner:
word = "love"
l.text = "{"..an(5)..pos(x,y).."}"..word

7-¿Cómo puedo hacer un FX distinto para cada estilo?


R: Primero que todo, debes tener claro que por cada FX que hagamos, debemos hacer los bloques de "Inicio,
Estático, FX y/ó Salida (optativo)". Para hacer un FX para cada estilo, debes realizar un IF/ELSEIF:

if line.style == 'Romaji' then -- hago el FX pal estilo Romaji


bloque inicio
bloque estatico
bloque FX

elseif line.style == 'Romaji2' then -- aca termina le anterior y comienzo el nuevo FX


bloque inicio
bloque estatico
bloque FX
bloque salida
end -- termino todo

8-¿Cómo puedo hacer degrado simple en Vertical?


R: La razón del por qué saqué la función "DegradoV" en la Zheolib, fué porque encontraba innecesario tenerla, ya
que varias veces en blogs y foros se ha enseñado lo del degrado, aún así, le dejo el código para que vean lo fácil que
es hacerlo.

l = table.copy(line)
lim = syl.height-8 -- Éste será la cantidad a repetir el bucle. El 8 es por los pixeles de los
bordes.
top = line.top -- obtengo la cima de la silaba para partir desde ahí el degrado
mitad = syl.width/2+5 -- calculo la mitad de la sil para encajar el clip

for j = 1, lim do -- comienzo el bucle


colores = RangeColor(1, j/lim, 'C37988', 'AFCFDE') -- genero el rango de colores "desde-hasta"
clipo1 = clip(x-mitad, top+j, x+mitad, top+j+1) -- hago el clip
--la composición seria "clip(izquierda sil, arriba sil+bucle, derecha sil, arriba sil+bucle+1)"
--el "1" es porque será de 1 pixel cada línea del degrado

l.text =
"{"..fad(100,200)..an(5)..pos(x,y)..bord(2)..colores..clipo1..t(bord(0)).."}"..sil()
l.start_time= line.start_time+syl.start_time
l.end_time= l.start_time+syl.duration+400
l.layer=3
subs.append(l)
end

Con esto damos finalizado este tutorial, pero esta última parte se irá actualizando según hagan preguntas.

Вам также может понравиться