Communitygithub.com

ZJU-REAL/Easel

自動字幕/語音轉字幕:從音訊或影片中辨識語音,產生字幕檔案(SRT/ASS/TXT/JSON),並可選擇將字幕燒錄到影片中。適用於自動字幕、語音轉字幕、影片加字幕、上字幕、轉錄、聽寫、字幕檔案、產生生字幕、燒字幕等場景。

Easel 是什麼?

這是一個專為自動語音辨識與字幕生成所設計的技能。它基於「faster-whisper」引擎,能將音訊或影片檔案中的語音自動辨識並產生多種格式的字幕檔案,包括 SRT、ASS、TXT 與 JSON。特別針對中文進行了友善的斷句處理,確保字幕行數自然不超長。此外,該技能還可選擇使用 FFmpeg 將字幕直接燒錄到影片中,產生帶有硬字幕的影片檔案。支援的平台主要包括本地 CLI 環境,並可透過環境變數設定代理以順利下載模型。其核心優勢在於參數明確、可重複執行,且能自動偵測影片解析度來調整 ASS 字幕樣式(字型大小、邊距),適合開發者與 AI 代理在自動化工作流程中整合使用。

相容平台~Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/ZJU-REAL/Easel/tree/HEAD/skills/openclaw/auto-subtitle

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

自動字幕(語音轉字幕)

把音訊/影片裡的人聲辨識成人聲。基於共享腳本 skills/shared/scripts/asr.py(faster-whisper 封裝), 參數確定、可重現,做中文友好斷句。可選擇把字幕燒錄進影片(複用 skills/shared/scripts/video_ops.py / ffmpeg subtitles 濾鏡)。

只做「語音 → 字幕檔案 (+ 可選燒錄)」。通用影片剪輯見 video-editing;純降噪見 audio-denoise;長影片智慧切片+燒字幕見 clipify。

輸入

欄位必填說明
input_file是音訊或影片檔案路徑(影片自動提取音軌)
format否srt(預設)/ ass / txt / json
language否auto(預設)或 zh/en 等 ISO 639-1 碼
model否tiny/base(預設)/small/medium/large-v3,越大越準越慢
burn否是否將字幕燒錄進影片(需影片輸入)

支援:mp3/wav/m4a/aac/flac 等音訊;mp4/mkv/mov/webm 等影片。

輸出

  • 字幕檔案放入 outputs/主題名/(SRT/ASS/TXT/JSON)
  • 若燒錄:帶硬字幕的影片(*-sub.mp4)
  • 報告:辨識語言、字幕條數、所用模型、輸出路徑

前置

  • 首次執行會從 HuggingFace 下載模型,需外網代理。腳本讀取 EASEL_PROXY 或 http(s)_proxy 環境變數作為代理; 都未設則直連。也可先 export https_proxy=... http_proxy=... 指定。
  • CPU 環境用預設 --device cpu --compute-type int8 即可。

執行步驟

腳本路徑(相對專案根目錄):skills/shared/scripts/asr.py、skills/shared/scripts/video_ops.py。

1. 產生字幕檔案

# 影片 → SRT(自動提取音軌 + 自動偵測語言)
python skills/shared/scripts/asr.py transcribe \
  -i input.mp4 -o outputs/主題名/input.srt --language zh

# 影片 → ASS(帶樣式,**字型大小/邊距按影片橫豎螢幕自適應**):影片輸入自動探測寬高
python skills/shared/scripts/asr.py transcribe \
  -i input.mp4 -o outputs/主題名/input.ass --format ass --model small
# 純音訊 → ASS:無法探測尺寸,預設豎螢幕 1080x1920;橫螢幕加 --res 1920x1080
python skills/shared/scripts/asr.py transcribe \
  -i voice.mp3 -o outputs/主題名/voice.ass --format ass --res 1920x1080
  • ASS 樣式按目標影片寬高自適應:字型大小按短邊(min(w,h)*0.05,豎/橫螢幕都≈合適、不再橫螢幕過大), 底邊距按高、左右邊距按寬,PlayRes=真實寬高。影片輸入自動探測;純音訊用 --res 寬x高 指定。 要帶樣式的硬字幕優先燒這份 ASS(下節),比裸 SRT + 手填 force_style 更省心、且自適應。
  • 中文預設每行 ~18 字,超長自動斷行/拆條;--max-line-chars 可調。
  • 不給 -o 時按輸入檔名建專案目錄,例如 talk.mp4 輸出到 outputs/talk/talk.srt;已有專案應顯式 -o outputs/主題名/<檔名>.<format>。
  • 查看可用模型/語言:python skills/shared/scripts/asr.py info。

2.(可選)將字幕燒錄進影片

用戶要「硬字幕/燒進影片」時,用 ffmpeg 的 subtitles(SRT)或 ass(ASS)濾鏡:

# 燒 SRT(可訂製樣式)
ffmpeg -y -i input.mp4 \
  -vf "subtitles=outputs/主題名/input.srt:force_style='FontName=Noto Sans CJK SC,FontSize=20,PrimaryColour=&H00FFFFFF,OutlineColour=&H80000000,BorderStyle=1,Outline=2'" \
  -c:a copy outputs/主題名/input-sub.mp4

# 燒 ASS(樣式已在 ass 檔案裡,保真)
ffmpeg -y -i input.mp4 \
  -vf "ass=outputs/主題名/input.ass" \
  -c:a copy outputs/主題名/input-sub.mp4
  • 路徑含特殊字元時,把 subtitles= 的值用單引號包裹並跳脫冒號。
  • 需要軟字幕(可關閉)而非燒錄:ffmpeg -i in.mp4 -i sub.srt -c copy -c:s mov_text out.mp4。

