Video Editing Without a Dedicated GPU
When other AI agents use, install, or package this skill, first read agent-compatibility.md and handle the skill directory and local settings according to the target platform.
Use local Remotion for animation and assembly, FFmpeg for audio/video processing, and Shotcut for fine-tuning; subtitles use faster-whisper CPU/int8 and OpenCC. By default, it does not rely on a dedicated GPU, CUDA, NVENC, DaVinci Resolve, cloud rendering, or paid effects. It follows the user's specified style and delivery format.
Environment and Resources
Before first use, copy local-environment.example.json to references/local-environment.json and fill in the actual paths to the tools; the example paths do not imply the tools are installed.
- First read
references/local-environment.jsonand use the absolute paths of the tools listed. Run this skill'sscripts/project.py doctor; subtitles use Python from a dedicated venv. doctor does not require CUDA or Resolve; it only checks for the existence of the Shotcut program, which does not guarantee the GUI has been verified. - This skill includes scripts, Remotion templates, and dependency lock files, and can be used independently of other editing skills; the locations of local tools and models are specified by the configuration file. When moving to another computer, read environment-notes.md, rebuild any missing dependencies, modify paths, and then test. Do not assume another computer has the tools installed.
- Default settings: 16:9, 1920×1080, 30fps; first create a half-size preview. Remotion defaults to single job, SwiftShader software graphics backend, and H.264 software encoding; it does not automatically switch to CUDA. If memory is sufficient, use
--concurrency 2; keep it at 1 for low memory. - Jobs are run sequentially; do not simultaneously execute full render, subtitle recognition, and proxy conversion. If memory is insufficient, first reduce the preview size, use proxy files, or split into segments; segments must maintain the same video and audio specs and correct subtitle timings, and check seams.
- Recommended: 16GB RAM minimum, 32GB for more headroom, and use an SSD. This is a work recommendation and not a guarantee that all computers will run smoothly; do not estimate unmeasured output speeds based on core count or clip length.
Media and Editing
- If requirements are incomplete, first infer clip length, aspect ratio, and narrative based on existing media; only ask for missing information that affects the final output. If media locations are unknown, first inventory the working directory. Keep original files; place derived files in a new working folder.
- Read media-commands.md and use
scripts/media.py inventoryto create a list of lengths, aspect ratios, audio, and thumbnails. Review representative frames, listen to voices, read transcripts, then select segments; do not treat candidate cuts or guesses as confirmed facts. - For 4K, high bitrate, or choppy preview, use
media.py proxy --width 960to generate H.264/AAC preview files. Record the mapping between original and proxy files; preview mode can use proxy files; before final output, restore original files and re-check crop ranges and sync. Do not deliver proxy files as original quality. - Read project-commands.md and use
scripts/project.py initto create a new Remotion project. Copy selected media topublic/media/and editpublic/project.json; data specification is in motion-template.md. The template supports intros, chapters, photo zooms, videos, quotes, outros, subtitles, and name tags. - First verify video in-points and lengths using ffprobe. Prioritize simple fades, wipes, gentle photo zooms, and short text animations; avoid defaulting to heavy blurs, particles, 3D, or high-resolution multi-layer effects. Adjust the design if quality is insufficient; do not cram content with overly small text.
- First create a short preview and static images to confirm the style and readability before producing the full video. Use
project.py render --scale 0.5for preview; for final delivery, use full size. Follow the skill's reference documents and script--helpfor specific commands, using absolute paths and parameter arrays to handle Chinese and paths with spaces.
Traditional Chinese Subtitles and Audio
scripts/transcribe.pyexplicitly passes--device cpu --compute-type int8 --model <local model path> --local-files-only, using a downloaded small model. If recognition fails, first check the venv, model, and compatible packages; do not request CUDA installation just because it is slow.- Transcribe the dialogue audio from the edited sequence, or convert each subtitle segment to final timeline timing based on cuts and transitions; do not directly apply original clip timings. Avoid generating subtitles from pure background music.
- OpenCC only assists with converting Traditional Chinese characters; proofread school names, person names, titles, dates, homophones, and Taiwanese Hokkien. If recognition is unclear, keep unconfirmed markers; do not fabricate content.
captions.jsoncaptions can be placed into project.json. For word-by-word highlighting, first verify word timings and consistency across whole sentences/phrases; if only sentence timings are available, display the entire sentence.- Subtitles and name tags must maintain safe margins and not overlap each other; reduce background music volume so voices are clear; check if two dialogue segments overlap during transitions. Keep SRT and un-mixed dialogue sources for easy correction.
Shotcut Fine-Tuning and Delivery
- Use
project.py shotcut output.mp4 --output new_version.mltto create a Shotcut fine-tuning starting point, containing rendered video segments that can be further adjusted for edits, background music, and volume levels. Shotcut uses general CPU effects and software output; if necessary, reduce Preview Scaling and enable proxy files. Do not ask users to enable hardware encoding. - Remotion text, subtitles, and transitions are baked into the segment, not Shotcut native text layers. To modify text or animations, return to the Remotion project and re-render; do not claim that MLT can modify these effects word by word. If layered or native text is requested, create and verify it separately.
- Use
media.py checkto full-decode and check for black frames, silence, and errors, then manually spot-check intro, transition midpoint, longest subtitle, name tags, and outro; listen for dialogue/music and sync. Black frames and silence may be intentional; judgment is required. - Deliver MP4, thumbnail, Remotion project and media, project.json, SRT, and the actual created Shotcut MLT along with modification notes. Output a new version; do not silently overwrite existing outputs; do not modify original files or share node_modules.
- Before delivering the MLT, actually load it with Shotcut or its MLT tools; if only the XML format passes, clearly state that editor loading has not been verified. Do not claim success for untested features.
- Standard H.264 MP4 does not retain transparency. If transparency animation is required, create a separate transparent Composition and test with RGBA PNG sequences or compatible alpha encoding.
Upon completion, specify file locations, tested output settings, scope of modifications, subtitles needing proofreading, and unverified items. Tool licensing is subject to each software's terms; AI agent account quotas are separate.