如何在VLC媒体播放器中暂停后倒回几秒钟?

3
我在互联网上搜索过,但似乎找不到任何相关信息。我知道VLC媒体播放器有一些快捷键可以跳过几秒钟的内容,也知道有一些快捷键可以暂停和播放音频/视频。然而,我正在使用单个脚踏板进行转录,实际上需要它同时完成这两个功能。我希望通过踏下脚踏板来暂停音频,再次踏下后,它可以播放音频,但是在这样做时跳过几秒钟的内容。这是否可能?

请添加编程语言标签,如 C++C#,同时展示您已经尝试过的内容。 - kennyzx
你确定这是一个编程问题吗?它可能更适合于其他的StackExchange论坛吗? - Paul Rooney
哦,我想你是对的。不确定我应该在哪里发布它...抱歉,伙计们! - Ryan
1
也许supueruser可以看看这里,有关于VLC媒体播放器的问题。 - Paul Rooney
你应该可以用一个简单的VLC lua脚本来完成这个任务,如果你还感兴趣,我可以写一些代码。 - Tee
显示剩余4条评论
2个回答

1
将此代码保存为rollback.lua,并将其放置在Program Files\VideoLAN\VLC\lua\extensions文件夹中。然后通过“查看”>“回滚X秒”激活它。
function descriptor()
   return {
      title = "Rollback X Seconds",
      capabilities = {"input-listener", "playing-listener"}
   }
end

function activate()
end
function close()
end
function deactivate()
end

function input_changed()
end

function playing_changed()
    local TIME_DELTA = -3

    if vlc.playlist.status()=="paused" then

        local timePassed = vlc.var.get(vlc.object.input(), "time")
        local newTime = timePassed + TIME_DELTA

        vlc.osd.message(TIME_DELTA, vlc.osd.channel_register(), "top-left", 1400000)        
        vlc.var.set(vlc.object.input(), "time", newTime)
    end
end

将变量TIME_DELTA更改为您在暂停时想要的任何时间更改

1
尝试过了,但没有效果(脚本已启用但什么也没发生)。同时,时间单位不清楚(秒?毫秒?),我尝试设置从-1到-10000的时间,但仍然没有效果。 - rur
我也是,只有 activate() 被调用了。 - Sridhar Sarnobat

1

我在Tee提供的code的基础上添加了GUI。
我还想添加一些详细信息来使其工作。

  1. 创建一个空文件,将其命名为rollback.lua。
  2. 复制下面列表中提供的代码,粘贴到文件中并保存。
  3. 将该文件移动到VLC的lua扩展文件夹中,它应该看起来像这样:
    c:/Program Files/VideoLAN/VLC/lua/extensions
  4. 重新启动VLC播放器。
  5. 通过进入视图 > 回滚X秒(注意!每次启动VLC使用插件都需要执行此操作)来激活脚本。
  6. 选择您想要回滚的时间(以秒为单位),然后点击保存(或保存并关闭)。
为了让您的踏板与此脚本配合使用,只需在VLC中配置播放/暂停切换的热键。
VLC > 工具 > 首选项 > 快捷键 > 将“播放/暂停”全局值设置为您的踏板。
(更改全局快捷键后,需要重新启动VLC才能使其生效...) 代码:
micro_second_unit = 1000000  
TIME_DELTA        = 1     --Default, 
SHOW_OUTPUT       = true
TIME_TO_DISPLAY   = 1.5    --Default


function descriptor()
   return {
      title = "Rollback X Seconds",
      capabilities = {"input-listener", "playing-listener"}
   }
end

function activate()
    dlg = vlc.dialog("Rollback X Seconds")    

    rollback_input         = dlg:add_text_input("1", 2, 1 )    
    rollback_input_label   = dlg:add_label("Seconds to back", 1, 1)

    checkBox = dlg:add_check_box("Show output time ", wasChecked, 3, 3 )

    timeTo_display_box        = dlg:add_text_input(1.5, 2 ,3)
    timeTo_display_box_label  = dlg:add_label("Seconds To Display", 1, 3)

    w2 = dlg:add_button("Save settings", change_step, 3, 4, 1, 1)
    w2 = dlg:add_button("Save and close", updateAndClose, 3, 5, 1, 1)

    done = dlg:add_label( "" , 3, 6)

end
function close()
end
function deactivate()
   vlc.deactivate()
end

function input_changed()
end

function playing_changed()    

    if vlc.playlist.status()=="paused" then

        local timePassed = tonumber(vlc.var.get(vlc.object.input(), "time"))
        local newTime = timePassed - seconds_to_microsecond(TIME_DELTA)

        local newTime_inSeconds     = (newTime/1000000)
        local newTime_inMinutes     = (newTime_inSeconds/60)
        local newTime_inSeconds_restOfMin  = math.fmod(newTime_inSeconds,60)
        local newTime_str           = math.floor(newTime_inMinutes) .. "min " .. round(newTime_inSeconds_restOfMin,1) .."sec"        

        local timePassed_inSeconds  = (timePassed/1000000)
        local timePassed_inMinutes  = (timePassed_inSeconds/60)
        local timePassed_inSeconds_restOfMin  = math.fmod(timePassed_inSeconds,60)

        local timePassed_str  = math.floor(timePassed_inMinutes) .. "min " .. round(timePassed_inSeconds_restOfMin,1) .."sec"


        if SHOW_OUTPUT == true then
            vlc.osd.message("Seconds to Back:" .. TIME_DELTA .. "sec", vlc.osd.channel_register(), "top-right", seconds_to_microsecond(TIME_TO_DISPLAY))  

           vlc.osd.message("New time:" .. newTime_str, vlc.osd.channel_register(), "top-left", seconds_to_microsecond(TIME_TO_DISPLAY))   

           vlc.osd.message("Old time:" .. timePassed_str, vlc.osd.channel_register(), "bottom-left", seconds_to_microsecond(TIME_TO_DISPLAY))   
        end


        vlc.var.set(vlc.object.input(), "time", newTime)
    end
end
function updateAndClose()
   change_step()
   dlg:delete()
end

function change_step()
    done:set_text("Saved")

   TIME_DELTA = tonumber(rollback_input:get_text())

   SHOW_OUTPUT = checkBox:get_checked()

   if SHOW_OUTPUT == true then 
      TIME_TO_DISPLAY = tonumber(timeTo_display_box:get_text())
   end 

end

function round(num, numDecimalPlaces)
  local mult = 10^(numDecimalPlaces or 0)
  return math.floor(num * mult + 0.5) / mult
end

function microsecond_to_seconds(timeToConvert)  

  return timeToConvert / micro_second_unit;
end

function seconds_to_microsecond(timeToConvert)

  return timeToConvert * micro_second_unit;
end

这将像Tee的脚本一样工作,每次暂停视频时它会跳回。
唯一的区别是,您可以设置每次启动脚本时要跳回的时间量。
该金额以秒为单位给出,但您可以使用小数来进行更多控制...
还有一个复选框,如果您想显示有关跳转的信息,则可以勾选

我还要感谢Tee的回答!
这是我写的第一个lua代码(或者说修改),有点凌乱,但它可以工作,而且自从那时以来我每天都在使用它,所以我想分享一下。


如果你对 Mac OS X VLC 3.0 中的菜单部分感到困惑,请注意,它位于 VLC -> Extensions -> Rollback X Seconds 下面。 - Sridhar Sarnobat
安装了这个软件,它显示出来并且我可以配置它,但是它什么也没做。在macOS 11.2.1上的VLC 3.0.12。 - robo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接