obs = obslua local source_name = "" local delay_seconds = 10 local timer_id = "restart_media_timer" local is_waiting = false -- ============================== -- Reiniciar mídia -- ============================== function restart_media() local source = obs.obs_get_source_by_name(source_name) if source ~= nil then -- Força o reinício do arquivo (vídeo ou áudio) do início obs.obs_source_media_restart(source) obs.obs_source_release(source) print("Fonte '" .. source_name .. "' reiniciada. Aguardando próximo ciclo.") end is_waiting = false end -- ============================== -- Monitorar o tempo da mídia (Tick) -- ============================== function tick(seconds) if source_name == "" then return end local source = obs.obs_get_source_by_name(source_name) if source == nil then return end -- Obtém o tempo atual e a duração total em milissegundos local current_time = obs.obs_source_media_get_time(source) local duration = obs.obs_source_media_get_duration(source) -- Se a mídia está quase acabando (faltando menos de 200ms) -- E não estamos esperando o delay if not is_waiting and duration > 0 and current_time >= (duration - 200) then print("Fim da mídia detectado. Aguardando " .. delay_seconds .. " segundos.") is_waiting = true -- Remove qualquer timer antigo para evitar conflitos obs.timer_remove(restart_media) -- Inicia o timer com o delay configurado obs.timer_add(restart_media, delay_seconds * 1000) end obs.obs_source_release(source) end -- ============================== -- Propriedades no OBS -- ============================== function script_properties() local props = obs.obs_properties_create() -- Lista de fontes de mídia (vídeo e áudio via ffmpeg) local p = obs.obs_properties_add_list(props, "source_name", "Fonte de Mídia (Vídeo/Áudio)", obs.OBS_COMBO_TYPE_EDITABLE, obs.OBS_COMBO_FORMAT_STRING) local sources = obs.obs_enum_sources() if sources ~= nil then for _, source in ipairs(sources) do local source_id = obs.obs_source_get_unversioned_id(source) -- ffmpeg_source cobre arquivos de vídeo e áudio MP3/WAV/etc if source_id == "ffmpeg_source" then local name = obs.obs_source_get_name(source) obs.obs_property_list_add_string(p, name, name) end end end obs.source_list_release(sources) obs.obs_properties_add_int( props, "delay_seconds", "Segundos de pausa após terminar", 1, 600, 1 ) return props end -- ============================== -- Atualizar valores -- ============================== function script_update(settings) source_name = obs.obs_data_get_string(settings, "source_name") delay_seconds = obs.obs_data_get_int(settings, "delay_seconds") -- Reinicia o estado caso o usuário mude a fonte nas configurações is_waiting = false obs.timer_remove(restart_media) end -- ============================== -- Inicialização -- ============================== function script_load(settings) -- Usamos o 'tick' para monitorar o tempo a cada 100ms obs.timer_add(tick, 100) end function script_unload() obs.timer_remove(tick) obs.timer_remove(restart_media) end