建立 Kubernetes 解說影片
輸出為 MP4 格式的講座影片:圖形化、動畫化、幾乎沒有文字,也無字幕。
引數 voiceover=on|off(預設 on)。 on 會使用本地 Kokoro TTS 語音進行旁白;off 則產生無聲影片,且絕不安裝或載入 Kokoro。
引數 setup: 僅安裝,不產生影片。執行完下方「檢查環境」步驟後即停止。
兩個資料夾。 SKILL 是技能的基礎目錄(包含此檔案的資料夾)。裡面含有 .venv/、icons/、references/ 和 scripts/。OUT 是 <使用者工作目錄>/<主題>,每個影片會建立一個。場景檔案、media/ 和最終的 MP4 都放在 OUT 中,絕不放在 SKILL 裡(更新或移除技能時會刪除 SKILL)。請使用絕對路徑,不要依賴當前目錄。
此技能附帶的內容
icons/:官方的 Kubernetes 社群圖示(標記集合,CC-BY-4.0)。僅使用這些圖示來表示 Kubernetes 元件和資源。 絕不重新繪製、重新著色成其他東西,或將有此圖示的元件替換為通用形狀。對於沒有圖示的概念(如 CSR、憑證、封包、iptables 規則),則使用參考資料中的簡單形狀,例如Doc和Packet。references/node_join.py:一個完整且已通過核准的範例(kubeadm 節點加入)。請複製其風格、色板與輔助類別。references/kokoro_service.py:將 Kokoro-82M 插入 manim-voiceover 的程式碼。references/kit.py:共用的色板、輔助工具、Explainer基礎場景以及voiced(Scene)。新的場景從此檔案匯入。scripts/setup.sh [voiceover=on|off] [--yes]:回報缺少的項目並列印安裝計畫(macOS、Arch、Debian/Ubuntu);只有加上--yes時才會安裝。
| 檔案 | 元件 | 檔案 | 元件 | 檔案 | 元件 |
|---|---|---|---|---|---|
| api | kube-apiserver | pod | Pod | cm | ConfigMap |
| etcd | etcd | rs | ReplicaSet | secret | Secret |
| sched | kube-scheduler | deploy | Deployment | pv | PersistentVolume |
| c-m | kube-controller-manager | sts | StatefulSet | pvc | PersistentVolumeClaim |
| c-c-m | cloud-controller-manager | ds | DaemonSet | sc | StorageClass |
| kubelet | kubelet | job | Job | ns | Namespace |
| k-proxy | kube-proxy | cronjob | CronJob | sa | ServiceAccount |
| control-plane | 控制平面節點 | svc | Service | role / c-role | Role / ClusterRole |
| node | 工作節點 | ep | Endpoints | rb / crb | RoleBinding / ClusterRoleBinding |
| hpa | HorizontalPodAutoscaler | ing | Ingress | quota | ResourceQuota |
| crd | CustomResourceDefinition | netpol | NetworkPolicy | limits | LimitRange |
Manim 會移除這些 SVG 內嵌的文字,而且 api、c-m、sched、kubelet、k-proxy 共用相同的齒輪圖示。務必使用 Icon(name, label) 輔助函式來標示圖示。
工作流程
1. 檢查環境
執行 bash SKILL/scripts/setup.sh voiceover=<on|off>。如果顯示 Ready.,就繼續。否則它會列出缺少的項目和安裝計畫(在該機器上首次執行時):將計畫顯示給使用者,並在安裝前徵求同意。
- 確認後,再加上
--yes重新執行一次。這個過程很慢(包含 torch、系統套件),所以請在背景執行或設定較長的逾時時間。 - 如果計畫中包含
sudo指令而你無法輸入密碼:請給使用者自行執行的指令(! bash SKILL/scripts/setup.sh voiceover=<on|off> --yes)。 - Kokoro 是免費的、採用 Apache-2.0 授權(適合付費課程)、離線運行且品質接近商業等級;如果使用者不想使用,建議
voiceover=off。
2. 同意故事板
如果尚未提供主題,請先詢問。然後在對話中提議一個故事板,等待核准,因為渲染需要數分鐘:
- 6 到 12 個節拍,每個節拍包含:一個 1 到 3 個字的步驟標籤、螢幕上移動的物件、一句口語句子。
- 透過動作敘述故事:方框中的圖示、弧形上的封包、表示狀態的顏色變化。螢幕上僅有簡短的標籤。
- 事實必須符合目前 Kubernetes 版本。如果不確定某個細節,請直接說明,不要猜測。
3. 撰寫場景
以 references/node_join.py 為模型:
- 一個作為類別屬性的
NARRATION字典(節拍 → 句子),每個節拍一個方法;Explainer.construct在with self.voice(line):內部依序執行它們。 - 在
OUT/<主題>.py中撰寫,使用from references.kit import *,繼承Explainer,並在底部加上<Name>Voiced = voiced(<Name>)。節拍方法為def beat(self, i)。無聲的<Name>與有旁白的<Name>Voiced來自同一份程式碼。 - 切勿將場景檔案命名為標準函式庫模組的名稱(例如
operator.py會破壞 Python 的匯入)。 - 重複使用色板(深色
#0b1220、K8s 藍#326ce5、金色令牌、青色網路、琥珀色 NotReady、綠色 Ready)以及輔助函式Icon、Packet、Doc、Step、Pill、send。 - 類別要小,程式碼要精簡。
- 以旁白中實際發音的方式拼寫術語:kubeadm → "kube admin"、etcd → "et-cee-dee"、kubectl → "kube control"。
4. 預覽,然後渲染
從 OUT 目錄執行 manim:PYTHONPATH=SKILL SKILL/.venv/bin/manim --media_dir OUT/media ...。
- 預覽:
... -ql <主題>.py <Name>,然後用 ffmpeg 抽取約 8 幀製成一個聯絡表,查看一次。修正重疊、被裁切的標籤,以及過暗或不易閱讀的文字。 - 最終渲染:
... -qh <主題>.py <Name>(當voiceover=off時),或<Name>Voiced(當voiceover=on時)。將OUT/media/videos/<主題>/1080p60/<Name>.mp4複製到OUT/<主題>.mp4。 - 如果
voiceover=on,確認 MP4 包含音訊串流(使用ffprobe)。 - 完成後開啟 MP4(macOS 上使用
open;Linux 上使用xdg-open,若無顯示器則僅列印路徑)。
回報 MP4 的絕對路徑、長度、需要注意聽的部分(不常見術語的發音),並提醒使用者圖示需要標註「Kubernetes 社群圖示,CC BY 4.0」(片尾已顯示)。語音選項:af_heart(預設)、am_michael、am_fenrir;可用 voiced(<Name>, voice="am_michael") 指定。