FLuaG

From Fansub Wiki
Jump to: navigation, search

Definition

caption|200px|none FLuaG (Floating Lua Graphics) ist ein Plugin für Avisynth, welches neben der eigentlichen Aufgabe der Videobearbeitung auch Karaoke-Effekte erstellen kann. Als Schnittstelle zwischen jedem einzelnen Video Frame und einem Lua Skript, erweitert um OpenGL 1.1, werden u.a. 3D Effekte ermöglicht.

Download und Nutzen

Runterladen kann man das Plugin, sowie den zugehörigen ASS-Parser und Beispiele, hier.

Mindestanforderung ist Windows 98.

Die einzelne DLL Datei vereint bereits die Avisynth Schnittstelle, einen Lua-Interpreter und die Schnittstelle zu OpenGL (+WinGDI Font System).


Nutzer sollten bereits Grundkenntnisse über Lua und OpenGL besitzen. Für Karaoke-FX sollte bereits der Advanced Substation Alpha Format bekannt sein.

Die Arbeit mit dem Plugin befasst framebasiertes Zeichnen. Das geladene Lua Skript wird einmal ausgeführt, um Daten für z.B. Animationen vorzubereiten und Funktionen zu registrieren, die folglich für jeden einzelnen ihrer zugeordneten Frames ausgeführt werden. Innerhalb der registrierten Funktionen kann mit dem derzeitgen Frame gearbeitet werden.

Ein ausführliches Tutorial findet sich hier(englisch).

Warum FLuaG

Warum FLuaG verwenden und nicht ein anderes?

Während andere Programme nur mit kleineren, einfacheren Grafik-Bibliotheken arbeiten, ermöglicht der Nutzen von OpenGL fast alles, was die Grafik-Programmierung zu bieten hat. Trotz des schwereren Nutzens ist die Kodierung von "WOW"-Effekten wesentlich schneller und die Ergebnisse beeidruckender.

FLuaG ist nur für professionelle Karaoke-FXer und Videobearbeitung.

Beispiel

Ein einfacher "Silbe wird größer/kleiner zum Einsatz"-Effekt:

require("AssParser")
LoadASS("C:\\Users\\Youka\\Desktop\\FLuaG\\Test\\Templates\\Karaoke\\Karaoke-Time_Test.ass")

for li, line in ipairs(lines) do
	local start_frame = math.floor(line.start_time / flGetVideoFrameDuration())
	local end_frame = math.ceil(line.end_time / flGetVideoFrameDuration())
	Register("LoadLine", start_frame, end_frame, line)
end

function LoadLine(frame_i, frame_time, line)
	flInit3D(FL_ORTHO, -1000, 1000)
	glColor(1, 1, 0)
 
	--Subtitle text
	if line.styleref.alignment < 4 then
		glPushMatrix()
		glTranslate(line.x, line.y, 0)
		flDrawPath( flGetTextPath(line.text, line.styleref.font) )
		glPopMatrix()
	--Karaoke
	else
		local iterator = line.styleref.alignment > 6 and line.syls or line.chars
		for si, syl in ipairs(iterator) do
			glPushMatrix()
			glPushAttrib(GL_CURRENT_BIT)
			glTranslate(syl.x, syl.y, 0)
			if syl.start_time < = frame_time and syl.end_time >= frame_time then
				glTranslate(syl.width / 2, syl.height / 2, 1)
				local progress_curve = math.sin( (frame_time - syl.start_time) / syl.duration * math.pi )
				glColor(1, 1-progress_curve, 0)
				glScale(1 + progress_curve, 1 + progress_curve, 1)
				glTranslate(-syl.width / 2, -syl.height / 2, 0)
			end
			flDrawPath( flGetTextPath(syl.text, line.styleref.font) )
			glPopAttrib()
			glPopMatrix()
		end
	end
end

Links