LVS: Unterschied zwischen den Versionen
Youka (Diskussion | Beiträge) (Beispiele erweitert) |
Youka (Diskussion | Beiträge) |
||
Zeile 28: | Zeile 28: | ||
==Zeichnen== | ==Zeichnen== | ||
+ | |||
+ | ==Text== | ||
"Hello world!" mit einem rot-zu-grün Farbverlauf wird auf Frames gemalt. | "Hello world!" mit einem rot-zu-grün Farbverlauf wird auf Frames gemalt. | ||
<nowiki>-- Text position | <nowiki>-- Text position |
Version vom 28. September 2013, 13:00 Uhr
Inhaltsverzeichnis
LVS
LVS ("Lua Video Sync") ist ein Filter-Plugin für die populären Windows Frameserver Avisynth, VirtualDub und DirectShow. Durch Angabe eines Skriptes (Lua Code enthaltend) als Parameter zum durch das Plugin registrierten Filter lassen sich Videobearbeitungen vornehmen (unter Avisynth auch Audio).
Die Macht der Lua Programmiersprache in Version 5.2, erweitert u.a. durch eine einfache, mächtige 2D Grafikbibliothek, ermöglicht eindrucksvolle grafische Bearbeitung von streamenden Video Frames in hoher Geschwindigkeit und mit vielen Mitteln.
Geschichte
Die Entwicklung von LVS begann im Jahre 2013 durch den Fansubber "Youka".
Inspiriert von Overlua wurde LVS als Nachfolger jenes unausgereiften Projektes beschlossen und sollte dessen großes Potenzial, programmatisch (live) zu rendern und manipulieren, in einem frischen Gewand ausschöpfen. Als Alternative zu AFX zum typesetten komplexerer Erscheinungen und als mächtigeres Karaoke-FX Werkzeug fand es seinen Nutzen bei Fansubbern.
Definition
Frameserver plugin
Grafikprogrammierung
Erweiterungen
Beispiele
Folgende Beispiele sind mögliche Skripte zur Videobearbeitung mit LVS.
Minimal
Farben aller Frames werden invertiert.
function GetFrame(frame, frame_i) frame:invert() end
Zeichnen
Text
"Hello world!" mit einem rot-zu-grün Farbverlauf wird auf Frames gemalt.
-- Text position local pos = { x = 100, y = 100 } -- Text and his style local text_properties = { "Hello world!", -- Text "Arial", -- Font 50, -- Size true, -- Bold? true, -- Italic? true, -- Underline? true -- Strikeout? } -- Text dimensions local text_extents = {g2d.text_extents(table.unpack(text_properties))} -- Process current frame function GetFrame(frame, frame_i) -- Create drawing context for frame local ctx = frame:get_context() -- Define path as color destination ctx:path_add_text(pos.x, pos.y, table.unpack(text_properties)) -- Set linear gradient as color ctx:set_source( g2d.create_lgradient(pos.x, pos.y, pos.x + text_extents[1], pos.y + text_extents[2]) :add_color(0, 1,0,0) :add_color(1, 0,1,0) ) -- Fill path with color ctx:fill() end