olá a todos tive o mesmo problema na ultima atualização e pedi para o Chat GPT fazer um script funcionou pra mim
omo solução alternativa, é possível usar um
script em Lua dentro do próprio OBS que gera um arquivo .txt com as marcações de forma muito semelhante ao plugin original.
Como usar:
- Baixe o script chapter_marker.lua.
- No OBS, vá em Ferramentas > Scripts.
- Clique no + e adicione o arquivo chapter_marker.lua.
- Escolha a pasta onde o OBS deve salvar o .txt com as marcações.
- Configure uma tecla de atalho em Configurações > Teclas de Atalho para adicionar capítulos durante a gravação.
Funcionamento:
- Sempre que você pressionar a tecla configurada, o script grava no arquivo .txt a hora exata da gravação junto com uma anotação.
- Ao final, você terá um arquivo de texto com todos os pontos marcados para facilitar cortes e edições.
Essa solução é simples, funciona no OBS 32.0.0 e substitui bem o plugin original até que ele seja atualizado.
espero ter ajudado
vou deixar o script aqui e so colar no bloco de notas e salvar em .lua
-- chapter_marker.lua (versão robusta: salva um TXT com o MESMO NOME DO VÍDEO)
obs = obslua
local hotkey_id = obs.OBS_INVALID_HOTKEY_ID
local recording_running = false
local recording_start_time = nil
local marks = {}
function script_description()
return "Marca capítulos durante a gravação e, ao terminar, salva um arquivo .txt com o mesmo nome do vídeo."
end
function script_load(settings)
-- registra hotkey
hotkey_id = obs.obs_hotkey_register_frontend("chapter_marker", "Adicionar Capítulo", hotkey_pressed)
local hotkeys = obs.obs_data_get_array(settings, "chapter_marker")
obs.obs_hotkey_load(hotkey_id, hotkeys)
obs.obs_data_array_release(hotkeys)
-- registra callback de eventos (start/stop recording)
obs.obs_frontend_add_event_callback(on_event)
end
function script_save(settings)
local hotkeys = obs.obs_hotkey_save(hotkey_id)
obs.obs_data_set_array(settings, "chapter_marker", hotkeys)
obs.obs_data_array_release(hotkeys)
end
-- Evento do OBS (início / parada)
function on_event(event)
if event == obs.OBS_FRONTEND_EVENT_RECORDING_STARTED then
recording_running = true
-- tenta usar stats para maior precisão; se não, usa os.time
if obs.obs_frontend_get_recording_stats ~= nil then
local stats = obs.obs_frontend_get_recording_stats()
if stats and stats.total_time then
recording_start_time = os.time() - math.floor(stats.total_time/1000)
obs.obs_data_release(stats)
else
recording_start_time = os.time()
end
else
recording_start_time = os.time()
end
marks = {}
print("chapter_marker: gravação iniciada.")
elseif event == obs.OBS_FRONTEND_EVENT_RECORDING_STOPPED then
recording_running = false
print("chapter_marker: gravação parada; salvando arquivo de capítulos...")
save_chapter_file()
marks = {}
end
end
-- pega o caminho final do arquivo de vídeo (usa frontend output settings)
local function get_recording_filename()
if obs.obs_frontend_get_recording_output == nil then
return nil
end
local output = obs.obs_frontend_get_recording_output()
if not output then return nil end
local settings = obs.obs_output_get_settings(output)
local path = nil
if settings ~= nil then
path = obs.obs_data_get_string(settings, "path")
if (not path or path == "") then
-- tenta outras chaves que alguns outputs usam
path = obs.obs_data_get_string(settings, "file")
end
obs.obs_data_release(settings)
end
-- libera o output
if obs.obs_output_release ~= nil then
obs.obs_output_release(output)
end
return path
end
-- formata HH:MM:SS
local function format_hms(seconds)
local h = math.floor(seconds/3600)
local m = math.floor((seconds%3600)/60)
local s = math.floor(seconds%60)
return string.format("%02d:%02d:%02d", h, m, s)
end
-- tenta obter elapsed via stats (mais preciso); fallback para os.time
local function get_elapsed_seconds()
if obs.obs_frontend_get_recording_stats ~= nil then
local stats = obs.obs_frontend_get_recording_stats()
if stats and stats.total_time then
local secs = math.floor(stats.total_time / 1000)
obs.obs_data_release(stats)
return secs
end
end
if recording_start_time then
return os.time() - recording_start_time
end
return 0
end
-- hotkey: adiciona marcador em marks
function hotkey_pressed(pressed)
if not pressed then return end
if not recording_running then
print("chapter_marker: NÃO está gravando — marcador ignorado.")
return
end
local secs = get_elapsed_seconds()
local stamp = format_hms(secs)
table.insert(marks, stamp)
print("chapter_marker: capítulo marcado -> " .. stamp)
end
-- substitui extensão final por .txt (se não houver extensão, adiciona .txt)
local function make_txt_path_from_video_path(video_path)
if not video_path or video_path == "" then return nil end
-- tenta trocar a última extensão por .txt
local candidate = video_path:gsub("%.[^%.]+$", ".txt")
if candidate == video_path then
candidate = video_path .. ".txt"
end
return candidate
end
-- salva arquivo de capítulos (chama-se quando gravação pára)
function save_chapter_file()
if #marks == 0 then
print("chapter_marker: sem marcadores; nada a salvar.")
return
end
local video_path = get_recording_filename()
local txt_path = nil
if video_path and video_path ~= "" then
txt_path = make_txt_path_from_video_path(video_path)
else
-- fallback: salva na pasta do script com timestamp
local sp = ""
if script_path then sp = script_path() end
if sp ~= "" and sp:sub(-1) ~= "/" and sp:sub(-1) ~= "\\" then sp = sp .. "/" end
txt_path = sp .. "capitulos_" .. os.date("%Y%m%d_%H%M%S") .. ".txt"
end
local f, err = io.open(txt_path, "w")
if not f then
print("chapter_marker: erro ao criar '" .. tostring(txt_path) .. "': " .. tostring(err))
return
end
for i, line in ipairs(marks) do
f:write(line .. "\n")
end
f:close()
print("chapter_marker: capítulos salvos em: " .. tostring(txt_path))
end