Assemble the per-shot material in 剧集/<EP>/制作成果/ into a single finished cut, with decisions written into 剧集/<EP>/剪辑单.md.
Use a level-two 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 based on the actual material, and verify the narrative against the script and storyboard. When material and intent do not match, record the decisions 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 voice files.
A finished prompt, a confirmed job, and a successful adapter return do not mean the material is usable; this stage only trusts the file bytes that can be opened right now.
When material is incomplete, you can first cut the existing continuous segments; when the user requests a complete finished cut, mark this version as a segment and list the gaps. In "Unused Shots", explain missing files, unusable quality, or narrative decisions.
剧集/<EP>/分镜.md and 视频提示词.md are the source of shot order and responsibilities. Editing maymake decisions aboutthem, but must notrewrite
them: deleting a shot, shortening a shot, or changing the order all belong to this stage; changing dialogue, changing a shot's responsibility, or changing the start/end state requires going back upstream to file a revision request.
The built-in render directly concatenates the encoded segments; the input material's aspect ratio and frame rate must match.check Verify when the media can be probed;
for differing specs, first unify them to the delivery requirements using external tools, preserving composition and recording any cropping or letterboxing, then update the paths and times 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 why,
without approximating by other means, and without writing "not measured" as "passed".
Workflow
- Watch each segment's full material; mark the usable band before discussing the edit. Watch each file from start to finish and write down the time range that is actually usable, as well as what happens outside that range (initial stillness, ending drift, blowout, action 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 vocalization range. Preserve complete articulation and the pauses needed. The built-in tool cuts picture and sound in sync; when you need to change the picture over continuous dialogue, use an external editing tool to handle them separately.
- Choose narrative in/out points within the usable range. 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 the reason for the in point and the reason for the out point for each segment. For the method, see In/Out Points and Shot Order。
- Arrange the shot order and check adjacent relationships. Check whether action, space, revelation, and sound are continuous; delete repeated information only when it adds nothing new.
- Compare the picture 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 the automatic join 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, perform it with external tools and document it. See Audio, Subtitles, and Music。
- Write subtitles, on-screen text, and sound effects. Every character of the subtitles comes from the original dialogue text in
剧本.md, not from the transcription result; punctuation is copied from the script, and characters must not be changed. The transcription is used only to locate timing. Leave blank space in the frame for the later[画面文字]written as画面文字lines, and the cue sound needed when the on-screen text appears is written as音效lines. - Write out
剪辑单.md, then render. The document comes before the finished video: the document is the reviewable, revisable, reproducible one, and the finished video is its product. - Accept the finished video against the testable items, then deliver. See Delivery and Acceptance。
Edit List Requirements
-
At the beginning of the body, write the delivery specifications:
成片目标时长、画幅与帧率、交付响度、字幕. The target duration is an intention; the difference between the actual duration and the target is written in the report. When the user explicitly requires a fixed duration, either meet the requirement or report the missing material. -
One
## CUT-<EP>-<序号> · <中文名称>per segment, with lines written within the block:-
- 来源:<MOTION-...> · <项目相对路径>——MOTION-...must be an entry that actually exists in视频提示词.md, and the path must be a currently readable file. For still-image segments, write- 来源:<SHOT-...> · <图片路径>(分镜.mdshot) or<IMG-...> · <图片路径>(图片提示词.mdentry), and the image is png / jpg / jpeg / webp; write the in-point as0.00, the out-point equals the duration, at least0.50seconds. Still images fill the frame according to the delivery specifications' aspect ratio and frame rate, and when there are still images 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. -
- 取舍:入点=<理由>;出点=<理由>—the reason states what happens on screen, not "the rhythm requires it." The reason should correspond to the actual material and the narrative needs of this shot. -
- 声音:<本段声音怎么处理>—records whether to keep the original audio or process it externally. This line does not drive the built-in render's mixing. -
- 画面:<接镜校正>、- 画面:无or- 画面:不校—correction is any combination of the three items "brightness <number>", "saturation <number>", and "color temperature <number>", separated by;; once written, it replaces this segment's automatic shot matching;无means no separate correction is written;不校means not even automatic shot matching is performed. 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 门没有锁. Number consecutively from 1; times are relative to this CUT's in-point and must not overlap; the end may exceed this segment's duration (for crossing cut points see Still-Image Segments). 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 text 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, so system panels, countdowns, and on-screen follower counts are left blank in the frame and overlaid by the render. Every item must be able to be in剧本.md's[画面文字]Find it in the line. A single item may be unnumbered; numbering and time rules are the same as for subtitles. The three panels share the top of the frame; the corner badge is in the upper-right corner, and 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 <数> / <数>One item is progress, the rest are reward labels角标The items are joined into a single line of labels For rewards, the rarity can be written at the end of the item
(传说)(史诗)(稀有), if omitted it defaults to Rare; rarity is not text and is not checked.任务面板and角标can be appended at the end of(倒计时:<秒>), displayed as4天 23:59:58and counts down second by second;(倒计时:接续)continues from the previous countdown in the final cut. When two adjacent segments write the same corner badge and are joined end to end, in the final cut it is the same corner badge, and it does not re-enter when the shot cuts. The panel's own【系统提示】【新任务】进度is part of the style and is not written into the edit list. -
- 音效 N:<起>-<止> <项目相对路径>(起点:<秒>;增益:<dB>)—from the start of the audio 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 and the order is not fixed, gain range -40 to +6. A single item may be unnumbered. -
- 运镜:<固定|推近 n%|推近 r%/秒|…>—written only on still-frame segments, directions also include zoom out, move left, move right, move up, and move down; n is an amount from 1–30, r is a speed from 0.1–10 (decimals allowed), if omitted it defaults to fixed. How the two notations move and connect, see Still-frame segment。 -
- 配音 N:<起> <项目相对路径>(起点:<秒>;增益:<dB>)—from起seconds into this segment, place the audio file from the start to the end; parenthesis rules are the same as for sound effects.起may be negative, and the sound may cross the cut point; for rules on crossing cut points, checking, and post-dubbing, see Still-frame segment。 -
- 环境声:[<起>] <项目相对路径>(起点:<秒>;增益:<dB>)or- 环境声:[<起>] 无—from起seconds (default 0, may be negative) loop a layer of ambience until the next环境声;无stops it. See Still-frame segment。
-
-
For shots in the material that were not used, write a line at the beginning of the body
- 未采用镜头:<MOTION-...>(理由:……), for multiple items use;to connect. Reasons are divided into two categories:File missing(not yet produced / production failed) andQuality unusable (the generated result cannot be used), and narrative trade-offs may also be explained. Before supplementing material, first determine whether it needs to be regenerated or the upstream needs to be revised. When there are still-frame segments, you may also writeSHOT-...; which shots need a fallback, see Still-frame segment。 -
The same
MOTION-...can be split into multipleCUT-...(two uses of the same piece of material separately), or the whole segment may be unused. ACUT-...。 -
with no material source cannot appear out of thin air. 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 repeated shot, not reuse. When repetition is truly needed (flashback, emphasis), state clearly that it is an intentional repetition and explain why the second occurrence still holds.
Boundary
- No new material is generated. needs reshoots, re-output, or a replacement reference image, return to
$short-drama-produce; if the prompts need changing, return to$short-drama-video-promptsor$short-drama-image-prompts。 - do not change the upstream semantics. The edit list can keep a certain line of dialogue out of the final cut (the whole shot is unused), but it cannot change what that line of dialogue is.
If a problem at the script level is found, name it 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. Render completion, matching duration, and file existence are not “this film is watchable.”
Leave the judgment of final-cut quality to
$short-drama-review, or to the creator themself. - Complete according to the authorized goal. Continue fixing problems that affect delivery; new creative directions or additional material needs are left to the creator to decide.
commands
The commands are provided by edit_tool.py provided by:
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 without rendering: whether the material is newer than the edit list (after re-output, subtitles, on-screen text, and sound-effect timing must all be retested), whether the ranges are self-consistent,
source ID resolution and the fate of each shot, file existence, whether ranges do not exceed the material duration, whether ranges from the same source do not overlap, whether subtitle text can be found in 剧本.md ,
whether on-screen text can be found in the [画面文字] lines, whether there really is a countdown before “continuation,” whether sound-effect files exist and fall within this segment,
and whether subtitles and voiceover do not exceed the ending or overlap each other throughout the whole film.
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 “untested” and explain why,
do not silently skip them.
render cut segments according to the edit list, make still frames exit the frame according to camera movement, automatically join shots in the same scene, splice, mix in sound effects and voiceover, burn in subtitles and on-screen text, unify loudness,
output 剧集/<EP>/制作成果/成片/。
verify only measure the already rendered final cut and report the numbers; additionally list 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 sampling and listening back; do not modify files and do not give quality conclusions.
Subtitles are burned in by default with ffmpeg that has libass.--subtitles remotion switch to a route with adjustable typesetting,
the cost is installing Node dependencies once, and the overlay must berun frame by frame through a headless browserand render the entire final cut—slow and memory-hungry,
with concurrency capped at 2 by default (--remotion-concurrency adjustable; measure the local machine before raising it). On-screen text has only one route: Remotion:
when the edit list contains on-screen text, render needs it no matter which route the subtitles take; if it is not installed, report an error and give the install command;
subtitles going through ffmpeg are layered above the on-screen text. For tradeoffs, see Sound, subtitles, and music,
for installation, see Remotion overlay。
render keep the cut intermediate files. It only cuts segments, makes still frames exit and camera movement, hard-splices, mixes in 音效 and 配音 lines, unifies subtitle style, on-screen text,
shot-join correction (explicit and automatic within the same scene), and whole-film loudness; it does not execute the mixing plan in 声音 lines, 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, use external tools and record it, and accept the actual delivered file.
On-demand knowledge
First read this SKILL, the current storyboard, the video prompts, and the material; when there are subtitles, read the original script. Open reference materials as needed:
- Stage boundaries and rule levels:Stage contract
- Available bands, generation defects, and per-shot tradeoffs:Available bands for generating material
- Keyframe segments, camera moves, and voiceover for a static comic drama:Still-frame segments
- In/out points, shot order, and pacing:In/out points and shot order
- Sound seams, subtitles, and music hit points:Sound, subtitles, and music
- Testable items and acceptance for the final cut:Delivery and acceptance
- Sample completed edit sheet:Sample edit sheet
- On-screen text styling and optional Remotion subtitle layout:Remotion overlay
Revisions
Keep the unaffected CUT-... ID. Changing one segment's in/out points does not touch other segments; when deleting a segment, state which segment takes over the information it carried, or explicitly 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 material and a self-consistent range, the dialogue is fully audible in the final cut, the subtitles match the script verbatim, 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 stated reasons with missing files distinguished from poor quality; then it is done. The difference between the target duration and the actual duration, as well as places still worth another edit pass, are written in the final report for the creator to judge.
Installation and maintenance
Run only when installing, upgrading, or troubleshooting python3 scripts/selftest.py。