在播放时(播放剪辑的时间)显示VLC播放器中的剪辑时间

时间:2017-04-04 23:47:13

标签: video vlc video-processing

我正在录制一些运动录像,并在录制过程中记下一些笔记。

我希望能够尽快将我的评论与视频中的段落联系起来。我用GoPro录制它,所以1.5小时长的视频被切成小块。

我认为如果VLC可以在屏幕上显示素材拍摄的实际时间,那将是一个想法。以相同的方式(从具有该注释的命令行打开VLC):

vlc.exe --sub-filter=marq{marquee=$T/$D" Volume:"$V,size=-2,color=16776960}:marq{marquee=Time:%H:%M:%S" Date:"%d/%m/%Y,color=16776960,size=-2,position=6}

该行只显示当前时间。我希望它能够显示如下内容:

如果录制是在19:39:21, - 然后是视频的3分7秒开始,则计数器应该说19:42:28。这是可以实现的吗?

我认为VLC是实现它的最好/最简单的方式 - 但如果其他人有另一个或更好的想法,那么我全都是耳朵。

1 个答案:

答案 0 :(得分:0)

这是一个应该做你需要的LUA扩展。它会根据给定的" start"来显示右上角的时间。时间。您唯一需要做的就是设置开始时间。您可以随时调整开始时间,文本也应相应更新:

  1. 将文件custom_time.lua放入[VLC DIR]\VLC\lua\extensions
  2. 将文件looper_custom_time.lua放入[VLC DIR]\VLC\lua\intf
  3. 使用命令行参数运行VLC:vlc.exe --extraintf=luaintf{intf="looper_custom_time"}
  4. 您应该会看到从12:00:00开始的右上角时间,并根据播放的视频进行增量
  5. 您可以转到View -> Custom Time并设置开始时间应该是什么,文字应该更新
  6. 让我知道它是否有效!

    custom_time.lua:

    function descriptor()
      return {
        title = "Custom Time",
        capabilities = { }
      }
    end
    
    function activate()
      window = vlc.dialog("Enter Time")
        textbox = window:add_text_input("HH:MM:SS", 1, 1, 1, 1)
      label = window:add_label("Enter Start Time (24h)", 2, 1, 1, 1)
      button = window:add_button("Set", setStartTime, 1, 2, 2, 1)
    end
    
    function deactivate()
    end
    
    function meta_changed()
    end
    
    function setStartTime()
      vlc.config.set("bookmark10", textbox:get_text())
      vlc.msg.info("[ext_Custom_Time] " .. "Set Start Time to: ".. os.date("%H:%M:%S", globalTimeFinal))
    end
    

    looper_custom_time.lua:

    -- "looper_custom_time" >> copy the script file into VLC\lua\intf\ folder
    -- activate it:
    -- vlc.exe --extraintf=luaintf{intf="looper_custom_time"}
    
    function Looper()
       local loops=0 -- counter of loops
       while true do
          if vlc.volume.get() == -256 then break end  -- inspired by syncplay.lua; kills vlc.exe process in Task Manager
    
          if vlc.playlist.status()=="stopped" then -- no input or stopped input
             loops=loops+1
             Log(loops)
             Sleep(1)
          else -- playing, paused
             if vlc.playlist.status()=="playing" then
                showFinalTime()
                Sleep(1)
             elseif vlc.playlist.status()=="paused" then
                showFinalTime()
                Sleep(0.3)
             else -- ?
                Log("unknown")
                Sleep(1)
             end
          end
       end
    end
    
    function getStartTime()
       local pattern = "(%d+):(%d+):(%d+)"
       local startTimeString = vlc.config.get("bookmark10")
       if startTimeString == nil then
          startTimeString = ""
       end
    
       local hh, mm, ss = startTimeString:match(pattern)
       return os.time({year = 2000, month = 1, day = 1, hour = hh, min = mm, sec = ss})
    end
    
    function Log(lm)
       vlc.msg.info("[looper_intf] " .. lm .. os.date(" %H:%M:%S", getStartTime()))
    end
    
    function showFinalTime()
       local timePassed = getTimePassed()
       local timeStart = getStartTime()
       local timeFinal = os.date("%H:%M:%S", timeStart + timePassed)
       vlc.osd.message( timeFinal, vlc.osd.channel_register(), "top-right", 1200000)
    end
    
    function getTimePassed()
       return vlc.var.get(vlc.object.input(), "time")
    end
    
    function Sleep(st) -- seconds
       vlc.misc.mwait(vlc.misc.mdate() + st*1000000)
    end
    
    Looper()