Assemble the shot-by-shot material in 剧集/<EP>/制作成果/ into one finished film, and write the selections into 剧集/<EP>/剪辑单.md.
Use a level-2 heading for each segment, ## CUT-..., each bound to one source ID and one real media file: for video segments it is MOTION-...,
for keyframe segments of a static comic drama it is SHOT-... or IMG-...。
Choose usable clips from the actual material according to the assets, and verify the narrative against the script and storyboard. When the material and the intent do not match, record the selections and gaps.
Quick Start
用 $short-drama-edit 把 EP001 已生产的镜头剪成成片
Entry
The entry condition is thatthe material already exists and is readable:剧集/<EP>/制作成果/ contains the video files to be used this time;
for a static comic drama, it is the accepted keyframes and voiceover files.
Prompts being written, the job being confirmed, and the adapter returning success do not mean the material is usable; this stage recognizes only the file bytes that can be opened right now.
When the material is incomplete, you can first cut the existing continuous segments; when the user asks for a complete finished film, mark this version as a fragment and list the gaps. In "unused shots", explain missing files, unusable quality, or narrative selections.
剧集/<EP>/分镜.md and 视频提示词.md are the source of shot order and responsibilities. Editing mayselectthem, but must notrewrite
them: deleting a shot, shortening a shot, or reordering all belong to this stage; changing dialogue, changing shot responsibilities, or changing start/end states requires going back upstream to submit a revision request.
Built-in rendering directly concatenates the encoded segments; the input material's aspect ratio and frame rate must match.check is checked when the media is detectable;
for differing specs, first unify them with external tools according to the delivery requirements, preserving the composition and recording any cropping or letterboxing, then update the paths and timings in the edit list.
Rendering and measurement require ffmpeg / ffprobe to be on PATH. When it is not, edit_tool.py fails directly and explains,
without approximating by other means, and without writing "not measured" as "passed".
Workflow
- Watch the complete material segment by segment, mark the usable bands first, then talk about editing. Watch each file from beginning to end once, and write down the time ranges it can actually use, as well as what happens outside those ranges (held start, drifting ending, washing out, motion rebound, extra repeated performance). The output of this step is facts, not decisions. For the method, see Usable bands of generated material。
- For shots with dialogue, first locate the vocal range. Keep the complete phonemes and the pauses needed. Built-in tools cut picture and sound in sync; when the picture needs to change over continuous dialogue, use external editing tools to handle them separately.
- Choose narrative in/out points within the usable ranges. Choose the in point according to the needs of the action, reaction, or pause, and take the out point after the information is complete and before the defect begins. Write down the reason for the in point and the reason for the out point segment by segment. For the method, see In/out points and shot order。
- Arrange the shot order and check adjacent relationships. Check whether action, space, reveals, and sound are coherent; delete repeated information only when it adds nothing new.
- Compare the pictures of adjacent segments. render automatically joins shots within the same scene; compare comparable areas by same scene and same lighting state,
and write
画面for segments where automatic shot joining is insufficient or should not be moved. For the method, see Shot joining and color consistency。 - Handle audio seams and loudness. Listen back after assembly; when mixing is needed, run it through external tools and keep a record. For the method, see Audio, Subtitles, and Music。
- Write subtitles, on-screen text, and sound effects. Every character of the subtitles is taken from the original dialogue of
剧本.md, not from the transcription result; copy the punctuation from the script exactly, and do not change any character. The transcription is used only to locate timing. Leave blank space in the frame for the later[画面文字]written as画面文字lines, and write the cue tones needed when the on-screen text appears as音效lines. - Write out
剪辑单.md, then render. The document comes first and the finished video comes after: the document is the copy that can be reviewed, revised, and reproduced, and the finished video is its product. - Accept the finished video against measurable items, then deliver it. See Delivery and Acceptance。
Edit List Requirements
-
At the beginning of the body, write the delivery specifications:
成片目标时长、画幅与帧率、交付响度、字幕. The target duration is an intention; write the difference between the actual duration and the target in the report. When the user explicitly requires a fixed duration, the requirement should be met or the missing material should be reported. -
One per segment
## CUT-<EP>-<序号> · <中文名称>, write line by line within the block:-
- 来源:<MOTION-...> · <项目相对路径>——MOTION-...must be an entry that actually exists in视频提示词.md, and the path must be a currently readable file. For a still-frame segment, write- 来源:<SHOT-...> · <图片路径>(分镜.mdshot) or<IMG-...> · <图片路径>(图片提示词.mdentry), the image is png / jpg / jpeg / webp; write the in-point as0.00, the out-point equals the duration, at least0.50seconds. Still frames fill the frame according to the delivery specifications' aspect ratio and frame rate; when there are still frames, the delivery specifications must state画幅与帧率。 -
- 入点:<秒>/- 出点:<秒>/- 时长:<秒>—the three must be self-consistent,出点 - 入点 == 时长. Use seconds throughout, keep two decimal places, do not write timecode, do not write frame numbers. -
- 取舍:入点=<理由>;出点=<理由>—write what happens on screen as the reason, not "the rhythm requires it." The reason should correspond to the actual material and the narrative needs of this shot. -
- 声音:<本段声音怎么处理>—record whether to keep the original sound or use external processing. This line does not drive the built-in render's mixing. -
- 画面:<接镜校正>、- 画面:无or- 画面:不校—the correction is any combination of the three items "brightness <number>", "saturation <number>", "color temperature <number>", separated by;; once written, it replaces this segment's automatic shot matching;无means no separate correction is written;不校means even automatic shot matching is not done. For details, see Shot Matching and Color Consistency。 -
- 字幕:<逐字台词原文>or- 字幕:无. When this segment has multiple lines of dialogue, switch to the numbered format, with each line carrying its own time:- 字幕 1:0.20-1.50 请进、- 字幕 2:2.30-4.30 门没有锁. Numbering is continuous from 1, the time is relative to this CUT's in-point, and times must not overlap; the end may exceed this segment's duration (for crossing the cut point, see Still-Frame Segment). At the end of a line, you may add(重点:<词>|<词>), these words must appear in this line and are highlighted in yellow when burned in. The character color is determined by the source of this line in剧本.md: dialogue is white,[VO] 系统:is cyan, other[VO]is light cyan, and it is not written separately in the edit list. -
- 画面文字 N:<起>-<止> <样式> <项>|<项>…—the video model cannot write the text correctly; leave blank space in the frame for system panels, countdowns, and on-screen follower counts, and let render overlay them. Each item must be able to appear in剧本.md's[画面文字]found in the line. A single item may be unnumbered; the numbering and time rules are the same as for subtitles. The three kinds of panels share the top of the frame, with the corner mark in the upper right; the same position must not overlap.Style Position of each item 卡片One line per item: the first word is the name, the last word is the value, and the words in between are the unit ( 主号 粉丝 2|小号 1)系统面板The first item is the status line, typed out character by character; the rest are reward lines 任务面板Title, objective (typed out character by character); after that write as <数> / <数>The first item is the progress, and the rest are reward labels角标Join the items into one line of labels A reward may have rarity written at the end of the item
(传说)(史诗)(稀有); if not written, it is treated as rare; rarity is not text and does not participate in checking.任务面板and角标may have at the end(倒计时:<秒>), displayed as4天 23:59:58and ticking every second;(倒计时:接续)then continues from the previous countdown in the final cut. When two adjacent segments write the same corner mark and are contiguous end to end, in the final cut they are the same corner mark, and it does not re-enter when the shot changes. The panel's own【系统提示】【新任务】进度belongs to the style and is not written into the edit list. -
- 音效 N:<起>-<止> <项目相对路径>(起点:<秒>;增益:<dB>)——from the start of the sound file (default beginning) take止 - 起seconds and mix it into the original sound at that moment in this segment; both items in the parentheses may be omitted, in any order, and the gain range is -40 to +6. A single item may be unnumbered. -
- 运镜:<固定|推近 n%|推近 r%/秒|…>——written only on still-frame segments; the directions also include zoom out, move left, move right, move up, and move down; n is the magnitude from 1–30, and r is the speed from 0.1–10 (may include decimals); if not written, it is fixed. For how the two notations move and connect, see Still-frame segment。 -
- 配音 N:<起> <项目相对路径>(起点:<秒>;增益:<dB>)——starting at起seconds in this segment, place the sound file from the beginning to the end; the parenthesis rules are the same as for sound effects.起may be negative, and the sound may cross the cut point; for the rules on crossing cut points, checking, and post-dubbing, see Still-frame segment。 -
- 环境声:[<起>] <项目相对路径>(起点:<秒>;增益:<dB>)or- 环境声:[<起>] 无——from起seconds in this segment (default 0, may be negative), loop one layer of ambient sound until the next环境声;无stops it. See Still-frame segment。
-
-
For shots in the material that were not adopted, write a line at the beginning of the body
- 未采用镜头:<MOTION-...>(理由:……), connect multiple items with;. Reasons fall into two categories:File missing(not yet produced / production failed) andQuality unusable (the generated result cannot be used); narrative trade-offs may also be stated. Before adding material, first determine whether it needs to be regenerated or the upstream revised. When there are still-frame segments, you may also writeSHOT-...; for which shots need fall-through, see Still-frame segment。 -
The same
MOTION-...may be split into multipleCUT-...(the two places of the same piece of material are used separately), or the whole segment may be unused. ACUT-...。 -
When one piece of material is used twice, the intervals of the two
CUT-...must not overlap: the same batch of frames appearing twice in the final cut is a duplicate shot, not reuse. If repetition is truly needed (flashback, emphasis), state clearly that it is intentional repetition and explain why the second occurrence still holds.
Boundary
- Do not generate new material. If reshoots, regeneration, or reference image changes are needed, return to
$short-drama-produce; the prompt needs changing, return$short-drama-video-promptsor$short-drama-image-prompts。 - Do not change the upstream semantics. The edit list can make a certain line not appear in the final cut (an entire shot not used), but it cannot change what that line is.
If you find a problem at the script level, call it out and report it, hand it back to
$short-drama-write。 - Follow the script's sound design. Keep the existing dialogue, VO, and OS; do not add narration on your own; when new narration is needed, go back to the writing stage.
- Do not write technical success as a quality conclusion. Rendering completed, duration matches, and the file exists are not "this film is watchable."
The judgment of final-cut quality is left to
$short-drama-review, or to the creator themselves. - Complete according to the authorized goal. Continue fixing issues that affect delivery; new creative directions or additional material requests are left to the creator to decide.
Command
The command is provided by edit_tool.py :
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>
check Only verify, do not render: whether the material is newer than the edit list (after re-output, subtitles, on-screen text, and sound-effect timings must be re-measured), whether the ranges are self-consistent,
source ID resolution and the fate of each shot, whether files exist, whether ranges do not exceed the material duration, whether ranges from the same source do not overlap, whether the subtitle text can be found in 剧本.md ,
whether the on-screen text can be found in [画面文字] rows, whether there is indeed a countdown before "continuation," whether the sound-effect files exist and fall within this segment,
whether subtitles and voiceover do not exceed the ending in the whole film and do not overlap each other.
Among these, "ranges do not exceed the material duration" requires ffprobe, and the two voiceover items require ffmpeg; whichever is missing, report those items as "not tested" and explain why,
do not silently skip.
render Cut segments according to the edit list, still frames out according to camera movement, automatically join shots in the same scene, concatenate, mix in sound effects and voiceover, burn in subtitles and on-screen text, normalize loudness,
output 剧集/<EP>/制作成果/成片/。
verify only measures the already-rendered final cut and reports the numbers, and additionally lists the start and end seconds of on-screen text, sound effects, and voiceover in the final cut, brightness changes at cut points, and suspected bad frames,
for frame extraction and re-listening; does not modify files, does not give a quality conclusion.
Subtitles are by default burned in by ffmpeg with libass.--subtitles remotion Switch to a route with adjustable typography,
the cost is installing Node dependencies once, and the overlay mustgo through a headless browser frame by frameto render the entire final cut—slow and memory-hungry,
concurrency is capped at 2 by default (--remotion-concurrency adjustable; measure this machine before raising it). On-screen text has only one route: Remotion.
When the edit list contains on-screen text, render needs it regardless of which route the subtitles take; if it is not installed, report an error and give the install command;
subtitles via ffmpeg are layered above the on-screen text. For the trade-offs see Sound, Subtitles, and Music,
for installation see Remotion Overlay。
render Keep the cut intermediate files. It only cuts segments, does still-frame out and camera movement, hard concatenation, mixes in 音效 and 配音 rows, unifies subtitle style, on-screen text,
join correction (both specified and automatic for the same scene) and whole-film loudness; it does not execute the mixing plan in 声音 rows, nor does it automatically scale or change frame rate according to delivery specs.
When mixing, per-shot subtitle avoidance, transitions, or aspect-ratio conversion are needed, complete them with external tools and record it, and accept the actual delivered file.
Knowledge as Needed
First read this SKILL, the current storyboard, the video prompt, and the material; when there are subtitles, read the original script. Open reference materials as needed:
- Stage boundaries and rule grading:Stage Contract
- Usable range, generation defects, and per-shot trade-offs:Available bands for generating assets
- Keyframe segments, camera movement, and voiceover for the static comic drama:Static frame segments
- In/out points, shot order, and rhythm:In/out points and shot order
- Sound seams, subtitles, and music cues:Sound, subtitles, and music
- Measurable items and acceptance for the final cut:Delivery and acceptance
- Sample finished edit sheet:Sample edit sheet
- On-screen text styles and optional Remotion subtitle layout:Remotion overlay
Revision
Keep the unaffected CUT-... IDs. Changing one segment's in/out points does not touch other segments; when deleting a segment, explain which segment carries the information it was responsible for, or clearly state that this information no longer appears in the final cut. Update the edit sheet before re-rendering; do not let the final cut get ahead of the document.
Done
Each CUT-... is bound to real assets and a self-consistent interval, dialogue is fully audible in the final cut, subtitles match the script text word for word, there is no audible hard cut in the sound bed at edit points, the final cut's loudness lands on the delivery target, and all unused shots have their reasons stated with missing files distinguished from missing quality; then it is done. The difference between the target duration and the actual duration, as well as places still worth another edit, are written in the report at the end for the creator to judge.
Installation and maintenance
Only run when installing, upgrading, or troubleshooting python3 scripts/selftest.py。