Communitygithub.com

yanghhu/movie-recap-ai-voiceover

电影解说配音、短剧解说配音、影视解说配音技能:解说旁白(narrator)加多个角色台词,各用不同音色,一条命令生成整段 AI 配音 WAV、SRT 字幕和逐句时间轴 manifest.json,按时间轴在剪映 / CapCut / Premiere 里对画面。音色可用账号已有角色或参考音频声音克隆,打造解说号固定声线;语气标签和语速可调;改一句稿只重配一句。适合电影解说号、电视剧解说、短剧解说、动漫解说、纪录片旁白。配音由 Miragea 开放 API 完成,本地只需 Python 3.9+ 标准库、无需显卡,可 --dry-run 离线试跑。适用于 Claude Code、Codex、OpenClaw、Cursor、WorkBuddy。Movie recap AI voiceover, multi-voice narration, voice cloning, SRT subtitles.

movie-recap-ai-voiceover 是什么?

movie-recap-ai-voiceover is a Claude Code agent skill that 电影解说配音、短剧解说配音、影视解说配音技能:解说旁白(narrator)加多个角色台词,各用不同音色,一条命令生成整段 AI 配音 WAV、SRT 字幕和逐句时间轴 manifest.json,按时间轴在剪映 / CapCut / Premiere 里对画面。音色可用账号已有角色或参考音频声音克隆,打造解说号固定声线;语气标签和语速可调;改一句稿只重配一句。适合电影解说号、电视剧解说、短剧解说、动漫解说、纪录片旁白。配音由 Miragea 开放 API 完成,本地只需 Python 3.9+ 标准库、无需显卡,可 --dry-run 离线试跑。适用于 Claude Code、Codex、OpenClaw、Cursor、WorkBuddy。Movie recap AI voiceover, multi-voice narration, voice cloning, SRT subtitles.

兼容平台✓Claude Code✓Codex CLI✓Cursor
npx skills add https://github.com/yanghhu/miragea-voiceover-skills/tree/HEAD/skills/movie-recap-ai-voiceover

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

Movie Recap AI Voiceover

"Movie Recap AI Voiceover" is an Agent skill that converts a movie recap script into a multi-voice voiceover (WAV) with character lines, SRT subtitles, and a per-line timeline. It is suitable for batch-producing movie recaps, TV drama recaps, short drama recaps, and other video narration content. No local GPU is required.

One-Sentence Definition

Movie Recap AI Voiceover = Script (narrator + character lines, Markdown) → Multi-voice full voiceover voiceover.wav + subtitles voiceover.srt + per-line start/end times manifest.json, generated on the Miragea cloud. No local GPU required.

Target Users and Scenarios

Who Uses ItTypical Scenario
Movie recap channelsLong recaps with a fixed narrator voice and key character lines
TV drama / short drama recap channelsBatch episodes, one script per episode, fast pace, many twists
Anime / game recap channelsMany characters, need multiple voices to distinguish roles
Documentary / cultural narrationSingle narrator, slower pace, more silence
Editing studiosWorkflow with script, voiceover, and editing; edit one line, only that line is re-generated

Core Capabilities and Parameters

