ikaLogにはビデオ自動録画機能がある。
ikaLogには最初からアマレコTV用とOBS用のAutoITスクリプトが同梱済み。
試合開始/終了時にボタンを押す必要がなくなり、とても快適に試合を録画することができる。
せっかくなのでXSplit Broadcaster用のAutoITスクリプトを作成してみた。
と言ってもトーシロの作ったものなので、どこに不備があるか分からぬ不安仕様。
とりあえず、XSplitのv2.7では意図した通りに動作中。
※注意※
「録画ボタンを押す」という処理の書き方が分からなかったため、
XSplit Broadcasterの方で録画/停止にショートカットキーを割り当てて
そのキーを押すようにしています。
例では「Shift + L」をショートカットキーに指定しています。
(1) ikaLog本体がある場所のtoolsフォルダに「XSplitBroadcaster.au3」を新規作成する
(2) XSplitBroadcaster.au3をテキストエディタでひらく
(3)以下のスクリプトをコピペし、上書き保存する
=============================↓↓ここから↓↓==============================
#include <FileConstants.au3>
#include <StringConstants.au3>
;環境と好みに合わせて値を設定してください。
;SendKeyValue の値の書き方については以下のURLを参照。
;https://www.autoitscript.com/autoit3/docs/appendix/SendKeys.htm
Const $SendKeyValue = "+l"
;XSplit Broadcasterの録画開始に設定したキーの値
Const $STARTsleepSec = 0
;録画開始の待機時間(秒で指定)
Const $STOPsleepSec = 11
;録画終了の待機時間(秒で指定)
Const $RENAMEsleepSec = 3
;録画終了後リネーム処理までの待機時間(秒で指定)
;以下、スクリプト本文(書き換え不可)
Func RenameFile($source)
Local $dest = EnvGet('IKALOG_MP4_DESTNAME')
$dest = StringReplace($dest, "/", "\")
If $dest = '' Then
Return False
EndIf
FileMove($source, $dest, $FC_OVERWRITE)
EndFunc
Func FindRecentRecording()
Local $directory = EnvGet('IKALOG_MP4_DESTDIR')
; Replace all slashes to backslashes.
; $directory also needs a backslash at its end.
$directory = StringReplace($directory, "/", "\")
If StringRight($directory, 1) <> "\" Then
$directory = $directory & "\"
EndIf
Local $hSearch = FileFindFirstFile($directory & "*.mp4*")
If $hSearch = -1 Then
MsgBox(0, "Error", "Could not find any candinates in " & $directory & " (path 1)", 10)
Return False
EndIf
Local $latest_file = ''
Local $latest_timestamp = ''
While True
Local $file = FileFindNextFile($hSearch)
If @error Then ExitLoop
Local $timestamp = FileGetTime($directory & $file, $FT_MODIFIED, $FT_STRING)
If StringCompare($timestamp, $latest_timestamp) > 0 Then
$latest_file = $directory & $file
$latest_timestamp = $timestamp
EndIf
WEnd
FileClose($hSearch)
If $latest_file = '' Then
MsgBox(0, "Error", "Could not find any candinates in " & $directory & " (path 2)", 10)
Return False
EndIf
Return $latest_file
EndFunc
Func ControlXSplitBroadcaster()
;録画状態のウィンドウを取得
Local $hWnd = WinWait("ローカルレコーディング中","", 1)
Local $recStatus = True
;取得できなかったら待機状態のウィンドウを取得
If $hWnd = 0 Then
$hWnd = WinWait("XSplit Broadcaster","", 1)
$recStatus = False
;それでも取得できなかったらエラーを返す
If $hWnd = 0 Then
MsgBox(0, "Error", "Could not find XSplit Broadcaster. ")
Return False
EndIf
EndIf
If $recStatus Then
; 録画終了待機
Sleep(1000 * $STOPsleepSec)
Else
; 録画開始待機
Sleep(1000 * $STARTsleepSec)
EndIf
WinActivate($hWnd)
WinWaitActive($hWnd, "", 1)
; 録画終了/開始ホットキー送信
Send($SendkeyValue)
; 録画中だったらmp4ファイルのリネーム処理実行
If $recStatus Then
If EnvGet('IKALOG_MP4_DESTDIR') <> "" Then
Sleep(1000 * $RENAMEsleepSec)
Local $file = FindRecentRecording()
RenameFile($file)
EndIf
EndIf
EndFunc
ControlXSplitBroadcaster()
=============================↑↑ここまで↑↑==============================
(4) ikaLogのビデオ録画機能タブをひらく
(5) XSplitBroadcaster.au3のパスを「実行する制御スクリプト(ControlOBS.au3)のパス」欄に指定する
※別にファイル名はControlOBS.au3でなくても構わない模様
(6) 自動操作と自動リネームの欄にチェックを入れて設定を適用する
ぶっちゃけほとんど同梱のControlAmarecTV.au3そのまんま。
単に試合開始/終了のタイミングでShift + Lキーを押しているだけなので、
何らかの理由で試合開始時に録画が始まらなかった場合、試合終了時に録画が始まってしまう。
その場合は何事もなかったかのように
手動で録画を停止させる。