diff --git a/Readme.md b/Readme.md index 6be50d2..7490924 100644 --- a/Readme.md +++ b/Readme.md @@ -1,42 +1,54 @@ -## Various mpv lua scripts - -- visualizer.lua - various audio visualization. +## Waveform Monitor LUA Script for MPV +- VideoTek.lua is a waveform monitor for MPV. +- visualizer.lua is a script that shows various audio visualization for MPV. - firequalizer.lua - linear phase 15-bands equalizer. ## Key bindings -Look at the lua scripts. +Both filters are disabled by default. +
+Press "Y" to turn on "VideoTek" and have a waveform monitor for luma, chroma, phase and loudness. +
+Press "C" to turn on "Visualizer" and switch between showcqt, avectorscope, showspectrum, showcqtbar and showwaves. +
+ +## Screenshots + +### VideoTek.lua + +![VideoTek](Screenshots/VideoTek.jpg) -## Screenshoots ### visualizer.lua - showcqt -![showcqt](screenshoots/showcqt.jpg) +![showcqt](Screenshots/showcqt.jpg) - avectorscope -![avectorscope](screenshoots/avectorscope.jpg) +![avectorscope](Screenshots/avectorscope.jpg) - showspectrum -![showspectrum](screenshoots/showspectrum.jpg) +![showspectrum](Screenshots/showspectrum.jpg) - showcqtbar -![showcqtbar](screenshoots/showcqtbar.jpg) +![showcqtbar](Screenshots/showcqtbar.jpg) - showwaves -![showwaves](screenshoots/showwaves.jpg) +![showwaves](Screenshots/showwaves.jpg) ### firequalizer15.lua - -![firequalizer15](screenshoots/firequalizer15.jpg) +![firequalizer15](Screenshots/firequalizer15.jpg) ## Related projects - - [HTML5 ShowCQTBar](https://github.com/mfcc64/html5-showcqtbar) - showcqt/showcqtbar visualizer on an HTML5 page. - [YouTube Musical Spectrum](https://github.com/mfcc64/youtube-musical-spectrum) - showcqt visualizer as a Chrome extension. + +### Contributors +- mfcc64 for the audio visualizers. +- Livio Aloja & Francesco Bucciantini for VideoTek. diff --git a/Screenshots/VideoTek.jpg b/Screenshots/VideoTek.jpg new file mode 100644 index 0000000..160b4d0 Binary files /dev/null and b/Screenshots/VideoTek.jpg differ diff --git a/screenshoots/avectorscope.jpg b/Screenshots/avectorscope.jpg similarity index 100% rename from screenshoots/avectorscope.jpg rename to Screenshots/avectorscope.jpg diff --git a/screenshoots/firequalizer15.jpg b/Screenshots/firequalizer15.jpg similarity index 100% rename from screenshoots/firequalizer15.jpg rename to Screenshots/firequalizer15.jpg diff --git a/screenshoots/showcqt.jpg b/Screenshots/showcqt.jpg similarity index 100% rename from screenshoots/showcqt.jpg rename to Screenshots/showcqt.jpg diff --git a/screenshoots/showcqtbar.jpg b/Screenshots/showcqtbar.jpg similarity index 100% rename from screenshoots/showcqtbar.jpg rename to Screenshots/showcqtbar.jpg diff --git a/screenshoots/showspectrum.jpg b/Screenshots/showspectrum.jpg similarity index 100% rename from screenshoots/showspectrum.jpg rename to Screenshots/showspectrum.jpg diff --git a/screenshoots/showwaves.jpg b/Screenshots/showwaves.jpg similarity index 100% rename from screenshoots/showwaves.jpg rename to Screenshots/showwaves.jpg diff --git a/VideoTek.lua b/VideoTek.lua new file mode 100644 index 0000000..e0065f8 --- /dev/null +++ b/VideoTek.lua @@ -0,0 +1,139 @@ +-- various audio visualization + + + +local opts = { + mode = "force", + -- off disable visualization + -- force always enable visualization + + + + name = "off", + -- off + -- tektronix + + + + quality = "medium", + -- medium + + + + +} + + + +-- key bindings +-- cycle visualizer +local cycle_key = "y" + + + +if not (mp.get_property("options/lavfi-complex", "") == "") then + return +end + + + +local visualizer_name_list = { + "off", + "tektronix", +} + + + + + +local options = require 'mp.options' +local msg = require 'mp.msg' + + + +options.read_options(opts) + +local function get_visualizer(name) + + +-- Here we define the Graph + if name == "tektronix" then + return "color=c=black:s=1280x720[black];[vid1]split=3[v1][v2][v3];[aid1]asplit[a1][a2];[a1]avectorscope=s=240x160:zoom=2:rc=2:gc=200:bc=10:rf=1:gf=8:bf=7[avect-out];[a2]showvolume=r=25:w=140:h=10:t=0:f=0.9[vol-out];[v1]scale=640x360[v1-o];[v2]hflip,waveform=m=1:d=0:r=1:c=7,scale=640x360,setsar=1,hflip[v2-o];[v3]vectorscope=m=0:g=green,scale=300x300,setsar=1[vect];[black][v1-o]overlay=0:0[q1];[q1][vol-out]overlay=640:0[q2];[q2][v2-o]overlay=0:360[q3];[q3][avect-out]overlay=1000:490[q4];[q4][vect]overlay=700:390[q5];[q5] setpts=PTS [vo]" + elseif name == "off" then + return "[aid1] asetpts=PTS [ao]; [vid1] setpts=PTS [vo]" + end + msg.log("error", "invalid visualizer name") + return "" +end + + + +local function select_visualizer(atrack, vtrack, albumart) + if opts.mode == "off" then + return "" + elseif opts.mode == "force" then + return get_visualizer(opts.name) + + + + end + + + + msg.log("error", "invalid mode") + return "" +end + + + +local function visualizer_hook() + local count = mp.get_property_number("track-list/count", -1) + local atrack = 0 + local vtrack = 0 + local albumart = 0 + if count <= 0 then + return + end + for tr = 0,count-1 do + if mp.get_property("track-list/" .. tr .. "/type") == "audio" then + atrack = atrack + 1 + else + if mp.get_property("track-list/" .. tr .. "/type") == "video" then + if mp.get_property("track-list/" .. tr .. "/albumart") == "yes" then + albumart = albumart + 1 + else + vtrack = vtrack + 1 + end + end + end + end + + + + mp.set_property("options/lavfi-complex", select_visualizer(atrack, vtrack, albumart)) +end + + + +mp.add_hook("on_preloaded", 50, visualizer_hook) + + + +local function cycle_visualizer() + local i, index = 1 + for i = 1, #visualizer_name_list do + if (visualizer_name_list[i] == opts.name) then + index = i + 1 + if index > #visualizer_name_list then + index = 1 + end + break + end + end + opts.name = visualizer_name_list[index] + visualizer_hook() +end + + + +mp.add_key_binding(cycle_key, "cycle-visualizer", cycle_visualizer) diff --git a/visualizer.lua b/visualizer.lua index 140fa5c..960dc02 100644 --- a/visualizer.lua +++ b/visualizer.lua @@ -7,7 +7,7 @@ local opts = { -- novideo enable visualization when no video -- force always enable visualization - name = "showcqt", + name = "off", -- off -- showcqt -- avectorscope