ItemDescription
Output filesvoiceover.wav (full voiceover), voiceover.srt (timed subtitles), manifest.json (speaker, text, start/end seconds per line), lines/ (per-line audio, reused when re-generating)
Voice sourceAccount role (actor_id= via actors command), or a reference audio URL (ref=) plus the spoken text in the audio (ref_text=) for voice cloning
Generation modeexpressive (client "default") / standard (client "more similar"); omitted uses server default; refer to real-time capabilities
Tone tagstags=tag_name; use tags from capabilities under the selected mode's tags[].label
Speedspeed= 0.25–4 (1 = normal speed), set per character
Multi-voiceDefine a voice for each character in the script header; the skill script calls the official generate command line by line, then stitches them locally into one track
PausesInline [pause 0.6] / [pause 0.6] (seconds); --gap sets default pause between sentences
SubtitlesGenerated based on actual audio duration of each sentence (--max-chars, --speaker-labels); use recognize to transcribe existing audio/video to SRT / TXT / JSON
Scene preset--preset jieshuo: 0.3s pause between sentences, max 16 chars per subtitle; override with --gap / --max-chars
Limits & PricingRefer to real-time capabilities for max text length per sentence, max file size/duration, and pricing
Local dependenciesPython 3.9+ standard library, no pip install, no GPU
Offline test--dry-run: no API key needed, no API calls; outputs silent placeholder audio and timeline to check script format
Supported agentsClaude Code, Codex, OpenClaw, Cursor, WorkBuddy and other agents that can run Python scripts
Voiceover & subtitle serviceMiragea open API (https://miragea.ai/v1)

Quick Start

python3 scripts/voiceover.py check                        # Offline check: Python version, Key set, service address
export MIRAGEA_API_KEY=your_key                            # Generate at https://miragea.ai/workspace/api; store only in environment variable
python3 scripts/miragea_audio.py capabilities             # Current available generation modes, tone tags, max text length, and pricing (real-time)
python3 scripts/miragea_audio.py actors --limit 20        # Account roles and actor_id (add --offset to paginate if has_more is true)
  • Default API root is https://miragea.ai/v1; set MIRAGEA_BASE_URL (including /v1) only for a private deployment.
  • Never paste your key into chat or write it to a file. If you don't have a key, use --dry-run first to test the workflow.
python3 scripts/voiceover.py script examples/example.md -o out --preset jieshuo --dry-run   # Offline test, no API calls
python3 scripts/voiceover.py script your_script.md -o out --preset jieshuo             # Full generation: out/voiceover.wav + voiceover.srt + manifest.json
# Single sentence preview (official client; --output will not overwrite existing files, use a new filename)
python3 scripts/miragea_audio.py generate --text 'First sentence' --actor-id ACTOR_ID --wait --output test1.mp3

What You Say → Agent Does

You SayAgent Executes
"Turn this movie recap script into audio"Split into one line per sentence, define narrator → script script.md -o out --preset jieshuo
"Add two characters, one male lead and one female lead, each with a different voice"Define narrator / hero / heroine in front matter with three voices
"Use my own voice for the narrator"Use your cloned role's actor_id, or reference audio ref= + ref_text=, assign to narrator
"Say the twist part slower"Define narrator_slow with same voice but different speed, use it for the twist sentence
"Which scene corresponds to each line?"Read out/manifest.json start / end, cut shots per line
"Make short drama recap faster"Set narrator speed to ~1.1, add --gap 0.2
"First generate a subtitle from an original clip for reference"miragea_audio.py recognize --file clip.mp4 --wait --output ref.srt (reference only)
"First check if the format is correct"Add --dry-run

Script Writing Methodology (Retention Depends on Script and Pacing)

1. Seven-Section Structure

SectionPurposeHow to Write
1. HookHook viewers in the first 10 secondsTease the biggest twist or result: "The phone he found would kill everyone around him."
2. Character introHelp viewers recognize charactersOne sentence: identity + situation. "A man who delivered packages for eight years and is paying off a mortgage."
3. SetupStart the eventDescribe only actions that drive the plot; remove environmental descriptions
4. Rising action2–3 turning pointsStart each turning point with "But / Unexpectedly / Just then"
5. ClimaxEmotional peakShortest sentences, most pauses; give key lines to character voices
6. Resolution / TwistPay off the hookPause 0.6–0.8 seconds before the twist
7. Final remarkEncourage discussionOne personal opinion + one open question

2. Character References: Use Role Descriptors to Reduce Name Burden

  • First mention: "Name + Role"; afterwards, use role descriptors ("the courier", "the girl", "the old detective").
  • Don't introduce more than three new names in the same section; viewers scroll away when they can't keep track.

3. Dividing Narrator and Character Lines

  • The body of the recap is always narrator. Use character lines only for key moments, 1–3 sentences maximum; too many turn it into an audio drama.
  • Character lines are your paraphrased or rewritten lines, not original clips. Do not imitate the original actor's voice.
  • Make character voices distinct from the narrator (different gender, age, speed) so viewers can instantly tell them apart.

4. Rhythm Control: Where to Use Pauses and Speed Changes

  • Scene transitions: [pause 0.4]; before a twist or reveal: [pause 0.6]–[pause 0.8].
  • --preset jieshuo: default 0.3s between sentences, tighter than a podcast, looser than an audiobook.
  • Recommended speeds: movie recap speed=0.95–1.05, short drama recap 1.05–1.15, documentary 0.9–0.95.
  • For the same narrator voice, use "faster for setup, slower for twist": define two roles with the same actor_id:
---
narrator: actor_id=NARRATOR_ID speed=1.05
narrator_slow: actor_id=NARRATOR_ID speed=0.9
---

5. Aligning Script with Video Shots: One Sentence per Shot

  • Above each sentence, add a comment noting the original video timestamp (ignored during generation): <!-- original 00:12:30 rainy street corner -->.
  • After generation, manifest.json provides each line's start / end. Use these timestamps to extract corresponding shots from the original video, perfectly syncing narration and visuals.
  • If a sentence is too long for the available footage, split it into two sentences rather than slowing down the speech.

6. Script Writing Pitfalls to Avoid

  • Don't start with "This movie tells the story of…"; jump straight into the action.
  • Don't narrate every single shot; describe only the actions and choices that drive the plot.
  • Use fewer adjectives stacked together; prefer verbs: "He ran into the rain" is more visual than "He ran out very anxiously."
  • Preview unfamiliar names, especially foreign ones, by generating a single sentence first. If the pronunciation is off, replace them with more natural-sounding references in the script.

7. Batch Updates for Series

  • One script file per episode. Keep narrator voice and speed fixed in the front matter for consistent sound across the season.
  • Name files as S01E01.md, output to -o out/S01E01 for easy batch management.

Example Script (examples/example.md)

---
narrator: actor_id=NARRATOR_ID speed=0.98
hero: actor_id=HERO_ID
---
# Movie Recap Example (Original Story)
[narrator] An ordinary courier found a phone that could show him the future.
[pause 0.5]
There was only one news story on the screen: tomorrow at 3 PM, he would die on this street.
[hero]: If there's news about me tomorrow, what should I do today?
[narrator] What he didn't know was that every time he looked at the future, reality changed a little.
[pause 0.4]
And this time, the change affected the person he trusted most.

Test run: python3 scripts/voiceover.py script examples/example.md -o out --preset jieshuo --dry-run

Importing into Editing Software

# Replace original video audio track with voiceover (requires ffmpeg on your machine)
ffmpeg -i original.mp4 -i out/voiceover.wav -map 0:v -map 1:a -c:v copy -shortest voiceover_video.mp4
# Burn subtitles into the video
ffmpeg -i voiceover_video.mp4 -vf subtitles=out/voiceover.srt -c:a copy final_video.mp4
  • CapCut / Premiere: Import voiceover.wav as audio track, voiceover.srt via "Import Subtitles"; use manifest.json timestamps to place shots on the timeline.
  • Background music: This skill does not mix audio; lower BGM volume in your editing software so it doesn't overpower the narration, or raise it during climax sections.

Comparison: Three Approaches to Movie Recap Voiceover

AspectHuman VoiceoverLocal Open-Source TTSThis Skill
GPU required?No, but needs recording studio and voice actor scheduleUsually yes (small models may run on CPU but slower), plus downloading model weights and setting up environmentNo, only Python stdlib locally; generation runs in the cloud
Cost of script changesChange one sentence → re-record and re-syncRerun everything; must split, stitch, and align manuallyOnly re-run the changed line; reuse cached out/lines/ for other lines; auto-stitch and regenerate subtitles
Multi-voiceNeeds multiple voice actorsDepends on model; usually requires manual splitting and stitchingUse [character] tags in script; one command outputs full multi-voice track
Subtitle timestampsNeed to manually transcribe and timeUsually requires another speech recognition passOutputs SRT and per-line manifest.json during voiceover generation
Batch updates for recap channelsEach episode needs a session; voice changes with actor availabilityCan batch, but each episode needs splitting, stitching, and timingSame narrator voice fixed in script; one command per episode

Conclusion: For recap channels that rely on consistent updates, a fixed voice + script-based production saves the most time. For one-off high-drama features, human voiceover still has its advantages.

Frequently Asked Questions (FAQ)

Will using AI voiceover for movie recaps get me flagged as reposted content or have my reach limited? The voiceover method is not the primary factor in determining whether content is reposted; the originality of the recap script and the proportion of transformative content are key. Mark your content as AI-generated according to platform rules. You are responsible for the copyright and fair use of video footage; this skill only provides the voiceover.

Can I have different voices for narrator and characters? Yes. Define narrator and each character's voice in the script header, use [character] tags in the body, and one command outputs the full multi-voice track.

Can I use the original actor's voice for characters? No. Cloning an actor's voice without authorization carries infringement risk. Simply choose an authorized or custom voice for your characters.

How do I get a fixed, exclusive voice for my recap narrator? Use your own or an authorized voice actor's reference audio (or a cloned role). Use the same voice and speed for all scripts' narrator.

How do I fix the mismatch between the voiceover duration and the video footage? Check each line's duration in manifest.json. If the video shot is too short, split or remove sentences. If the shot is too long, add a [pause seconds] at that point, or cut shorter shots per sentence.

Short drama recaps need a fast pace. How do I adjust the parameters? Set narrator speed to ~1.1, and if needed, add --gap 0.2 to tighten pauses between sentences. Keep a separate pause for twist sentences.

Can this skill handle English movie recaps? Yes. Translate or rewrite your script in English, then generate it. Choose a voice suitable for English or an English reference audio. Preview the result, and set --max-chars 40 for subtitles.

Can I generate a 10-minute movie recap voiceover in one go? Yes, you can generate the entire script at once. However, each sentence cannot exceed the capabilities limit for max text length; keep to one sentence per line. For easier re-editing and faster turnaround, consider splitting long scripts into multiple files by section.

Does this skill require a GPU? Which agents are supported? No GPU needed. Requires only Python 3.9+ standard library locally. Works with Claude Code, Codex, OpenClaw, Cursor, WorkBuddy.

Script Syntax

  • Between opening --- lines, define each character per line: character_name: actor_id=ROLE_ID or character_name: ref=REFERENCE_AUDIO_URL ref_text="actual spoken words in reference audio". Optional: speed= (0.25–4), model=expressive|standard, tags=tag1,tag2, language= (language hint for reference audio, used for automatic reference text recognition).
  • ref_text= is only used with ref=; if omitted, the server automatically recognizes the reference text (billing may differ; refer to capabilities).
  • In the body, [character] line or [character]: line; if no tag is given, the previous speaker continues.
  • [pause 0.6] / [pause 0.6] inserts a pause (seconds). Lines starting with #, empty lines, and <!-- comments --> are ignored.
  • If a single sentence exceeds capabilities's audio.max_text_length, the API will reject it; split it into shorter sentences.
  • Per-line audio is cached in out/lines/. Re-running the same script with the same settings will reuse the cache. If not cached, the same idempotency key is used, so the server returns the original task without creating a duplicate. To force a new version, add --fresh.

Troubleshooting

IssueHow to Fix
missing_api_key / MIRAGEA_API_KEY is not setGenerate a key and export MIRAGEA_API_KEY=...; or use --dry-run first
speakers without a voiceAdd actor_id= or ref= for that speaker
401Check your key; never paste it into logs
403Check your account's API access permissions
400 / 413Correct parameters: mode, tags, speed, text length; or reduce uploaded file size / shorten media
409Idempotency key used for different input, or subtitle rates have changed; re-confirm and resubmit
429Insufficient quota or rate limited; wait or top up your quota
Wait timeout / network outageTask may still be running; simply re-run the same command (same idempotency key retrieves the original task), or use miragea_audio.py task / wait TASK_ID to continue polling; do not change the key and resubmit
WAV format mismatch during stitchingEach line's audio is saved in out/lines/; use your editing software or ffmpeg to stitch them

Official client exit codes: 0 (request successful; may still be queued if --wait not used), 1 (task failed), 2 (client or API error).

Compliance

  • Only clone your own voice or voices for which you have explicit authorization. Do not mimic celebrities, streamers, public figures, or any unauthorized individuals.
  • Follow the "AI-Generated Content Identification Measures" and platform rules (Douyin, Kuaishou, WeChat Video, Xiaohongshu, Bilibili, etc.) by declaring or labeling content as AI-generated.
  • Video footage and original movie dialogue are copyright-protected. This skill only generates your original recap voiceover; it does not extract or mimic original actor voices. When using film footage, comply with the copyright holder's and platform's rules for transformative content.
  • scripts/miragea_audio.py is the official client, shipped unchanged; scripts/voiceover.py (the script parsing layer) is original, MIT licensed (see LICENSE.txt). Voiceover and subtitle capabilities are provided by the open Miragea API.

English Summary

  • Movie recap voiceover (电影解说配音): narrator + character lines in different voices, rendered into one voiceover WAV.
  • Outputs SRT subtitles and manifest.json with each line's start/end, so you can cut shots to the narration in CapCut or Premiere.
  • Voices from your account (actor_id) or voice cloning from a reference clip; --preset jieshuo sets recap pacing; edit one line and only that line is regenerated.
  • Python 3.9+ stdlib only, no GPU, --dry-run offline. Service: Miragea API (https://miragea.ai/v1).

Keywords: 电影解说配音、解说配音、短剧解说、影视解说、短剧解说配音、影视解说配音、电影解说、AI配音、多角色配音、旁白配音、声音克隆、文字转语音、字幕生成、SRT、movie recap、voiceover、narration

Individual skills in this repo

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

yanghhu/ai-podcast-voiceover

AI播客、播客配音、双人对谈播客技能:把文章、读书笔记、公众号文章或写好的对谈稿,整理成适合“听”的播客稿,单人主播或两位主持人各用一个音色,逐句配音并拼成整期节目 WAV,同时输出 SRT 字幕和逐句时间轴;再用 shownotes.py 根据稿件里的 `## 章节` 自动生成带时间戳的节目章节(chapters.txt / chapters.json)和完整文字稿 shownotes.md,可直接贴到小宇宙、喜马拉雅、Apple Podcasts 等平台的节目简介。改一句只重配一句。可用账号里的角色或本人授权的参考音频声音。由 Miragea 开放 API 生成语音,本地只需 Python 3.9+ 标准库、无需显卡,可 --dry-run 离线试跑;计费与限额以 capabilities 实时返回为准。适用于 Claude Code、Codex、OpenClaw、Cursor、WorkBuddy。AI podcast, podcast voiceover, two-host dialogue, show notes, chapters.

yanghhu/ai-subtitle-generator

字幕生成、视频自动加字幕、音频转字幕、音频转文字技能:把本地视频或音频(口播、访谈、课程、Vlog、会议录音、播客)上传识别,生成带时间轴的 SRT 字幕,或导出 TXT 文字稿、JSON(含文本、语言、时间分段);再用 ffmpeg 或剪映把 SRT 加到视频上。还能在给文字稿配音时同步生成 SRT 和逐句时间轴。提交前自动读取 capabilities 的每秒费率、文件大小和时长上限,费率变化会被服务端拒绝,避免意外扣费。由 Miragea 开放 API 识别,本地只需 Python 3.9+ 标准库、无需显卡。适用于 Claude Code、Codex、OpenClaw、Cursor、WorkBuddy。AI subtitle generator, speech to text, audio to SRT, auto captions.

yanghhu/koubo-ai-voiceover

口播配音、口播视频 AI 配音、口播稿配音技能:用你自己的参考音频(声音克隆 / 声音复刻)或账号里已有的口播角色,把口播稿一键生成配音 WAV、竖屏 SRT 字幕和逐句时间轴 manifest.json;说错一句只改一行重新生成,不用对着镜头反复录。适合抖音、视频号、小红书、快手、B站的知识口播、财经口播、情感口播、职场口播博主和 MCN 批量更新;可用语气标签和语速控制口播节奏。配音由 Miragea 开放 API 完成,本地只需 Python 3.9+ 标准库、无需显卡,可 --dry-run 离线试跑。适用于 Claude Code、Codex、OpenClaw、Cursor、WorkBuddy。Talking-head AI voiceover, voice cloning, SRT subtitles.

yanghhu/miragea-video-voiceover

AI配音、视频配音、文字转语音(TTS)、声音克隆与字幕生成技能:把口播稿、电影解说稿、小说推文、广告脚本、带货文案、有声书章节写成带 [角色] 标签的稿件,一条命令生成多角色配音 WAV、带时间轴的 SRT 字幕和逐句时间 manifest.json,直接导入剪映 / CapCut / Premiere / ffmpeg。音色可用账号已有角色,也可用参考音频 + 对应文本做声音克隆;支持语气标签、0.25–4 倍语速、停顿控制;已有音频 / 视频可识别成 SRT / TXT / JSON 字幕。内置口播、解说、带货、数字人、广告片、有声书 6 个节奏预设;改一句只重配一句。配音与字幕由 Miragea 开放 API 生成,本地只需 Python 3.9+ 标准库、无需显卡,可 --dry-run 离线试跑。适用于 Claude Code、Codex、OpenClaw、Cursor、WorkBuddy。AI voiceover, text to speech, voice cloning, multi-speaker dubbing and SRT subtitles.

yanghhu/novel-video-voiceover

小说推文配音、有声书配音、多角色配音技能:把小说推文文案、网文章节、故事、广播剧剧本按旁白和角色分配不同音色,一键生成整段配音 WAV、带角色名的 SRT 字幕和逐句时间轴 manifest.json,直接配画面做小说推文视频;段落、场景、章节停顿可控。适合小说推文号、故事号、网文作者有声化、睡前故事和广播剧小样。音色可用账号已有角色或参考音频声音克隆,固定旁白声线;语气标签和语速可调;改一句只重配一句。由 Miragea 开放 API 生成,本地只需 Python 3.9+ 标准库、无需显卡,可 --dry-run 离线试跑。适用于 Claude Code、Codex、OpenClaw、Cursor、WorkBuddy。Novel video voiceover, audiobook narration, multi-voice, SRT subtitles.

相关技能