Communitygithub.com

ZJU-REAL/Easel

Automatische Untertitelung / Sprache-zu-Untertitel: Erkennt Sprache aus Audio oder Video und erstellt Untertiteldateien (SRT/ASS/TXT/JSON), optional mit Einbrennen in das Video.

Was ist Easel?

Dieses Skill extrahiert gesprochene Sprache aus Audio- oder Videodateien und wandelt sie in Untertiteldateien wie SRT, ASS, TXT oder JSON um. Es basiert auf dem gemeinsam genutzten Skript `skills/shared/scripts/asr.py`, einer gekapselten Version von faster-whisper, und bietet zuverlässige, reproduzierbare Ergebnisse mit chinesisch-freundlicher Satzerkennung. Optional kann es die Untertitel mittels ffmpeg (`skills/shared/scripts/video_ops.py`) direkt in das Video einbrennen (harte Untertitel). Das Skill ist für Plattformen wie Claude Code, Cursor und andere KI-Agenten konzipiert, die Sprachverarbeitungsfunktionen benötigen. Es erfordert einen Internetzugang beim ersten Start, um das Modell von HuggingFace herunterzuladen, und unterstützt CPU- sowie GPU-Umgebungen. Die Ausgabe umfasst die Untertiteldateien im Verzeichnis `outputs/`, optional das Video mit eingebrannten Untertiteln, sowie einen Bericht mit erkannter Sprache, Anzahl der Untertitel, verwendetem Modell und Dateipfaden.

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

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Automatische Untertitel (Sprache in Untertitel)

Extrahiert gesprochene Sprache aus Audio-/Videodateien und erstellt Untertitel. Basierend auf dem gemeinsamen Skript skills/shared/scripts/asr.py (faster-whisper-Wrapper), parametergesteuert und reproduzierbar mit chinesisch-freundlicher Satzerkennung. Optional können Untertitel in das Video eingebrannt werden (unter Verwendung von skills/shared/scripts/video_ops.py / ffmpeg subtitles-Filter).

Erledigt ausschließlich "Sprache → Untertiteldatei (+ optionales Einbrennen)". Allgemeine Videobearbeitung siehe video-editing; reine Rauschunterdrückung siehe audio-denoise; intelligentes Schneiden langer Videos mit Untertiteleinbrennung siehe clipify.

Eingabe

FeldErforderlichBeschreibung
input_fileJaPfad zur Audio- oder Videodatei (bei Video wird die Tonspur automatisch extrahiert)
formatNeinsrt (Standard) / ass / txt / json
languageNeinauto (Standard) oder ISO 639-1-Code wie zh/en
modelNeintiny/base (Standard)/small/medium/large-v3, größer = genauer aber langsamer
burnNeinOb Untertitel in das Video eingebrannt werden sollen (erfordert Videoeingabe)

Unterstützt: mp3/wav/m4a/aac/flac (Audio); mp4/mkv/mov/webm (Video).

Ausgabe

  • Untertiteldateien im Verzeichnis outputs/Thema/ (SRT/ASS/TXT/JSON)
  • Bei Einbrennung: Video mit fest eingebrannten Untertiteln (*-sub.mp4)
  • Bericht: Erkannte Sprache, Anzahl der Untertitel, verwendetes Modell, Ausgabepfade

Voraussetzungen

  • Beim ersten Start wird das Modell von HuggingFace heruntergeladen, Internetverbindung erforderlich. Das Skript liest die Umgebungsvariable EASEL_PROXY oder http(s)_proxy als Proxy; wenn keine gesetzt ist, wird direkt verbunden. Alternativ kann vorher export https_proxy=... http_proxy=... gesetzt werden.
  • In CPU-Umgebungen reichen die Standardeinstellungen --device cpu --compute-type int8.

Ausführungsschritte

Skriptpfade (relativ zum Projektstamm): skills/shared/scripts/asr.py, skills/shared/scripts/video_ops.py.

1. Untertiteldatei erstellen

# Video → SRT (automatische Tonspurextraktion + Spracherkennung)
python skills/shared/scripts/asr.py transcribe \
  -i input.mp4 -o outputs/Thema/input.srt --language zh

# Video → ASS (mit Styling, **Schriftgröße und Abstände passen sich an Hoch-/Querformat an**): Bei Videoeingabe automatische Erkennung von Breite und Höhe
python skills/shared/scripts/asr.py transcribe \
  -i input.mp4 -o outputs/Thema/input.ass --format ass --model small
