原始内容
name: produce-voiceover-teaching-video description: Turn a supplied narration audio file plus an article, notes, screenshots, or images into a fact-checked faceless vertical teaching video, synchronized captions, cover, publish copy, hashtags, and pinned comment. Use when a user provides a cloned or recorded MP3/WAV and wants a multi-agent edit with adjustable speech rate, semantic image placement, mobile-safe text, modern transitions, final QC, and social publishing assets.
Voiceover Teaching Video Factory
Act as the director of a seven-worker production line. Treat the supplied narration as sensitive source material and the prepared narration duration as the timeline authority. Do not clone a voice, upload source media, or publish the finished video unless the user explicitly requests that separate action.
Required setup
Require ffmpeg, ffprobe, Python 3.10+, and a video renderer capable of deterministic 9:16 output. Prefer HyperFrames when installed; otherwise use the existing renderer in the repository or an FFmpeg composition. Use local Whisper only when no transcript or reliable timing exists.
Read these references before execution:
references/workflow.mdfor the seven roles and wave schedule.references/contracts.mdfor stage artifacts and handoff fields.references/performance.mdforfast,balanced, andqualitymodes.references/publishing.mdbefore creating the cover or social copy.
Initialize the job
Create a new job directory outside the skill folder. Never write user media into the skill directory.
python scripts/jobctl.py init \
--job-dir <job-dir> \
--article <article-or-notes> \
--audio <voiceover.mp3-or-wav> \
--images <image-1> <image-2> \
--mode fast \
--speech-rate 1.0
Use --speech-rate 1.2 only when the user explicitly requests 1.2x. If the user gives a target duration instead, run scripts/prepare_voiceover.py --target-minutes <min>-<max> and reject an automatically calculated rate outside 0.85-1.35; ask the user whether the script or duration should change.
Run seven workers
Use subagents when the host supports them. Give each worker only the artifact paths listed in references/workflow.md, never the full conversation. Run independent roles in parallel; otherwise run the same roles sequentially without changing their contracts.
- Intake and rights worker
- Timing and captions worker
- Editorial distillation worker
- Teaching storyboard worker
- Visual preparation worker
- Composition and finishing worker
- QC and publishing worker
Every worker must write a compact JSON report with status: pass|needs-human|fail. A failure returns only to the worker that owns the defective artifact. Do not rerun completed upstream roles unless their input hash changed.
Editing contract
- Prepare the speech rate once, before transcription and alignment. Preserve pitch with FFmpeg
atempo; never speed the final mixed video as a shortcut. - Keep the voice understandable. Default to
1.0x; recommend1.1-1.2xfor concise explainers and require explicit approval above1.25x. - Map every visual to the sentence it explains. Do not distribute article images evenly or use a screenshot merely because it is available.
- Default to 1080x1920, 30 fps, H.264 High, yuv420p, and AAC 48 kHz for delivery.
- Keep captions and critical labels inside conservative mobile safe bounds. Remove source-account branding, unrelated headers, and engagement prompts when the user requests it.
- Use restrained modern transitions. A card flip, vertical card exchange, or depth slide may bridge major sections; use simple cuts inside procedural steps.
- Do not invent claims. Verify names, numbers, dates, and quoted statements against the frozen local source.
- Use only licensed source images, fonts, music, sound effects, and authorized voice recordings.
Fast production loop
- Prepare the narration and timing artifacts.
- Build the storyboard and visual manifest before authoring the composition.
- Render a low-cost proxy defined by the selected mode.
- Inspect the first frame, every configured sample interval, every transition boundary, and the last frame. Run automated overflow, black-frame, decode, and loudness checks.
- Repair only affected scenes or render chunks. Reuse unchanged chunks by cache key.
- Render the full-resolution final once after the proxy gate passes.
- Create
cover.pngandpublish-copy.json, then runscripts/validate_delivery.py.
Never perform a second full render for a copy-only or outro-only change when a local scene/chunk replacement is possible.
Delivery gate
Deliver only when all of the following exist and validation passes:
08-delivery/final.mp408-delivery/cover.png08-delivery/publish-copy.json07-qc/qc-report.json
The final response must report the absolute output paths, duration, speech rate, resolution, frame rate, loudness result, mode, and any rights items that still need human confirmation.
Bundled scripts
scripts/jobctl.py: initialize jobs, hash inputs, track stages, and validate handoffs.scripts/prepare_voiceover.py: apply pitch-preserving speed changes and write audio metadata.scripts/render_cover.py: render an exact-text 9:16 technology-style cover without model-generated text.scripts/validate_delivery.py: probe the final MP4, cover, publish copy, and QC report.scripts/build_public_package.py: create an allowlisted, privacy-scanned Skill archive for registry publishing.