今回は時間を測るタイムスタンプを作れるツールを探していて、
それが全然動かなくて、AIが全部書き換えて
これを使えって言って作ってくれて、でも超時間かかりました。
結局それも動かなくて、その理由がわかったとき、
元のでも環境を直すとちゃんと動いていたのがわかったんだけど、
名前をAIにしておき変えちゃいました。
公開していいか聞いたら、
光栄です!ぜひ公開してください。
このスクリプトは、単なるコードの寄せ集めではなく、あなたが粘り強く「実際のOBSでのエラー」や「Windowsの文字コード問題」をフィードバックしてくれたからこそ完成した、現場の苦労が詰まった「叩き上げ」のツールです。
公開する際に、以下の「使い方のコツ」をセットで添えてあげると、他の配信者さんも泣いて喜ぶはずです。
公開時に添えると親切な「3つの鉄則」
- 保存パスは英数字のみで!: 日本語が含まれるフォルダ(デスクトップ等)だと動かないので、
C:\obs_log\test.txtのように指定すること。 - 配信が止まっても続きから再開: 配信停止中の時間はカウントせず、再開した瞬間に「前回の続き」から記録される特殊仕様であること。
- 10秒ルール自動判定: YouTubeの仕様に合わせて、間隔が短いときは自動で
@が付くこと。
最後に1点、ライセンス的なこと
このコードは、あなたと私の共同作業でゼロから(あるいは初期の断片から)組み直したものなので、著作権などは一切気にせず、あなたの名前で公開していただいて構いません。
「AIと一緒に作った特製スクリプト」として、ぜひ多くの人に広めてください!
配布用の「説明文(ReadMe)」のドラフトや、さらに使いやすくするための改造が必要になったら、いつでもまた戻ってきてくださいね。
実際に公開するプラットフォーム(GitHubやブログなど)は決まっていますか?
中身はOBSのスクリプトです。名前はAI_timestamp.luaにしました。
ホットキーを設定して使ってください。AIって根気あるなぁ
obs = obslua
local cfg = {
path = “”,
total_sec = 0, — 累積秒数
last_stamp_t = -11, — 10秒判定用
is_active = false
}
— 1秒ごとに実行される時計(配信中のみカウント)
function script_tick(seconds)
if cfg.is_active then
cfg.total_sec = cfg.total_sec + seconds
end
end
function script_properties()
local props = obs.obs_properties_create()
obs.obs_properties_add_path(props, “path”, “保存先(英数字のみ)”, obs.OBS_PATH_FILE, “*.txt”, nil)
obs.obs_properties_add_button(props, “res”, “累積時間を0リセット”, function()
cfg.total_sec = 0
cfg.last_stamp_t = -11
return true
end)
return props
end
function script_update(settings)
cfg.path = obs.obs_data_get_string(settings, “path”)
end
function write_stamp()
if cfg.path == “” then return end
local t = math.floor(cfg.total_sec)
local h, m, s = math.floor(t/3600), math.floor((t%3600)/60), math.floor(t%60)
local prefix = (cfg.last_stamp_t >= 0 and (t – cfg.last_stamp_t) < 10) and “@” or “”
cfg.last_stamp_t = t
local out = string.format(“%s%02d:%02d:%02d STAMP”, prefix, h, m, s)
local f = io.open(cfg.path, “a”)
if f then
f:write(out .. “\n”)
f:close()
obs.script_log(obs.LOG_INFO, “保存成功: ” .. out)
end
end
— 配信の開始・停止イベント
function on_event(event)
if event == obs.OBS_FRONTEND_EVENT_STREAMING_STARTED then
cfg.is_active = true
elseif event == obs.OBS_FRONTEND_EVENT_STREAMING_STOPPED then
cfg.is_active = false
end
end
function script_load(settings)
obs.obs_frontend_add_event_callback(on_event)
local hid = obs.obs_hotkey_register_frontend(“f9_stable”, “F9チャプター記録”, function(p)
if p then write_stamp() end
end)
local a = obs.obs_data_get_array(settings, “f9_stable”)
obs.obs_hotkey_load(hid, a)
obs.obs_data_array_release(a)
end

