VLCで5秒スキップするLua Extensions作る

前置き

前からVLCの再生時に30秒や60秒スキップできないかなぁと思っていた。
なので今回作った。
欲しかった機能は以下のとおり

  • スキップ秒数を指定できる
  • 前にも後にもスキップできる
  • 初期値は5秒にする (5秒の方が色々便利かなと思って)
  • Numpad 1で前へ、Numpad 2で次へスキップ可能

プログラム

  • skip_movie.lua
skip_second = 5 -- スキップする秒数。デフォルトは5秒
skip_previous_key = 49 -- Numpad 1
skip_next_key = 50 -- Numpad 2

function descriptor()
  return { title = "ムービースキップ",capabilities={} }
end

function activate()
  create_dialog()
  vlc.var.add_callback(vlc.object.libvlc() , "key-pressed", key_press)
end

function deactivate()
  vlc.var.del_callback(vlc.object.libvlc() , "key-pressed", key_press)
end

function close()
  vlc.deactivate()
end

function key_press(var , old , new , data)
  if new == skip_previous_key then skip_movie("Previous",skip_second) end
  if new == skip_next_key then skip_movie("Next",skip_second) end
end

function create_dialog()
  w = vlc.dialog("スキップする秒数を入力してください")
  w1 = w:add_text_input(skip_second,1,1,1,1)
  w:add_button("更新",click_Refresh,2,1,1,1)
  w:add_button("<",previous_skip,3,1,1,1)
  w:add_button(">",next_skip,4,1,1,1)
end

function next_skip()
  skip_movie("Next",skip_second)
end

function previous_skip()
  skip_movie("Previous",skip_second)
end

function click_Refresh()
  skip_second = tonumber(w1:get_text())
end

function skip_movie(action,sec)
  local input = vlc.object.input()
  local now = vlc.var.get(input,"time")
  if action == "Previous" then
    sec=-sec
  end
  vlc.var.set(input,"time",now + sec)
end

テキストボックスにフォーカスしている時にエンターキー押すとskip_secondが更新されるようにしたかったが、できないようだ。
仕方なく、更新ボタンを作成し、ボタン押下でskip_secondを更新するようにした。

一応、キーの値を取得するために作ったluaも載せておく。

function descriptor()
  return { title = "test" ,capabilities={} }
end

function activate()
  vlc.var.add_callback( vlc.object.libvlc(), "key-pressed" , key_press )
end

function deactivate()
  vlc.var.del_callback( vlc.object.libvlc() , "key-pressed" , key_press )
end

function close()
  vlc.deactivate()
end

function key_press(var , old , new , data)
  vlc.msg.info("Push key Number:"..new)
end

function create_dialog()
  w = vlc.dialog("Input Key!")
end