# Reines Audio → ASS: Keine Größenerkennung möglich, Standard ist Hochformat 1080x1920; für Querformat --res 1920x1080 hinzufügen
python skills/shared/scripts/asr.py transcribe \
  -i voice.mp3 -o outputs/Thema/voice.ass --format ass --res 1920x1080
  • ASS-Stil passt sich an die Zielvideogröße an: Schriftgröße basiert auf der kürzeren Seite (min(w,h)*0.05, passend für Hoch- und Querformat, nicht zu groß im Querformat), unterer Rand basiert auf Höhe, linker/rechter Rand auf Breite, PlayRes = echte Breite und Höhe. Bei Videoeingabe automatische Erkennung; bei reinem Audio --res Breite x Höhe angeben. Für eingebrannte Untertitel mit Styling bevorzugt diese ASS-Datei verwenden (nächster Abschnitt), einfacher und anpassungsfähiger als rohes SRT mit manuellem force_style.
  • Standardmäßig ~18 Zeichen pro Zeile (Chinesisch), bei Überlänge automatischer Zeilenumbruch/Aufteilung; --max-line-chars kann angepasst werden.
  • Wenn -o nicht angegeben wird, wird ein Projektverzeichnis basierend auf dem Eingabedateinamen erstellt, z.B. talk.mp4 → Ausgabe in outputs/talk/talk.srt; bei bestehenden Projekten explizit -o outputs/Thema/<Dateiname>.<Format> angeben.
  • Verfügbare Modelle/Sprachen anzeigen: python skills/shared/scripts/asr.py info.

2. (Optional) Untertitel in Video einbrennen

Wenn der Benutzer "harte Untertitel/Untertitel einbrennen" wünscht, mit ffmpeg subtitles (SRT) oder ass (ASS) Filter:

# SRT einbrennen (anpassbares Styling)
ffmpeg -y -i input.mp4 \
  -vf "subtitles=outputs/Thema/input.srt:force_style='FontName=Noto Sans CJK SC,FontSize=20,PrimaryColour=&H00FFFFFF,OutlineColour=&H80000000,BorderStyle=1,Outline=2'" \
  -c:a copy outputs/Thema/input-sub.mp4

# ASS einbrennen (Stil bereits in der ASS-Datei, originalgetreu)
ffmpeg -y -i input.mp4 \
  -vf "ass=outputs/Thema/input.ass" \
  -c:a copy outputs/Thema/input-sub.mp4
  • Bei Pfaden mit Sonderzeichen den Wert von subtitles= in einfache Anführungszeichen setzen und Doppelpunkte escapen.
  • Für weiche Untertitel (deaktivierbar) statt Einbrennen: ffmpeg -i in.mp4 -i sub.srt -c copy -c:s mov_text out.mp4.

3. Ergebnisse und Bericht

  • Untertiteldateien und eingebrannte Videos werden in outputs/Thema/ geschrieben.
  • Dem Benutzer berichten: Erkannte Sprache, Anzahl der Untertitel, Modell, Dateipfade; Hinweis, dass ein erneuter Durchlauf mit --model/--max-line-chars möglich ist.

Regeln

  1. Video-Tonspur zuerst extrahieren — Das Skript extrahiert automatisch mit ffmpeg eine 16kHz-Mono-WAV-Datei, das Originalvideo bleibt unverändert.
  2. Chinesisch-freundliche Satzerkennung — Zeilenumbrüche nach Satzzeichen/Länge, um zu lange Zeilen zu vermeiden.
  3. Niemals Originaldateien löschen — Es werden nur neue Dateien in outputs/ erstellt.
  4. Modellauswahl — Für Geschwindigkeit base, für Genauigkeit small/medium; CPU mit int8.
  5. Einbrennen erfordert Videoeingabe — Bei reinem Audio werden nur Untertiteldateien erstellt.
  6. Keine Profilabhängigkeit — Transkription erfordert kein Benutzerprofil.

Eigene Referenz

  • SYSTRAN/faster-whisper — CTranslate2-beschleunigte Whisper-Inferenz
  • openai/whisper — Ursprüngliches Whisper-Modell und ASR-Methode
  • FFmpeg subtitles / ass Filter (Untertiteleinbrennung)

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 写具体某条视频的脚本。

Verwandte Skills