3. 產物與報告

  • 字幕檔案、燒錄影片均寫入 outputs/主題名/。
  • 向用戶報告:辨識語言、字幕條數、模型、檔案路徑;提示可換 --model/--max-line-chars 重跑。

規則

  1. 影片先提取音軌 — 腳本自動用 ffmpeg 提取 16kHz 單聲道 wav,不改原影片。
  2. 中文友好斷句 — 按標點/長度斷行,避免一行過長。
  3. 絕不刪原檔案 — 只產出新檔案到 outputs/。
  4. 模型選擇 — 求快用 base,求準用 small/medium;CPU 用 int8。
  5. 燒錄需影片輸入 — 純音訊無法燒錄,只出字幕檔案。
  6. 無 Profile 依賴 — 轉錄不需要帳號畫像。

自研參考

Individual skills in this repo

This repo contains 9 individual skills — each has its own dedicated page.

ZJU-REAL/Easel

AI 视频生成:文生视频 / 图生视频 / 数字人首帧驱动。通过可插拔 provider(通义万相 Wan / 火山 Seedance / 快手可灵 / OpenAI 兼容)异步生成视频,用户自备 API key。当用户说 AI 视频生成、文生视频、图生视频、AI 生成视频、AI 短视频、让图片动起来、数字人视频、生成一段视频 时使用。与 video-strategy(选型/策略)、video-editing(剪辑处理)、clipify(切片)区别:本 SKILL 是从 0 用 AI 生成新视频。

ZJU-REAL/Easel

通用音频处理:音频剪辑/裁剪、格式转码(mp3/wav/m4a/aac)、音量归一化、从视频提取音轨、多段拼接、淡入淡出、变速(保音高)。当用户说“剪音频”“裁一段”“转成 mp3”“调音量/响度”“提取音轨/扒音频”“拼接音频”“淡入淡出”“加速/减速音频”“变速不变调”时使用。与 audio-denoise 的区别:audio-denoise 专做降噪,audio-editing 做除降噪外的通用音频操作(也内置 denoise 作为兜底)。

ZJU-REAL/Easel

一句话主题 → 成品短视频:自动串联 文案→配图/AI视频→配音→字幕→BGM→合成,把 Easel 制作层零件编排成一条'一键出片'流水线。**单条视频、口播/资讯向,画面默认逐句配图 + Ken Burns 缓动,需要动态时才逐段图生视频**。当用户说 一键生成视频、自动做短视频、主题生成视频、帮我做条视频、口播视频一条龙、自动出片、短视频一键生成 时使用。**有剧情/角色/对白/反转/多集的短剧改用 short-drama(每镜强制图生视频、不用静态图冒充);只写脚本用 video-script;只生成单个片段用 ai-video-gen。**

ZJU-REAL/Easel

音乐卡点视频 / 踩点视频:检测背景音乐的节拍,让图片或片段在节拍点上切换,配推进/白闪特效,做出燃系'卡点'短视频。当用户说 卡点视频、踩点视频、音乐卡点、节奏卡点、按音乐切换、鼓点视频、踩节奏、beat 卡点、图片卡点、卡点混剪 时使用。基于 shared/scripts/beatsync.py(librosa 节拍检测)。与 slideshow-video 区别:slideshow 每图固定时长、柔和转场,本 SKILL 切换点由音乐节拍决定、硬切踩点带特效。

ZJU-REAL/Easel

Easel clipify: long English talk → punchline cuts → optional 16:9→9:16 face-pan/split → opus word-by-word ASS burn. Ships scripts + assets/preview.png. Part of 1.6k★ Easel suite.

ZJU-REAL/Easel

>- 通用图像处理加工:改尺寸/缩放、裁剪、补边适配平台尺寸、格式转换(png/jpg/webp)、 压缩到目标大小、加文字或图片水印、圆角、多图拼接、生成缩略图、读图片信息。 基于 image_ops.py 确定性处理。 使用时机:用户说"改尺寸"、"缩放图片"、"裁剪"、"压缩图片"、"加水印"、"转格式"、 "圆角"、"拼图/多图联排"、"缩略图"、"适配小红书/朋友圈尺寸"、"把图 pad 成 1:1"。 和 card-*(卡片类)的区别:card-* 是"HTML 设计→渲染出图", image-editing 只加工已有图片,不负责视觉设计。

ZJU-REAL/Easel

多角色对话配音:按 cast 和逐行对白为不同角色分配音色与情绪,合成多声线音轨和带角色名字幕。 当用户说“多角色/双人/剧本/对话配音、多人对白、不同角色不同声音、有声剧配音”时使用。 单一公共音色用 tts-voiceover;克隆本人音色用 voice-clone;整部短剧制作由 short-drama 编排。

ZJU-REAL/Easel

Easel video-highlights: CN/livestream highlight extract + stable static vertical reframe (sibling to clipify).

ZJU-REAL/Easel

>- 视频制作策略与工具选型:AI 视频生成模型对比、视频脚本结构设计、制作流程规划,覆盖产品演示/解说/社媒短视频场景。 当用户说"视频怎么做""视频选型""用什么工具做视频""视频制作流程""视频策略""视频系列规划"时使用。 和 video-script 的区别:video-strategy 做内容规划与工具选型,video-script 写具体某条视频的脚本。

相關技能