世界級的 After Effects 動態圖形:工作流程
請遵循共同基礎步驟,選擇相關模式進行操作,最後完成品質檢查與交付:
- 步驟 A – 連線至 After Effects。 建立對自己 AE 實例的可靠控制。
- 步驟 B – 永遠適用的規則。 在開始建構前,請先閱讀共通的動畫與可編輯性規則。
- 步驟 C – 重製流程。 透過分析、測量與比對來匹配參考影片。
- 步驟 D – 建立流程。 經由研究、概念、腳本與建構來開發原創影片。
- 步驟 E – 完成。 驗證最終渲染並包裝所需的交付成果。
工作模式
| 模式 | 目標 | 如何開始 |
|---|---|---|
| 重製 | 以原生方式重建,在時間、佈局、動態和外觀上 1:1 匹配參考影片。 | 分析並測量參考影片;它定義了故事的樣貌。 |
| 建立 | 為品牌或產品製作 原創 影片。 | 研究、概念、腳本與情緒板,接著進行建構。 |
步驟 A – 連線至 After Effects
目標是擁有一個私有、可靠、可透過腳本控制的 After Effects 實例,不受其他代理干擾,並且您無需觸碰圖形介面即可驅動它。
A1. 啟動您自己的實例
- 記錄正在運行的 AE 行程 ID (PID):
pgrep -f "Contents/MacOS/After Effects"。 - 啟動一個新的實例:
一個小型的 Swift 啟動程式(使用open -n "/Applications/Adobe After Effects 2026/Adobe After Effects 2026.app" --args -mNSWorkspace.openApplication,設定createsNewApplicationInstance=true和參數-m -ApplePersistenceIgnoreState YES)可以達到相同效果並直接傳回 PID。- 請勿 透過
subprocess.Popen啟動原始二進位檔案。該行程未經套件註冊,無法接收 AppleEvents。
- 請勿 透過
- 比對 PID 列表,並保留新的 PID 供後續指令使用。
- AE 可能在啟動後以新的 PID 重新執行。請獲取擁有「Adobe After Effects」主視窗的 PID(可透過 Quartz 的
CGWindowListCopyWindowInfo取得)。 - 其套件 ID 為
com.adobe.AfterEffects.application。
- AE 可能在啟動後以新的 PID 重新執行。請獲取擁有「Adobe After Effects」主視窗的 PID(可透過 Quartz 的
- 關閉啟動對話方塊(例如「修復崩潰」→「繼續」)。這些實例中出現的 Adobe 登入視窗是已知的顯示錯誤:請忽略它,切勿輸入憑證,也不要將其回報給使用者。
ensure_ae.py自動化了所有這些步驟:當 PID 消失時重新啟動、確認小型對話方塊、偵測重新執行的 PID,並重新開啟專案。
A2. 僅透過 PID 與其通訊
tell application "Adobe After Effects 2026"會影響 任何 實例,包括其他代理的實例。絕對不要使用它。aedo(Swift)將 AppleEventmisc/dosc(DoScript)傳送給單一 PID。ae.py script.jsx或ae.py -e "code"包裝了每個腳本:- 包含 ES3 JSON 多邊形填充 (
json.jsx); - 呼叫
app.beginSuppressDialogs(); - 在 try/catch 區塊內執行
$.evalFile; - 將
{ok, value, error, line, file, ms}寫入結果檔案。由於 AppleEvent 的回傳值不可靠,因此務必讀取該檔案。
- 包含 ES3 JSON 多邊形填充 (
- 專案身分守衛: 在執行任何會變更專案的腳本前,請驗證目標 PID 和
app.project.file是否與正在編輯的專案相符。從未關閉或結束您未經驗證屬於自己的實例。 - 一次只執行一個 AE 腳本。腳本通常不具有等冪性,因此在進行大量變更前請備份或另存新檔。
A3. 開始實際工作前的健康檢查
透過一個腳本讀回以下資訊:
app.version以及該專案是否為您所擁有;- 合成渲染器(需要
ADBE Advanced 3d來支援 3D 模型圖層和環境光); - 字型:對於您計畫使用的每種字型,
app.fonts.getFontsByPostScriptName(name).length必須大於 0; - 確認測試用的
saveFrameToPng已存在於磁碟上。
同時設定允許腳本寫入檔案和存取網路的偏好設定 (Pref_SCRIPTING_FILE_NETWORK_SECURITY)。
A4. 建構流程:資料 → 原生專案
使用可用的建構輔助工具或自行實作等效功能;以下輔助工具名稱說明了它們的角色。
-
Python 將影片描述為資料。 一個
kit.pyDSL 提供了:- 具有具名緩動函數的
K()稀疏關鍵影格; shape、text、precomp、null、camera、model、L(圖層);- 透過 matchName 指定的效果、遮罩、軌道遮色片、表達式、標記、註解、標籤。
將場景規格組合成單一建構規格。
- 具有具名緩動函數的
-
kit.jsx根據規格建構原生圖層。- 它從底層開始建立圖層,因此它們已經處於最終的順序。避免使用
moveTo進行大量重新排序,這可能會導致 AE 停頓。 - 接著套用父子關係、效果、遮罩、變形、緩動、遮色片和環境光線連接。
- 它從底層開始建立圖層,因此它們已經處於最終的順序。避免使用
-
build.py spec.json --new --only "A|B" --stills "Comp:t1,t2" --save output.aep--new會在 不儲存 的情況下關閉當前專案(CloseOptions.DO_NOT_SAVE_CHANGES)。否則newProject()會開啟「另存新檔」對話方塊並導致掛起。
-
靜止幀:
stills.py "Comp" t1,t2 prefix。saveFrameToPng是 非同步的(輪詢直到檔案存在)並且會寫入 16 位元 PNG(在 8 位元檢視前需除以 257)。
-
特定範圍的動畫渲染:
render.py "Comp" start end out.mp4 [--half] [--hq],或使用搭配-s/-e參數的 aerender。 -
完整渲染:
aerender_job.py "Comp" out.mp4 [--half] [--hq]。- 它會儲存一個工作副本,並在 獨立行程 中執行
aerender -project job.aep -rqindex 1 -sound ON。 - 這比應用程式內部的佇列更快,而且當機也不會影響到工作中的實例。
- 它會儲存一個工作副本,並在 獨立行程 中執行
-
連絡表:
contact.py(來自影片的影格)和sheet.py(靜止幀,保持長寬比)。在檢視前務必縮小圖片。
A5. ExtendScript 規則 (ES3)
- 沒有
JSON和Array.indexOf:請使用多邊形填充或迴圈。使用eval('('+text+')')讀取 JSON。 - 絕不要使用鏈式三元運算子(
a?x:b?y:z會錯誤求值)。請使用 if/else。 - 透過 matchName 定址屬性。顯示名稱查詢有 39 位元組的限制,且是本地化的。
- 攝影機不是
threeDLayer:請測試matchName==='ADBE Camera Layer'。 - 標準化數值維度:將純量傳遞給分離的維度,將 3 元素陣列傳遞給 3D 屬性。
shutterPhase必須是整數。- 在設定文字填滿顏色前,請設定
applyFill=true。 - 每個圖層建立一個全新的
TextDocument。在設定樣式前,請呼叫resetCharStyle()/resetParagraphStyle()。 - 「屬性或父層已隱藏」的錯誤表示該屬性不適用於該處。例如:無法設定環境光的 Y 軸旋轉;應改為動畫其來源貼圖。
- 形狀漸層填滿的顏色無法透過腳本設定。請使用「漸層斜坡」效果或分層光源群組。
A6. 與其他代理共存
- 其他代理可能會「依名稱」結束 AE,這會影響到您的實例。請經常儲存,並準備好
ensure_ae.py。 - 在因結束而觸發的「儲存變更?」對話方塊上按下 Escape 鍵會結束 AE。
- 電腦使用和輔助技術工具可能只能看到其他實例的視窗。請透過過濾 PID 的 Quartz 視窗列表以及
screencapture -l <windowId>來診斷您自己的視窗。透過 System Events 在 您的 PID 上關閉它們(按鍵代碼 36 = Return,53 = Escape)。 - 如果意外干擾到另一個 AE 實例,請主動揭露。
步驟 B – 永遠適用的規則
在此兩種模式下都請套用這些規則,以保持動畫流暢且專案易於編輯。
B1. 關鍵影格:越少越好
- 盡可能使用最少的關鍵影格來獲得流暢的動畫。 十個帶有曲線的關鍵影格勝過一千個平坦的關鍵影格。
- 一個動作需要 2–4 個關鍵影格:開始、結束,以及一個真正的停滯點或真正的極值點(波峰、波谷、相位變化)。
- 每個屬性上限約 7–12 個關鍵影格。更多的關鍵影格通常表示動畫未經設計。
- 切勿將動畫烘焙成每影格(或每兩影格)的線性關鍵影格。編輯人員無法編輯它,而且它看起來很機械。
- 當動畫來自測量數據或舊版數據時,請對其進行 擬合(請參閱 B3)。絕不要直接貼上取樣點。
B2. 曲線:速度圖表中的平滑弧線
-
開啟每個動畫屬性的 速度圖表。
- 平滑的鐘形或弧線 表示動畫流暢。
- 有稜角的、階梯狀的 圖表(每個關鍵影格都套用了「簡易緩動」至零)表示動畫會卡頓。
- 尖峰 表示突然的跳動,除非是刻意的強調效果。
-
同一個連續動作的內部關鍵影格 不能 停止。
- 使用連續的貝茲曲線關鍵影格。
- 將內部速度設定為相鄰斜率的調和平均數:當兩者符號相同時為
2ab/(a+b),否則為 0,影響強度約為 33.3。 - 絕不要對連續動作套用全域的「簡易緩動」:它會產生階梯狀圖表。
-
緩動詞彙表(前一個關鍵影格的輸出影響 / 這個關鍵影格的輸入影響):
名稱 影響強度 ease 33/33 smooth 70/70 inout 82/82 out 12/88 expo 6/94 snap 3/97 in 88/12 soft 45/75 自訂緩動為
{'o':[speed,inf],'i':[speed,inf]}。例如,一個柔和的拉回效果:{'o':[0,55],'i':[0,92]}。 -
空間切線預設為零,這避免了路徑過衝。僅在有特定目的時使用弧線。
-
一個太過短暫且有劇烈 expo 起始的移動會看起來像突然跳動。請延長其時間(0.5 → 0.8 秒)並柔化緩動,而不是增加關鍵影格。
-
將子動作重疊成一個動作。 分別執行的折疊、翻轉和推動會產生走走停停的動畫。請在一個動作結束前開始下一個動作。
B3. 從數據擬合曲線
在「重製」模式下,或轉換任何密集數據時:
- 使用
valueAtTime或從測量結果密集地(50–200 Hz)取樣目標動畫。 - 在開始和結束處、精確的停滯點(速度為零)以及重要的極值點(該軸上的斜率為零)固定節點。
- 透過最小平方法對取樣點求解速度和影響強度:速度需加上符號限制,影響強度限制在 0.04–0.94 之間。
- 僅在誤差超過容許範圍時才新增節點:
| 屬性 | 容許範圍 |
|---|---|
| 位置 | 2–3 像素(攝影機 3 像素) |
| 縮放 | 0.4–0.65 |
| 不透明度 | 0.5–2.5 |
| 模糊 | ~1 |
| 旋轉 | 0.4 |
- 對於向量屬性,透過分割貝茲曲線(de Casteljau 演算法)來合併各軸的節點時間。斷言在每個內部關鍵影格處,傳入速度等於傳出速度。
- 對於以下情況,保持原樣並提供書面理由:表達式、時間重新對映、打字節奏、故意的停滯開關、單影格可見性切換。
B4. 每個場景一個 3D 攝影機
-
每個場景有一個
CAMERA • scene(單節點、NO_AUTO_ORIENT、分離的 X/Y/Z)。攝影機負責取景、平移、推軌和變焦。 -
不要為了偽造攝影機移動而對每個元素都設定位置/縮放的動畫。
-
若要從錄製的 UI 動作(主圖層位置
P、縮放s、合成中心C、縮放比例Z0)推導出攝影機:camera XY = C + (C − P)/scamera Z = −Z0/s
然後將所有會自行移動的元素重新以局部座標表示。
-
攝影機講述故事:到達 → 動作 → 加速 → 清晰的穩定,以及巨觀細節 → 拉遠揭示。
-
局部動畫保持局部:游標路徑、點擊按壓、滾動、卡片翻轉。點擊脈衝 在 元件內部進行父層級,因此在透視效果下它們會跟隨元件。
-
標題文字位於 3D 世界之上一個穩定的 2D 平面上,因此攝影機推進永遠不會裁剪到它們。請透過投射文字範圍檢查來驗證。
B5. 動態模糊、清晰度與景深
- 合成設定的動態模糊開啟(快門 135–180°,12–16 個樣本)。
- 在非常快速的拉遠或 UI 拖曳模糊時,將快門降低至 45–90°。
- 在會使文字變雙的圖層上關閉動態模糊。
- 保持 UI 的放大縮小清晰:使用一個 2–4 倍超採樣渲染平面的預先合成來容納可編輯的向量 UI,並且在攝影機場景上不進行折疊。
- 進階 3D 渲染器:保持平行平面之間 ≥ 4 單位 的距離,否則它們會發生 Z 衝突並顯示接縫。
- 空物體的不透明度不會影響其子層。請將不透明度傳播給所有後代圖層。
- 模糊的發光效果必須 關閉重複邊緣像素,否則它們會顯示矩形邊界。全影格的放射狀漸層是最佳的光場。
B6. 轉場:連續性,而非效果
-
轉場應該是 有意義的:
- 匹配剪輯: A 的最後一影格等於 B 的第一影格。在渲染中測量姿勢。
- 形變: 一個形狀將其大小、圓角、顏色和位置動畫變換為下一個元素。
- 物體傳遞: 一個元素被提取出來,成為下一個場景的主角。
- 攝影機 潛入一個黑暗元素,使下一個場景從黑色中浮現。
- 透過軌道遮色片,在產品後面進行亮或暗的圓盤揭露。
-
禁止:
- 全影格的白色或灰色閃爍;
- 在黑暗與明亮場景之間的交叉溶解,這會產生中間灰色影格;
- 在每個剪輯點使用相同的擦拭轉場;
- 灰色背景「掃掠」條紋。
將閃爍效果放在它們物理上應該出現的位置:例如在顯示器上,並在物體後方加上有色光暈。
-
每部影片最多使用 2–3 個全影格遮蓋擦拭轉場。
B7. 僅限原生,永遠可編輯
- 素材下載: 無需事先詢問使用者,即可下載任務所需的任何素材,包括標誌、圖示、字型、3D 模型、紋理、圖片、影片參考、音樂和音效。優先選擇官方或可靠來源,保留所需的授權歸屬,並在 AE 中使用時套用以下原生專案規則。
- 原生 意指文字、形狀、遮罩、效果、預先合成、攝影機、燈光和原生 3D 模型圖層(GLB/OBJ)。音訊可以匯入。
- 絕不要匯入螢幕截圖、參考裁剪、預先渲染、網路攝影機迴圈或用來替代原生圖層的點陣圖。
- 在聲稱「原生」之前,請稽核每一個素材項目。
- 可編輯 意指即時文字、用於控制的滑桿、清晰的圖層名稱,以及可重複使用的元件預先合成,這些合成能在其被使用的任何地方傳播變更。
- 透過
sourceRectAtTime的定位點表達式,確保文字在編輯後保持置中。
B8. 排版
- 僅使用即時文字,並使用真實的品牌字型。使用
getFontsByPostScriptName進行檢查,並在需要時以唯一的系列名稱安裝靜態實例。 - 標題要簡短、粗體、句子大小寫,並以句點結尾。字距調整 −20 到 −40。
- 逐字元或逐詞顯現:不透明度 0,模糊 20–24,Y 位置 +14–26,在 0.45–0.55 秒內緩動結束。離場鏡像入場:0.25–0.35 秒,向上模糊。
- 對照實際的 TTF 檔案(PIL 以 4 倍超採樣)測量寬度,以便底線、藥丸形狀……
…
[為翻譯而截斷]