I'm going to tell you about how to create vlc extension.

be careful.there are bugs

Recomended

there are some techniqu for creating dialog.

-- "Simple Move Position" -- VLC Extension --

function descriptor()
	return {title = "Simple Move Position";
	capabilities = { "input-listener" }
	}
end

function activate()
	index=1
	max=20
	input=vlc.object.input();
	d=vlc.input.item():duration()/max;
	
	local d = vlc.dialog( "Simple Move Position" )
	d:add_button("next",do_next,1,1,1,1)
	d:show()
	
end

function deactivate()
end

function close()
	vlc.deactivate()
end

function do_next()
	vlc.var.set(input,"time",d*index)
	index=index+1
	if index==max then
		vlc.deactivate()
	end
end

need capabilities = { "input-listener" }

-- "half_position.lua" -- VLC Extension --
function descriptor()
	return {title = "Half Position";
	capabilities = { "input-listener" }
	}
end

function activate()
	 vlc.msg.info(vlc.input.item():duration())
	 vlc.var.set(vlc.object.input(),"time",vlc.input.item():duration()/2)
	 vlc.deactivate()
end

function deactivate()
end

do not work,too long sleep crush vlc

vlc wait few second such a heavy sleep()

-- "simple_move_position_alpha.lua" -- VLC Extension --
-- some how it crash vlc --
function descriptor()
	return {title = "Zapping";
	capabilities = { "input-listener" }
	}
end

function activate()
	local d=vlc.input.item():duration()/10;
	for i = 1, 9 do
		vlc.var.set(vlc.object.input(),"time",d*i)
		sleep(3);
	end
	 vlc.deactivate()
end

function deactivate()
end

function sleep(n)  -- seconds
  local t0 = os.time()
  while os.time() - t0 <= n do end
end

Not working because of Bug

callback check current position

-- "simple_move_position_beta.lua" -- VLC Extension --

function descriptor()
	return {title = "simple_move_position_beta";
	capabilities = { "input-listener" }
	}
end

function activate()
	index=1
	local input=vlc.object.input();
	d=vlc.input.item():duration()/10;
	
	next=index*d+3
	vlc.var.add_callback(input, "intf-event", input_event_handler, "Hello world!")
end

function deactivate()
vlc.var.del_callback(input, "intf-event", input_event_handler, "Hello world!")
end

function input_event_handler(var, old, new, data)
local input = vlc.object.input()
if input then
	local t = vlc.var.get(input, "time")
	if t>next then
		index=index+1

		jump=d*index;

		next=index*d+3
		vlc.var.set(input,"time",10)

		if index>=10 then
			vlc.deactivate()
		end
	end
end
end