AoE Editor
使用此技能來處理長篇的《世紀帝國》(AoE) 遊戲錄製檔案,將其整理成乾淨的獨立對戰剪輯、產生逼真的 YouTube 縮圖,並管理排程的 YouTube 上傳。
嚴格的安全與保全防護措施
1. 原始錄製檔案的保留與完成標記
[!IMPORTANT] 永遠不要刪除原始錄製檔案 — 用
- aoe-editor-done標記已完成的檔案 在任何情況下,代理程式都不得刪除、移除或覆寫原始錄製檔案 (例如位於$env:USERPROFILE\Videos\的檔案)。
- 處理期間原始檔案保持不變:即使成功提取剪輯、審閱或上傳至 YouTube,原始會話影片絕對不可以刪除。
- 完成時重新命名 (
- aoe-editor-done):一旦某個原始錄製檔案中的所有遊戲都已完成編輯、切割、驗證並儲存到目標日期資料夾後,必須將該原始檔案重新命名,方法是在副檔名之前加上- aoe-editor-done:
- 範例 (
.mp4):2026-10-27 20-35-29.mp4->2026-10-27 20-35-29 - aoe-editor-done.mp4- 範例 (任何副檔名):
<檔名>.<副檔名>-><檔名> - aoe-editor-done.<副檔名>- PowerShell 命令:
$item = Get-Item "<來源路徑>" Rename-Item -Path $item.FullName -NewName "$($item.BaseName) - aoe-editor-done$($item.Extension)"- 跳過已完成的檔案:掃描或識別要處理的會話錄製檔案時,始終忽略並跳過任何副檔名前已經含有
- aoe-editor-done的檔案。- 捨棄的遊戲:對於被跳過或捨棄的遊戲 (例如時長 < 7 分鐘),只需跳過該段落的提取。切勿從原始影片中剪下、截斷或刪除任何內容。
- 僅清理暫存檔案:只有暫存檔案 (例如暫存/草稿資料夾中的取樣幀 JPEG) 可以被清理。永遠不要刪除原始影片檔案。
2. 嚴格的安全與憑證保護
[!CAUTION] 永遠不要讀取憑證或權杖檔案 在任何情況下,代理程式都不得讀取、檢視、顯示或檢查任何憑證檔案、機密或權杖的內容。
- 零檢查:特別注意,絕不讀取、檢查、cat、列印或輸出
$env:USERPROFILE\Videos\yt-uploader\內部的任何檔案 (例如request.token、youtube.token.json、client_secrets.json或任何*.token/*.json憑證檔案)。- 僅限執行:執行
yutu時,只能使用環境變數 (YUTU_CREDENTIAL、YUTU_CACHE_TOKEN) 和命令列參數來呼叫它。切勿檢查或輸出它讀取的權杖或機密。
3. 無人值守處理期間防止睡眠 (原生保持喚醒)
為了讓工作流程能夠完全在無人值守的情況下運行 (偵測、切割剪輯、渲染縮圖或批次上傳至 YouTube),同時允許用戶的顯示器自然關閉或睡眠:
- 預設方法 (原生 Windows API - 螢幕可睡眠):使用 Windows
SetThreadExecutionState搭配ES_CONTINUOUS | ES_SYSTEM_REQUIRED(0x80000001)。這會通知 Windows 背景處理/上傳正在進行中,保證 CPU、磁碟和網路永遠不會進入睡眠,同時允許顯示器根據正常的 Windows 電源設定關閉或睡眠:$sig = '[DllImport("kernel32.dll", SetLastError=true)] public static extern int SetThreadExecutionState(int esFlags);' $power = Add-Type -MemberDefinition $sig -Name 'PowerHelper' -Namespace 'SystemSleep' -PassThru # 防止系統睡眠 (允許顯示器睡眠) $power::SetThreadExecutionState([int]0x80000001) - 釋放睡眠鎖定:一旦所有批次任務或上傳完成,將執行狀態重置回預設的連續模式:
$power::SetThreadExecutionState([int]0x80000000) - 替代方案 (Caffeine):Caffeine 安裝在
caffeine64.exe。由於 Caffeine 每 59 秒模擬一次鍵盤輸入,除非顯示器被物理關閉,否則它會阻止顯示器睡眠。請使用上述的原生方法作為標準。 - 建議持續時間 / 使用方式:
- 在批次作業期間 (特別是上傳,6-8 GB 的影片可能需要 1-3 小時) 保持活躍,並在完成後立即釋放。
目的地資料夾結構
所有處理過的遊戲和縮圖都儲存在 aoe 目錄下,該目錄位於根據錄製檔案名稱產生的日期格式化子資料夾中:
$env:USERPROFILE\Videos\aoe\<DDMmmYY>\
├── Game 1 - <MyCiv> vs <OpponentCiv> (<Map> - <Result>).mp4
├── Game 1 - <MyCiv> vs <OpponentCiv> (<Map> - <Result>).png # 縮圖,名稱與影片完全匹配
├── Game 3 - <MyTeamCivs> vs <OpponentCivs> (<Map> - <Result>).mp4 # (例如 Game 2 因為 <7m 被捨棄)
├── Game 3 - <MyTeamCivs> vs <OpponentCivs> (<Map> - <Result>).png
└── ...
日期資料夾規則
- 日期從影片檔案名稱解析:
YYYY-MM-DD ...- 範例:
2026-10-27 20-35-29.mp4->27Oct26 - 範例:
2026-10-29 19-46-42.mp4->29Oct26 - 格式:
<日><3字母月><2位數年>(例如13Oct26、27Oct26、29Oct26)。
- 範例:
遊戲篩選與時長規則
-
少於 7 分鐘的短遊戲 (自動捨棄 / 跳過匯出):
- 任何遊戲內時長少於 7 分鐘的遊戲 (例如提前投降、斷線、開始失敗) 必須跳過匯出 (不提取或不儲存為輸出剪輯)。不要刪除、截斷或修改原始來源影片的任何部分。
- 保留按時間順序的編號:被捨棄的遊戲仍然佔用其在錄製會話中的時間順序編號。
- 範例:如果 Game 1 為 18 分鐘,Game 2 為 2 分鐘 (被捨棄),Game 3 為 25 分鐘,則產生的輸出檔案將是
Game 1 - ...接著是Game 3 - ...。Game 2 在檔案清單中被跳過,因此編號能準確反映原始的比賽順序。
- 範例:如果 Game 1 為 18 分鐘,Game 2 為 2 分鐘 (被捨棄),Game 3 為 25 分鐘,則產生的輸出檔案將是
-
一面倒 / 無聊的遊戲 (剪下並供用戶審閱):
- 如果遊戲看起來非常一面倒或無聊 (例如早期分數大幅領先、抵抗/交戰極少、缺乏競爭性的碾壓局):
- 照常剪下並儲存遊戲到日期資料夾,以便保留本地影片。
- 提示用戶:通知用戶剪輯的詳細資訊、時間戳記以及為何感覺一面倒/無聊。請用戶在決定是否將其加入 YouTube 上傳佇列之前,先審閱該剪輯。
- 如果遊戲看起來非常一面倒或無聊 (例如早期分數大幅領先、抵抗/交戰極少、缺乏競爭性的碾壓局):
遊戲偵測與剪裁規則
-
剪輯起始點:
- 從載入畫面過渡到遊戲開始 (城鎮中心和起始單位出現) 時開始。
-
剪輯結束點與賽後分析:
- 保留賽後分析:如果玩家檢視了賽後成就畫面 (摘要、軍事、經濟、科技、社會) 或觀看重播分析,請將其保留在遊戲影片剪輯中。
- 剪輯在玩家離開賽後畫面 / 重播回到主選單或佇列時結束。
-
需要剪掉的內容:
- 配對佇列時間。
- 大廳等待與文明選擇倒數畫面。
- 任何閒置時間、瀏覽桌面或離開鍵盤 (AFK) 的片段。
嚴格的命名慣例
1. 本地影片與縮圖檔案名稱 (.mp4 / .png)
磁碟上的本地檔案用於本地追蹤、歸檔和比賽時間順序記錄:
- 遊戲編號:來自會話的比賽索引 (
Game 1、Game 2等),為少於 7 分鐘被捨棄的比賽保留跳過的編號。 - 文明:
- 1v1:
Game <N> - <MyCiv> vs <OpponentCiv> (<Map> - <Result/Notes>).mp4- 範例:
Game 1 - Ethiopians vs Franks (Arabia - Win).mp4
- 範例:
- 團隊:
Game <N> - <MyTeamCivs> vs <OpponentCivs> (<Map> - <Result/Notes>).mp4- 範例:
Game 3 - Khmer and Franks vs Persians and Bohemians (Arena - Win).mp4
- 範例:
- 1v1:
- 縮圖檔案名稱:必須與
.mp4檔案名稱逐字元匹配,將.mp4換成.png。
2. YouTube 影片標題 (透過 -title / -metaJSON 上傳到 YouTube)
[!IMPORTANT] YOUTUBE 標題:不包含勝/敗劇透,也不包含遊戲編號 發布到 YouTube 的標題絕對不能劇透比賽結果,也絕對不能包含會話遊戲編號:
- 不要包含
Win或Loss:不要為觀眾劇透比賽結果。- 不要包含
Game 1、Game 2等:在 YouTube 上瀏覽的觀眾看的是獨立的比賽,而不是原始的會話索引。- 標準 YouTube 標題語法:
<MyTeamCivs> vs <OpponentCivs> AOE2 <MatchFormat> <Map>
- 1v1 格式:
<MyCiv> vs <OpponentCiv> AOE2 1v1 <Map>
- 範例:
Khmer vs Bohemians AOE2 1v1 Arena- 範例:
Dravidians vs Tatars AOE2 1v1 Arabian Desert- 範例:
Ethiopians vs Franks AOE2 1v1 Arabian Desert- 2v2 格式:
<Civ1> & <Civ2> vs <Civ3> & <Civ4> AOE2 2v2 <Map>
- 範例:
Khmer & Franks vs Persians & Bohemians AOE2 2v2 Arena- 範例:
Khmer & Bengalis vs Malians & Mongols AOE2 2v2 Arena- 3v3 格式:
<Civ1>, <Civ2> & <Civ3> vs <Civ4>, <Civ5> & <Civ6> AOE2 3v3 <Map>
- 範例:
Khmer, Bohemians & Goths vs Ethiopians, Romans & Celts AOE2 3v3 Arena- 4v4 格式:
<Civ1>, <Civ2>, <Civ3> & <Civ4> vs <Civ5>, <Civ6>, <Civ7> & <Civ8> AOE2 4v4 <Map>
- 範例:
Ethiopians, Franks, Britons & Mayans vs Mongols, Tatars, Turks & Persians AOE2 4v4 Black Forest
真實縮圖與動態迷因指南 (.png)
[!IMPORTANT] 縮圖檔案名稱必須與影片檔案名稱匹配 每個影片的縮圖檔案名稱必須與影片檔案名稱完全匹配 (將副檔名換成
.png):
- 影片:
Game 1 - Ethiopians vs Franks (Arabia - Win).mp4- 縮圖:
Game 1 - Ethiopians vs Franks (Arabia - Win).png- 影片:
Game 3 - Khmer and Franks vs Persians and Bohemians (Arena - Win).mp4- 縮圖:
Game 3 - Khmer and Franks vs Persians and Bohemians (Arena - Win).png
避免誤導性的標題黨或重複的單一迷因套路。將縮圖建立在實際發生的事情上,保持迷因編輯的多樣性、有機性並符合比賽故事:
1. 高影響力縮圖樣式與排版
設計大膽、高對比的排版,針對行動裝置動態消息最佳化可讀性:
- 大而有力的文字:字型大小必須夠大,並且在行動裝置動態消息上能夠立即閱讀 (1440p 為
fontsize=140到160,其他解析度按比例調整)。切勿使用小尺寸、低對比的文字 (<100)。 - 粗輪廓與投影:使用粗黑色邊框 (
borderw=8到12) 和陰影 (shadowx=4:shadowy=4:shadowcolor=black),使文字在任何背景下都能凸顯。 - 雙色與多色文字樣式:不要預設使用純白色文字。在單詞/行之間使用對比鮮明、鮮豔的顏色:
- 上方的詞使用白色 (
#FFFFFF),下方的詞/關鍵詞使用鮮豔的金色/黃色 (#FFD700或#FFE500) 或橘色 (#FF8C00)。 - 範例雙色配置:
"LETS STEAL" (白色) / "SOME GOLD!" (黃色)"OUTPOST" (白色) / "REVENGE!" (橘色)"CASTLE" (白色) / "MELTERS" (黃色)"WHY MAKE" (白色) / "THESE?!" (橘色)"SCORPION" (白色) / "DEATHBALL" (黃色)"CELT SIEGE" (黃色) / "UNSTOPPABLE" (白色)
- 上方的詞使用白色 (
- 動態且靈活的文字位置 (嚴格主體清除):
-
[!IMPORTANT] 文字絕對不能覆蓋焦點單位或主體
- 文字疊加層絕對不能覆蓋、遮蔽或壓在鉤子中提到的焦點單位、建築物或戰術事件上 (例如,如果鉤子寫著
"SIEGE ELEPHANT BREACH",則攻城象必須保持 100% 可見且不被文字阻擋)。 - 嚴格將文字放置在不會覆蓋動作的位置 (在開放的負空間、戰爭迷霧或空曠地形中)。
- 檢查單位和戰鬥在螢幕上的位置,並動態地將文字定位在頂部中央、頂部左側、頂部右側或底部中央,以便焦點動作和主體單位保持完全不受阻擋。
-
2. 動作幀選擇與視覺文字佐證
- 零閒置基地幀**: 絕不選擇一個攝影機視角拉回、聚焦於和平的家園農田、城鎮中心或經濟佇列,而動作發生在其他地方的幀。
- 進行中的戰鬥與攻擊 (絕不是戰鬥後的殘局或空蕩廢墟):
- 幀必須捕捉進行中的即時、活躍的戰鬥或攻擊:單位在近戰中積極交鋒、射出箭矢、發射攻城投擲物、襲擊經濟區或攻擊敵方基地/城堡。
- 不要空盪的靜態廢墟:絕不選擇沒有敵方單位積極攻擊或存在時,破牆或受損建築物的幀。沒有活躍部隊的破牆看起來像是被遺棄的、靜態的且無趣的。
- 不要戰鬥後的殘局 (地板上的屍體):絕不選擇戰鬥已經結束後拍攝的幀,僅顯示地板上的屍體/死屍和剩餘單位閒置。在戰鬥期間捕捉動作,而不是戰鬥之後。
- 不透露結果或分數劇透:
- 縮圖絕對不能透露比賽結果:
- 絕對不要捕捉在聊天中顯示
"Player X resigned"或在計分框中顯示劃掉的玩家名稱的幀。 - 沒有分數差距 / 基地被摧毀的劇透:絕不選擇右下角計分框顯示巨大分數差距 (例如玩家分數為對手的 70–75%) 且玩家基地處於被毀壞/被襲擊狀態的幀。這會明顯向觀眾劇透失敗的結果,破壞懸念。保持分數和棋盤狀態模糊,或將其裁剪/清理乾淨。
- 絕對不要捕捉在聊天中顯示
- 所有縮圖幀必須在活躍、緊張、有競爭性的遊戲過程中捕捉。
- 縮圖絕對不能透露比賽結果:
- 臉部相機表情品質與裁切檢查協定:
- 如果錄製內容包含網路攝影機 / 臉部相機重疊畫面:
- 專門的臉部相機檢查 (在 1:1 比例下裁切並驗證):絕不要僅依賴整個 1440p 視野來判斷臉部表情。代理程式必須以 1:1 像素比例單獨裁切並檢查臉部相機區域 (
crop=390:300:0:890或等效的網路攝影機框),然後再確
- 專門的臉部相機檢查 (在 1:1 比例下裁切並驗證):絕不要僅依賴整個 1440p 視野來判斷臉部表情。代理程式必須以 1:1 像素比例單獨裁切並檢查臉部相機區域 (
- 如果錄製內容包含網路攝影機 / 臉部相機重疊畫面: