Short-Drama Editing and Final Cut
Assemble the per-shot footage in
into a finished cut, and write the selections/omissions into
. Each segment uses a second-level heading
, and is bound to one
and one real media file.
Choose usable segments based on the actual footage, and verify the narrative against the script and storyboard. When the footage does not match intent, record the trimming decisions and gaps.
Quick Start
text
用 $short-drama-edit 把 EP001 已生产的镜头剪成成片
Entry
The entry condition is that
footage already exists and is readable: the
directory must contain the video files to be used this time. A finished prompt, a confirmed job, or a successful adapter response does not mean the footage is usable; this stage only accepts file bytes that can be opened right now.
When footage is incomplete, you may first cut the contiguous segments that already exist; when the user asks for a complete final cut, mark this version as a fragment and list the gaps.
In “Unused shots”, state whether the issue is a missing file, unusable quality, or a narrative trim.
and
are the sources of shot order and responsibilities. Editing may
select/omit them, but may not
rewrite them: deleting a shot, shortening a shot, or reordering are all within this stage; changing dialogue, changing a shot's responsibility, or changing start/end states must go back upstream as a revision request.
The built-in renderer concatenates encoded segments directly, so input footage must have the same frame size and frame rate.
verifies this when the media is detectable; if specifications differ, first unify them with external tools according to delivery requirements, preserve the composition and record cropping or letterboxing, then update the paths and time ranges in the edit list.
Rendering and measurement require
/
on the PATH. If they are missing,
fails immediately and states the reason; do not approximate with other methods, and do not write “untested” as “passed”.
Workflow
- Watch each piece of footage in full; mark usable ranges first, then discuss editing. Watch every file from beginning to end, and write down the time ranges that are actually usable and what happens outside those ranges (static pre-action pose, tail drift, whiteout, motion bounce-back, redundant repeated performance). The output of this step is facts, not decisions. See Usable ranges of generated footage.
- For shots with dialogue, first locate the vocal range. Keep the full articulation and required pauses. The built-in tool cuts picture and sound in sync; when picture needs to change over continuous dialogue, handle it separately with an external editing tool.
- Choose narrative in/out points within the usable ranges. Choose the in point according to action, reaction, or pause needs; choose the out point after the information is complete and before defects begin. Write down the reason for each in point and out point. See In/out points and shot order.
- Arrange the shot order and check adjacency. Check whether action, space, reveals, and sound are continuous; delete repeated information only when it no longer adds anything.
- Compare the picture of adjacent segments. Compare comparable areas under the same scene and lighting state; when there is a visible discrepancy, write in the corresponding segment. See Splice and color consistency.
- Handle sound seams and loudness. Listen back after concatenation; when mixing is needed, perform it with external tools and record what was done. See Sound, subtitles, and music.
- Write subtitles. Every character in the subtitles must come from the original dialogue in , not from transcription results; punctuation may be adjusted according to subtitle conventions, but the wording cannot be changed. Transcription is used only for locating time.
- Write first, then render. The document comes before the final cut: the document is the auditable, revisable, reproducible artifact, and the final cut is its product.
- Accept the final cut against measurable items, then deliver. See Delivery and acceptance.
Edit List Requirements
-
Write delivery specifications at the beginning of the body:
target duration of the final cut
,
frame size and frame rate
,
,
. Target duration is an intention; the difference between the actual duration and the target is written in the report. When the user explicitly requests a fixed duration, satisfy the requirement or report which footage is missing.
-
Use one
## CUT-<EP>-<No.> · <name>
per segment, and write line by line within the block:
- Source: <MOTION-...> · <project-relative path>
— the must be an entry that actually exists in , and the path must be a currently readable file.
- / / — the three must be self-consistent: . All values are in seconds with two decimal places; do not write timecode or frame numbers.
- Trim: In=<reason>; Out=<reason>
— the reason should describe what happens on screen, not “pacing needs”. The reason must correspond to the actual footage and the narrative need of this shot.
- Sound: <how this segment's sound is handled>
— record whether the original sound is kept or external processing is applied. This line does not drive the built-in render's mixing.
- Picture: <splice correction>
or — write this only when the segment clearly does not match its neighbors; the format is any combination of , , and color temperature <value>
, separated by . See Splice and color consistency.
- Subtitle: <verbatim dialogue>
or . When this segment has multiple lines of dialogue, switch to numbered entries, each with its own time: - Subtitle 1: 0.20-1.50 Please come in
, - Subtitle 2: 2.30-4.30 The door is unlocked
. Numbering starts at 1 and continues consecutively; timings are relative to this CUT's in point and must not overlap.
-
For shots in the footage that are not used, write one line at the beginning of the body:
- Unused shots: <MOTION-...> (reason: ...)
, with multiple entries separated by
. Reasons are distinguished into two categories:
missing file (not yet produced / production failed) and
unusable quality (the generated result cannot be used); a narrative trim can also be stated. Before requesting more footage, determine whether it needs to be regenerated or the upstream stage needs revision.
-
The same
can be split into multiple
entries (two separate uses of one footage segment), or can be left entirely unused. A
without a footage source must not appear out of nowhere.
-
When one piece of footage is used twice, the time ranges of the two
entries must not overlap: the same batch of frames appearing twice in the final cut is a duplicate shot, not a reuse. If repetition is genuinely necessary (flashback, emphasis), state clearly that it is intentional repetition and explain why the second appearance still holds.
Boundaries
- Do not generate new footage. For reshoots, regeneration, or different reference images, return to ; for prompt changes, return to
$short-drama-video-prompts
or $short-drama-image-prompts
.
- Do not change upstream semantics. The edit list can prevent a line of dialogue from appearing in the final cut (by leaving the whole shot unused), but it cannot change what that line is. If a script-level problem is found, name it in the report and hand it back to .
- Follow the script's sound design. Keep existing dialogue, VO, and OS; do not add narration on your own. If new narration is needed, return to the writing stage.
- Do not write technical success as a quality conclusion. A completed render, a matched duration, or an existing file does not mean “this piece is watchable”. Quality judgment for the final cut belongs to , or to the creator themselves.
- Complete the authorized goal. Continue fixing issues that affect delivery; new creative directions or additional footage needs are left to the creator's decision.
Commands
Commands are provided by edit_tool.py:
text
python3 <本技能目录>/scripts/edit_tool.py check <剧集/EP001> --project-root <project>
python3 <本技能目录>/scripts/edit_tool.py render <剧集/EP001> --project-root <project> [--no-subtitles] [--subtitles ffmpeg|remotion] [--remotion-concurrency N]
python3 <本技能目录>/scripts/edit_tool.py verify <剧集/EP001> --project-root <project>
verifies only, without rendering: whether the footage is newer than the edit list (after regeneration, subtitle timings must be re-measured), whether ranges are self-consistent, whether
references parse, file existence, whether ranges do not exceed the footage length, whether ranges from the same source do not overlap, and whether subtitle text can be found in
. Among these, “ranges do not exceed the footage length” requires
; if it is missing, report that item as “untested” and explain why, rather than silently skipping.
cuts segments according to the edit list, concatenates, burns subtitles, and normalizes loudness, outputting to
.
only measures the already rendered final cut and reports numbers; it does not modify files and does not give quality conclusions.
Subtitles are burned by default using ffmpeg with libass.
switches to a route with adjustable typography, at the cost of installing Node dependencies once, and the overlay must be rendered
frame by frame through a headless browser for the whole final cut—slow and memory-heavy, with concurrency limited to 2 by default (
is adjustable; measure the machine before raising it). See
Sound, subtitles, and music for trade-offs, and
Remotion subtitle overlay for installation.
keeps the cut intermediate files. It only cuts segments, hard-concatenates, unifies subtitle style, applies splice correction, and normalizes whole-cut loudness; it does not execute the mixing plan in the
line, nor does it automatically scale or change frame rate according to delivery specifications. For mixing, per-shot subtitle avoidance, transitions, or frame-size conversion, complete them with external tools and record what was done, then accept the actual delivered file.
On-Demand Knowledge
First read this SKILL, the current storyboard, video prompts, and footage; when subtitles are involved, read the script original. Open references as needed:
- Stage boundaries and rule levels: Stage contract
- Usable ranges, generation defects, and per-shot trimming: Usable ranges of generated footage
- In/out points, shot order, and pacing: In/out points and shot order
- Sound seams, subtitles, and music placement: Sound, subtitles, and music
- Measurable final-cut items and acceptance: Delivery and acceptance
- Example edit list: Edit list example
- Optional Remotion subtitle layout: Remotion subtitle overlay
Revision
Keep unaffected
IDs. Changing one segment's in/out points should not touch other segments; when deleting a segment, state which segment takes over the information it carried, or state explicitly that this information no longer appears in the final cut. Update the edit list before re-rendering; do not let the final cut get ahead of the document.
Completion
This stage is complete when every
is bound to real footage and a self-consistent range, dialogue is fully audible in the final cut, subtitles are verbatim equal to the script original, there are no audible hard cuts in the sound bed at edit points, the final-cut loudness lands on the delivery target, and all unused shots have their reasons written with the distinction between missing files and missing quality. The difference between target duration and actual duration, and any places still worth another cut, are written in the report at the end for the creator to judge.
Installation and Maintenance
Run
python3 scripts/selftest.py
only when installing, upgrading, or troubleshooting.