@oh-story/dsh 0.1.11 → 0.1.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -11
- package/lib/client.js +85 -35
- package/lib/client.js.map +3 -3
- package/lib/drama/manifest.json +41 -36
- package/lib/drama/skills/short-drama/scripts/creator_markdown_check.py +340 -13
- package/lib/drama/skills/short-drama-assets/references/voice-direction.md +4 -2
- package/lib/drama/skills/short-drama-edit/SKILL.md +32 -12
- package/lib/drama/skills/short-drama-edit/references/still-cuts.md +90 -0
- package/lib/drama/skills/short-drama-edit/scripts/edit_tool.py +1035 -145
- package/lib/drama/skills/short-drama-edit/scripts/selftest.py +48 -0
- package/lib/drama/skills/short-drama-produce/SKILL.md +6 -1
- package/lib/drama/skills/short-drama-produce/references/adapter-contract.md +12 -0
- package/lib/drama/skills/short-drama-produce/scripts/production_tool.py +138 -9
- package/lib/drama/skills/short-drama-produce/scripts/provider_adapters.py +6 -0
- package/lib/drama/skills/short-drama-storyboard/SKILL.md +2 -0
- package/lib/drama/skills/short-drama-storyboard/references/production-shot-grammar.md +3 -1
- package/lib/drama/skills/short-drama-video-prompts/SKILL.md +7 -0
- package/lib/drama/skills/short-drama-video-prompts/references/performance-action-timing.md +14 -0
- package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.5.md +19 -6
- package/lib/drama/skills/short-drama-video-prompts/references/stage-contract.md +1 -0
- package/lib/drama/skills/short-drama-video-prompts/references/target-model-profile.md +5 -0
- package/lib/drama/skills/short-drama-video-prompts/references/wan-3.0.md +4 -1
- package/lib/index.js +16 -7
- package/lib/index.js.map +2 -2
- package/lib/novel-to-game/README.md +98 -44
- package/lib/novel-to-game/README_ZH.md +100 -46
- package/lib/novel-to-game/VERSION +1 -1
- package/lib/novel-to-game/examples/jin-ping-mei/build/BUILD_BRIEF.md +27 -202
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/RUN.md +23 -115
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/bg/chamber.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/bg/court_night.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/bg/court_rain.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/bg/garden.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/bg/hall.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/bg/kitchen.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/bg/street.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/bg/street_dawn.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/bg/temple.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/yue/moon.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/meng/angry.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/meng/blush.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/meng/neutral.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/meng/sad.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/meng/smile.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/meng/surprised.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/pan/angry.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/pan/blush.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/pan/neutral.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/pan/sad.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/pan/smile.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/pan/surprised.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/pinger/angry.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/pinger/blush.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/pinger/neutral.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/pinger/sad.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/pinger/smile.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/pinger/surprised.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/xuee/angry.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/xuee/blush.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/xuee/neutral.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/xuee/sad.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/xuee/smile.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/xuee/surprised.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/yue/angry.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/yue/blush.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/yue/neutral.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/yue/sad.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/yue/smile.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/yue/surprised.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/style.css +326 -2503
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/index.html +71 -4
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/adv.js +221 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/audio.js +113 -257
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/main.js +511 -3026
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/menus.js +277 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/petals.js +67 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/stage.js +180 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/store.js +70 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/story/common.js +198 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/story/common2.js +204 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/story/common3.js +198 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/story/dates.js +186 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/story/index.js +122 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/story/meng.js +190 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/story/pan.js +212 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/story/pinger.js +198 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/story/xuee.js +199 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/story/yue.js +214 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/package.json +2 -2
- package/lib/novel-to-game/examples/jin-ping-mei/build/art/generated-art.json +182 -45
- package/lib/novel-to-game/examples/jin-ping-mei/qa/README.md +7 -17
- package/lib/novel-to-game/examples/jin-ping-mei/qa/verification.json +9 -9
- package/lib/novel-to-game/manifest.json +303 -78
- package/lib/novel-to-game/skills/game-art-direction/references/art-direction-method.md +7 -2
- package/lib/novel-to-game/skills/game-concept/references/concept-method.md +2 -0
- package/lib/novel-to-game/skills/game-world-design/references/narrative-design-method.md +2 -0
- package/lib/novel-to-game/skills/game-world-design/references/world-design-method.md +9 -0
- package/lib/types/client/drama-production-view.d.ts +11 -0
- package/lib/types/client/drama-production-view.d.ts.map +1 -1
- package/lib/types/client/file-activity.d.ts +1 -1
- package/lib/types/client/file-activity.d.ts.map +1 -1
- package/lib/types/client/production-prompts.d.ts +7 -1
- package/lib/types/client/production-prompts.d.ts.map +1 -1
- package/lib/types/client/production-runtime.d.ts +7 -2
- package/lib/types/client/production-runtime.d.ts.map +1 -1
- package/lib/types/drama-adapters.d.ts.map +1 -1
- package/lib/types/skill-provider.d.ts.map +1 -1
- package/lib/types/video-project.d.ts.map +1 -1
- package/lib/video-recap/CHANGELOG.md +108 -1
- package/lib/video-recap/README.en.md +18 -14
- package/lib/video-recap/README.md +18 -14
- package/lib/video-recap/manifest.json +297 -321
- package/lib/video-recap/skills/video-assemble/SKILL.md +18 -16
- package/lib/video-recap/skills/video-assemble/references/explicit-audio-mix.md +3 -1
- package/lib/video-recap/skills/video-assemble/references/jianying/SOURCE.md +5 -5
- package/lib/video-recap/skills/video-assemble/references/packaging.md +4 -4
- package/lib/video-recap/skills/video-assemble/references/subtitle-track.md +10 -10
- package/lib/video-recap/skills/video-assemble/scripts/adoption/audio_mix_binding.py +13 -2
- package/lib/video-recap/skills/video-assemble/scripts/adoption/av_clock.py +109 -0
- package/lib/video-recap/skills/video-assemble/scripts/adoption/strict_publish.py +4 -1
- package/lib/video-recap/skills/video-assemble/scripts/artifacts.py +2 -9
- package/lib/video-recap/skills/video-assemble/scripts/assemble.py +188 -51
- package/lib/video-recap/skills/video-assemble/scripts/assemble_constants.py +0 -1
- package/lib/video-recap/skills/video-assemble/scripts/assembly_contract.py +32 -75
- package/lib/video-recap/skills/video-assemble/scripts/assembly_settings.py +8 -15
- package/lib/video-recap/skills/video-assemble/scripts/audio_mix.py +202 -161
- package/lib/video-recap/skills/video-assemble/scripts/codec_peak.py +112 -0
- package/lib/video-recap/skills/video-assemble/scripts/export_jianying.py +10 -101
- package/lib/video-recap/skills/video-assemble/scripts/jianying/builders.py +44 -475
- package/lib/video-recap/skills/video-assemble/scripts/jianying/model.py +1 -22
- package/lib/video-recap/skills/video-assemble/scripts/jianying/templates.py +0 -3
- package/lib/video-recap/skills/video-assemble/scripts/jianying/timeline_contract.py +36 -103
- package/lib/video-recap/skills/video-assemble/scripts/jianying/tracks.py +0 -8
- package/lib/video-recap/skills/video-assemble/scripts/jianying/writer.py +28 -203
- package/lib/video-recap/skills/video-assemble/scripts/lib.py +20 -34
- package/lib/video-recap/skills/video-assemble/scripts/loudness.py +332 -0
- package/lib/video-recap/skills/video-assemble/scripts/media.py +158 -38
- package/lib/video-recap/skills/video-assemble/scripts/narration_audio.py +30 -16
- package/lib/video-recap/skills/video-assemble/scripts/render_preflight.py +49 -8
- package/lib/video-recap/skills/video-assemble/scripts/source_subtitles.py +17 -6
- package/lib/video-recap/skills/video-assemble/scripts/subtitles/core.py +24 -2
- package/lib/video-recap/skills/video-assemble/scripts/subtitles/track.py +2 -5
- package/lib/video-recap/skills/video-assemble/scripts/subtitles/track_binding.py +2 -9
- package/lib/video-recap/skills/video-assemble/scripts/timeline.py +12 -34
- package/lib/video-recap/skills/video-assemble/scripts/timeline_emit.py +3 -4
- package/lib/video-recap/skills/video-assemble/scripts/visual_render.py +28 -2
- package/lib/video-recap/skills/video-cut/SKILL.md +37 -11
- package/lib/video-recap/skills/video-cut/references/shot-review.md +1 -1
- package/lib/video-recap/skills/video-cut/scripts/cut.py +2 -34
- package/lib/video-recap/skills/video-cut/scripts/cut_cli.py +96 -124
- package/lib/video-recap/skills/video-cut/scripts/cut_contract.py +97 -182
- package/lib/video-recap/skills/video-cut/scripts/cut_render.py +177 -166
- package/lib/video-recap/skills/video-cut/scripts/frame_grid.py +249 -0
- package/lib/video-recap/skills/video-cut/scripts/lib.py +0 -3
- package/lib/video-recap/skills/video-cut/scripts/media_geometry.py +173 -7
- package/lib/video-recap/skills/video-cut/scripts/sentence_boundaries.py +234 -151
- package/lib/video-recap/skills/video-cut/scripts/sentence_gate.py +189 -0
- package/lib/video-recap/skills/video-cut/scripts/shot_review.py +2 -6
- package/lib/video-recap/skills/video-recap/SKILL.md +24 -27
- package/lib/video-recap/skills/video-recap/references/audio-routing.md +8 -6
- package/lib/video-recap/skills/video-recap/references/config-playbook.md +8 -11
- package/lib/video-recap/skills/video-recap/references/data-schema.md +131 -74
- package/lib/video-recap/skills/video-recap/references/resource-library.md +17 -1
- package/lib/video-recap/skills/video-recap/scripts/doctor.py +51 -268
- package/lib/video-recap/skills/video-recap/scripts/final_qc.py +89 -254
- package/lib/video-recap/skills/video-recap/scripts/lib.py +81 -70
- package/lib/video-recap/skills/video-recap/scripts/library.py +40 -4
- package/lib/video-recap/skills/video-recap/scripts/materials.py +13 -80
- package/lib/video-recap/skills/video-recap/scripts/recap_cli.py +49 -17
- package/lib/video-recap/skills/video-recap/scripts/recap_inspect.py +1 -3
- package/lib/video-recap/skills/video-recap/scripts/recap_runner.py +86 -116
- package/lib/video-recap/skills/video-recap/scripts/recap_runtime.py +87 -23
- package/lib/video-recap/skills/video-recap/scripts/recap_source.py +0 -39
- package/lib/video-recap/skills/video-recap/scripts/recap_stage_qc.py +37 -135
- package/lib/video-recap/skills/video-recap/scripts/recap_timeline.py +118 -127
- package/lib/video-recap/skills/video-recap/scripts/resources/__init__.py +4 -0
- package/lib/video-recap/skills/video-recap/scripts/{resource_lock.py → resources/lock.py} +1 -1
- package/lib/video-recap/skills/video-recap/scripts/{project_binding.py → resources/project_binding.py} +78 -17
- package/lib/video-recap/skills/video-reference/SKILL.md +108 -0
- package/lib/video-recap/skills/video-reference/references/reference-schema.md +139 -0
- package/lib/video-recap/skills/video-reference/scripts/lib.py +85 -0
- package/lib/video-recap/skills/video-reference/scripts/reference.py +96 -0
- package/lib/video-recap/skills/video-reference/scripts/reference_check.py +553 -0
- package/lib/video-recap/skills/video-reference/scripts/reference_frames.py +122 -0
- package/lib/video-recap/skills/video-reference/scripts/reference_measure.py +253 -0
- package/lib/video-recap/skills/video-reference/scripts/reference_profile.py +271 -0
- package/lib/video-recap/skills/video-script/SKILL.md +9 -7
- package/lib/video-recap/skills/video-script/scripts/agent_text.py +18 -267
- package/lib/video-recap/skills/video-script/scripts/deslop_qc.py +12 -30
- package/lib/video-recap/skills/video-script/scripts/entry_suggestion.py +125 -0
- package/lib/video-recap/skills/video-script/scripts/evidence_bundle.py +2 -26
- package/lib/video-recap/skills/video-script/scripts/lib.py +5 -15
- package/lib/video-recap/skills/video-script/scripts/lint_summary.py +184 -0
- package/lib/video-recap/skills/video-script/scripts/narration_lint.py +120 -100
- package/lib/video-recap/skills/video-script/scripts/review.py +3 -34
- package/lib/video-recap/skills/video-script/scripts/review_grounding.py +20 -46
- package/lib/video-recap/skills/video-script/scripts/review_response.py +120 -258
- package/lib/video-recap/skills/video-script/scripts/review_runner.py +2 -10
- package/lib/video-recap/skills/video-script/scripts/speech_ownership.py +89 -5
- package/lib/video-recap/skills/video-script/scripts/validate.py +26 -34
- package/lib/video-recap/skills/video-understanding/SKILL.md +29 -4
- package/lib/video-recap/skills/video-understanding/references/data-schema.md +5 -22
- package/lib/video-recap/skills/video-understanding/scripts/agent_text.py +24 -121
- package/lib/video-recap/skills/video-understanding/scripts/asr.py +11 -5
- package/lib/video-recap/skills/video-understanding/scripts/asr_timing_evidence.py +15 -24
- package/lib/video-recap/skills/video-understanding/scripts/briefing/builder.py +59 -25
- package/lib/video-recap/skills/video-understanding/scripts/briefing/context.py +39 -3
- package/lib/video-recap/skills/video-understanding/scripts/briefing/inputs.py +15 -27
- package/lib/video-recap/skills/video-understanding/scripts/briefing/timeline.py +136 -37
- package/lib/video-recap/skills/video-understanding/scripts/consolidate.py +121 -37
- package/lib/video-recap/skills/video-understanding/scripts/detect.py +118 -16
- package/lib/video-recap/skills/video-understanding/scripts/index_normalize.py +359 -0
- package/lib/video-recap/skills/video-understanding/scripts/lib.py +62 -21
- package/lib/video-recap/skills/video-understanding/scripts/storyboard.py +181 -51
- package/lib/video-recap/skills/video-understanding/scripts/timeline_fusion.py +0 -26
- package/lib/video-recap/skills/video-understanding/scripts/understanding_brief.py +37 -14
- package/lib/video-recap/skills/video-understanding/scripts/understanding_cache.py +40 -32
- package/lib/video-recap/skills/video-understanding/scripts/understanding_runner.py +100 -127
- package/lib/video-recap/skills/video-understanding/scripts/understanding_storyboard.py +182 -30
- package/lib/video-recap/skills/video-understanding/scripts/vlm.py +30 -27
- package/lib/video-recap/skills/video-voiceover/SKILL.md +19 -12
- package/lib/video-recap/skills/video-voiceover/references/index-tts.md +3 -3
- package/lib/video-recap/skills/video-voiceover/scripts/approved_text_policy.py +3 -1
- package/lib/video-recap/skills/video-voiceover/scripts/dub.py +60 -135
- package/lib/video-recap/skills/video-voiceover/scripts/lib.py +9 -34
- package/lib/video-recap/skills/video-voiceover/scripts/providers/fish_audio.py +6 -1
- package/lib/video-recap/skills/video-voiceover/scripts/tts_audio.py +64 -1
- package/lib/video-recap/skills/video-voiceover/scripts/tts_cache.py +99 -0
- package/lib/video-recap/skills/video-voiceover/scripts/voiceover.py +177 -200
- package/package.json +45 -45
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/inner_court_accord_five.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/public_day15.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/household/li_jiaoer.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/new-guofeng.css +0 -1494
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/assets.js +0 -147
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/data.js +0 -7470
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/engine.js +0 -13066
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/text.js +0 -32
- package/lib/novel-to-game/examples/jin-ping-mei/qa/playable-model.json +0 -99
- package/lib/novel-to-game/examples/jin-ping-mei/qa/verify_playable_model.mjs +0 -152
- package/lib/video-recap/skills/video-assemble/references/foreground-compose.md +0 -118
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_combination_segment.json +0 -84
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_combination_video_material.json +0 -98
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_draft.json +0 -204
- package/lib/video-recap/skills/video-assemble/references/pair-media.md +0 -74
- package/lib/video-recap/skills/video-assemble/scripts/compose_foreground.py +0 -293
- package/lib/video-recap/skills/video-assemble/scripts/pair_media.py +0 -216
- package/lib/video-recap/skills/video-recap/references/shift-left-qc-schema.md +0 -23
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc.py +0 -33
- package/lib/video-recap/skills/video-recap/scripts/qc/__init__.py +0 -1
- package/lib/video-recap/skills/video-recap/scripts/qc/mimo_client.py +0 -13
- package/lib/video-recap/skills/video-recap/scripts/qc/mimo_contract.py +0 -9
- package/lib/video-recap/skills/video-recap/scripts/qc/mimo_evidence.py +0 -287
- package/lib/video-recap/skills/video-recap/scripts/qc/mimo_observations.py +0 -175
- package/lib/video-recap/skills/video-recap/scripts/qc/mimo_payload.py +0 -206
- package/lib/video-recap/skills/video-recap/scripts/qc/mimo_report.py +0 -318
- package/lib/video-recap/skills/video-recap/scripts/qc/mimo_runner.py +0 -130
- package/lib/video-recap/skills/video-recap/scripts/qc_contract.py +0 -320
- package/lib/video-recap/skills/video-script/scripts/timeline_fusion.py +0 -108
- package/lib/video-recap/skills/video-understanding/scripts/brief.py +0 -9
- package/lib/video-recap/skills/video-understanding/scripts/deslop_qc.py +0 -211
- package/lib/video-recap/skills/video-understanding/scripts/narration_lint.py +0 -707
- package/lib/video-recap/skills/video-understanding/scripts/speech_ownership.py +0 -143
- /package/lib/video-recap/skills/video-cut/scripts/{narration_mapping.py → cut_qc.py} +0 -0
|
@@ -7,7 +7,8 @@ license: MIT
|
|
|
7
7
|
# 短剧剪辑与成片
|
|
8
8
|
|
|
9
9
|
把 `剧集/<EP>/制作成果/` 里的逐镜素材装配成一条成片,取舍写进 `剧集/<EP>/剪辑单.md`。
|
|
10
|
-
每段使用二级标题 `## CUT
|
|
10
|
+
每段使用二级标题 `## CUT-...`,各自绑定一个来源 ID 和一个真实媒体文件:视频段是 `MOTION-...`,
|
|
11
|
+
静态漫剧的关键帧段是 `SHOT-...` 或 `IMG-...`。
|
|
11
12
|
|
|
12
13
|
根据实际素材选择可用片段,按剧本与分镜核对叙事。素材与意图不一致时,记录取舍和缺口。
|
|
13
14
|
|
|
@@ -19,7 +20,8 @@ license: MIT
|
|
|
19
20
|
|
|
20
21
|
## 入口
|
|
21
22
|
|
|
22
|
-
进入条件是**素材已经存在且可读**:`剧集/<EP>/制作成果/`
|
|
23
|
+
进入条件是**素材已经存在且可读**:`剧集/<EP>/制作成果/` 里有本次要用的视频文件;
|
|
24
|
+
静态漫剧是已接受的关键帧和配音文件。
|
|
23
25
|
提示词写完、job 确认过、adapter 返回成功,都不等于素材可用;本阶段只认当前能打开的文件字节。
|
|
24
26
|
|
|
25
27
|
素材不全时可以先剪已有连续段落;用户要求完整成片时,将这一版标为片段并列出缺口。
|
|
@@ -62,7 +64,10 @@ license: MIT
|
|
|
62
64
|
- 每段一个 `## CUT-<EP>-<序号> · <中文名称>`,块内逐行写:
|
|
63
65
|
|
|
64
66
|
- `- 来源:<MOTION-...> · <项目相对路径>`——`MOTION-...` 必须是 `视频提示词.md` 里真实存在
|
|
65
|
-
|
|
67
|
+
的条目,路径必须是当前可读的文件。静帧段写 `- 来源:<SHOT-...> · <图片路径>`(`分镜.md` 的镜头)
|
|
68
|
+
或 `<IMG-...> · <图片路径>`(`图片提示词.md` 的条目),图片为 png / jpg / jpeg / webp;
|
|
69
|
+
入点写 `0.00`,出点等于时长,至少 `0.50` 秒。静帧按交付规格的画幅与帧率铺满出画,
|
|
70
|
+
有静帧时交付规格必须写 `画幅与帧率`。
|
|
66
71
|
- `- 入点:<秒>` / `- 出点:<秒>` / `- 时长:<秒>`——三者必须自洽,`出点 - 入点 == 时长`。
|
|
67
72
|
全部用秒,保留两位小数,不写时间码,不写帧号。
|
|
68
73
|
- `- 取舍:入点=<理由>;出点=<理由>`——理由写画面上发生了什么,不写「节奏需要」。
|
|
@@ -73,7 +78,8 @@ license: MIT
|
|
|
73
78
|
也不做。详见 [接镜与色彩一致性](references/generated-footage.md#接镜与色彩一致性)。
|
|
74
79
|
- `- 字幕:<逐字台词原文>` 或 `- 字幕:无`。本段有多句台词时改用编号写法,
|
|
75
80
|
每句自带时间:`- 字幕 1:0.20-1.50 请进`、`- 字幕 2:2.30-4.30 门没有锁`。
|
|
76
|
-
编号从 1 连续,时间相对本 CUT
|
|
81
|
+
编号从 1 连续,时间相对本 CUT 入点,且不得重叠;止可以超过本段时长(跨切点见
|
|
82
|
+
[静帧段](references/still-cuts.md#配音))。句末可加 `(重点:<词>|<词>)`,
|
|
77
83
|
这些词须出现在本句里,烧录时标黄。字色按 `剧本.md` 里这句的来源决定:对白白色,
|
|
78
84
|
`[VO] 系统:` 青色,其他 `[VO]` 浅青,剪辑单里不另写。
|
|
79
85
|
- `- 画面文字 N:<起>-<止> <样式> <项>|<项>…`——视频模型写不对字,系统面板、倒计时、屏幕上的
|
|
@@ -91,11 +97,21 @@ license: MIT
|
|
|
91
97
|
`任务面板` 和 `角标` 末尾可加 `(倒计时:<秒>)`,显示成 `4天 23:59:58` 并逐秒走动;
|
|
92
98
|
`(倒计时:接续)` 接着成片里上一个倒计时走。相邻两段写同一条角标且首尾相接时,
|
|
93
99
|
成片里是同一个角标,切镜时不重新入场。面板自带的 `【系统提示】` `【新任务】` `进度` 属于样式,不写进剪辑单。
|
|
94
|
-
- `- 音效 N:<起>-<止>
|
|
95
|
-
|
|
100
|
+
- `- 音效 N:<起>-<止> <项目相对路径>(起点:<秒>;增益:<dB>)`——从声音文件的起点(默认开头)
|
|
101
|
+
取 `止 - 起` 秒,混进本段该时刻的原声;括号里两项都可省、顺序不限,增益范围 -40 到 +6。单条可不编号。
|
|
102
|
+
- `- 运镜:<固定|推近 n%|推近 r%/秒|…>`——只写在静帧段上,方向另有拉远、左移、右移、上移、下移;
|
|
103
|
+
n 为 1–30 的幅度,r 为 0.1–10 的速度(可带小数),不写按固定。两种写法怎么动、怎么接见
|
|
104
|
+
[静帧段](references/still-cuts.md#运镜)。
|
|
105
|
+
- `- 配音 N:<起> <项目相对路径>(起点:<秒>;增益:<dB>)`——从本段 `起` 秒开始,把声音文件从起点
|
|
106
|
+
放到结尾;括号规则同音效。`起` 可以为负,声音可以跨过切点;跨切点、核对与后期配音的规则见
|
|
107
|
+
[静帧段](references/still-cuts.md#配音)。
|
|
108
|
+
- `- 环境声:[<起>] <项目相对路径>(起点:<秒>;增益:<dB>)` 或 `- 环境声:[<起>] 无`——从本段 `起` 秒
|
|
109
|
+
(默认 0,可为负)起循环铺一层环境声,直到下一条 `环境声`;`无` 让它停下。见
|
|
110
|
+
[静帧段](references/still-cuts.md#环境声)。
|
|
96
111
|
- 素材里没有被采用的镜头,在正文开头写一行 `- 未采用镜头:<MOTION-...>(理由:……)`,
|
|
97
112
|
多项用 `;` 连接。理由区分两类:**文件缺失**(还没生产 / 生产失败)和**质量不可用**
|
|
98
113
|
(生成结果不能用),也可说明叙事取舍。补素材前先判断需要重出还是修订上游。
|
|
114
|
+
有静帧段时也可写 `SHOT-...`;哪些镜头要有下落见 [静帧段](references/still-cuts.md#每一镜的下落)。
|
|
99
115
|
- 同一个 `MOTION-...` 可以拆成多个 `CUT-...`(同一段素材的两处分别使用),也可以整段不用。
|
|
100
116
|
不能凭空出现没有素材来源的 `CUT-...`。
|
|
101
117
|
- 一段素材被用两次时,两个 `CUT-...` 的区间不得重叠:同一批帧在成片里出现两次是重复镜头,
|
|
@@ -123,11 +139,14 @@ python3 <本技能目录>/scripts/edit_tool.py verify <剧集/EP001> --project-r
|
|
|
123
139
|
```
|
|
124
140
|
|
|
125
141
|
`check` 只核对不渲染:素材是否比剪辑单新(重出之后字幕、画面文字与音效时间必须重测)、区间自洽、
|
|
126
|
-
|
|
127
|
-
画面文字能在 `[画面文字]`
|
|
128
|
-
|
|
129
|
-
`
|
|
130
|
-
|
|
142
|
+
来源 ID 解析与每一镜的下落、文件存在、区间不越过素材时长、同源区间不重叠、字幕文字能在 `剧本.md` 里找到、
|
|
143
|
+
画面文字能在 `[画面文字]` 行里找到、「接续」之前确有倒计时、音效文件存在且落在本段内、
|
|
144
|
+
字幕与配音在整条片里不越过结尾、互不重叠。
|
|
145
|
+
其中「区间不越过素材时长」需要 `ffprobe`,配音的两项需要 `ffmpeg`;缺哪个就报哪几项「未测」并说明原因,
|
|
146
|
+
不静默跳过。
|
|
147
|
+
`render` 按剪辑单切段、静帧按运镜出画、同场景自动接镜、拼接、混入音效与配音、烧字幕与画面文字、统一响度,
|
|
148
|
+
输出 `剧集/<EP>/制作成果/成片/`。
|
|
149
|
+
`verify` 只测量已经渲染出来的成片并回报数字,另列出画面文字、音效与配音在成片里的起止秒、切点亮度变化和疑似坏帧,
|
|
131
150
|
供抽帧和回听;不改文件、不给质量结论。
|
|
132
151
|
|
|
133
152
|
字幕默认由带 libass 的 ffmpeg 烧录。`--subtitles remotion` 换成一条排版可调的
|
|
@@ -137,7 +156,7 @@ python3 <本技能目录>/scripts/edit_tool.py verify <剧集/EP001> --project-r
|
|
|
137
156
|
走 ffmpeg 的字幕压在画面文字之上。取舍见 [声音、字幕与音乐](references/sound-and-subtitles.md),
|
|
138
157
|
装法见 [Remotion 叠层](assets/remotion/README.md)。
|
|
139
158
|
|
|
140
|
-
`render`
|
|
159
|
+
`render` 保留切好的中间文件。它只切段、静帧出画与运镜、硬拼接、混入 `音效` 与 `配音` 行、统一字幕样式、画面文字、
|
|
141
160
|
接镜校正(写明的与同场景自动的)和整片响度,不执行 `声音` 行中的混音方案,也不按交付规格自动缩放或改帧率。
|
|
142
161
|
需要混音、逐镜字幕避让、转场或画幅转换时用外部工具完成并记录,验收实际交付文件。
|
|
143
162
|
|
|
@@ -147,6 +166,7 @@ python3 <本技能目录>/scripts/edit_tool.py verify <剧集/EP001> --project-r
|
|
|
147
166
|
|
|
148
167
|
- 阶段边界与规则分级:[阶段契约](references/stage-contract.md)
|
|
149
168
|
- 可用带、生成缺陷与逐镜取舍:[生成素材的可用带](references/generated-footage.md)
|
|
169
|
+
- 静态漫剧的关键帧段、运镜与配音:[静帧段](references/still-cuts.md)
|
|
150
170
|
- 入出点、镜序与节奏:[入出点与镜序](references/cut-craft.md)
|
|
151
171
|
- 声音接缝、字幕与音乐落点:[声音、字幕与音乐](references/sound-and-subtitles.md)
|
|
152
172
|
- 成片可测项与验收:[交付与验收](references/delivery-verify.md)
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# 静帧段
|
|
2
|
+
|
|
3
|
+
静态漫剧不生成视频:每一镜是已接受的冻结关键帧,声音是逐句生成的配音。它和视频成片用同一份
|
|
4
|
+
剪辑单、同一套字幕、画面文字、音效、响度与验收,区别只在来源和声音从哪里来。
|
|
5
|
+
|
|
6
|
+
## 什么时候用
|
|
7
|
+
|
|
8
|
+
静帧段只在创作者选了它的时候出现,三种情况:
|
|
9
|
+
|
|
10
|
+
- 《视觉设定.md》的「制作形态」写明是静态漫剧(关键帧切换加配音);
|
|
11
|
+
- 创作者要求在生成视频之前,先用关键帧加配音剪一版看节奏(动态分镜);
|
|
12
|
+
- 某一镜的视频不可用,创作者同意这一镜先用关键帧顶上。一镜一问,不扩到别的镜。
|
|
13
|
+
|
|
14
|
+
不因为省钱、生成失败或排队慢就自己把视频镜头换成静帧;视频项目里出现静帧段,必须能指回上面某一条。
|
|
15
|
+
|
|
16
|
+
## 来源
|
|
17
|
+
|
|
18
|
+
- 关键帧对应《分镜.md》的某一镜时写 `SHOT-...`。这是默认写法:镜序、职责和场景都从分镜来,
|
|
19
|
+
同场景的相邻静帧也参与自动接镜。
|
|
20
|
+
- 画面来自《图片提示词.md》的某一条(场景板、道具特写)而不是某一镜时写 `IMG-...`。
|
|
21
|
+
它追不到场景,不参与自动接镜,也不承担分镜的覆盖。
|
|
22
|
+
|
|
23
|
+
关键帧的画幅不必等于交付画幅:render 等比铺满后居中裁切,不拉伸。构图重心不在中间的图,
|
|
24
|
+
先在外部裁好再引用。
|
|
25
|
+
|
|
26
|
+
## 每一镜的下落
|
|
27
|
+
|
|
28
|
+
有 `SHOT-...` 静帧时,《分镜.md》的每一镜都要么进片,要么写进「未采用镜头」并给出理由;
|
|
29
|
+
有视频段时,《视频提示词.md》的每一条同样如此。视频与静帧混剪时,一镜只需一个下落:
|
|
30
|
+
|
|
31
|
+
- 用静帧代替了这一镜的视频,`MOTION-...` 不必另写未采用;
|
|
32
|
+
- 用了视频的镜头,对应的 `SHOT-...` 不必另写;
|
|
33
|
+
- 未采用写 `MOTION-...` 时,它对应的 `SHOT-...` 一并算有下落;只写 `SHOT-...` 时,
|
|
34
|
+
这条视频仍要说明为什么没用。
|
|
35
|
+
|
|
36
|
+
对应关系读《视频提示词.md》每条的 `分镜` 行。只有 `IMG-...` 静帧、没有 `SHOT-...` 的剪辑单不查分镜覆盖。
|
|
37
|
+
|
|
38
|
+
## 运镜
|
|
39
|
+
|
|
40
|
+
静帧上的运镜是一个在画面上移动的取景框。它替代不了表演,只负责把注意力推到该看的地方:
|
|
41
|
+
|
|
42
|
+
- `推近` 用在一句话落到关键信息、人物反应要被看清时;`拉远` 用在交代处境或收尾。
|
|
43
|
+
- 平移的方向是镜头的方向:`左移` 时取景框向左,画面内容向右滑。平移时画面先按同样幅度放大,
|
|
44
|
+
移动的距离是画宽(或画高)的这个百分比,图的边缘不会进画。
|
|
45
|
+
- 读图就够的镜头(屏幕、字条、特写)写 `固定`。
|
|
46
|
+
|
|
47
|
+
两种写法:`推近 8%` 写的是这一段走多远,整段缓入缓出,每个切点都停一下;`推近 2.5%/秒` 写的是速度,
|
|
48
|
+
按渲染出的时长走,只在从静止起步或停下的地方加半秒缓冲。同一场里相邻两段同向、都写速度时,
|
|
49
|
+
镜头穿过切点不减速。
|
|
50
|
+
|
|
51
|
+
一场戏要像一台机器拍下来的,接镜守三条:
|
|
52
|
+
|
|
53
|
+
- **同一场一个速度。** 推近大约 2–3%/秒,每段都写同一个 `%/秒`,不要每段各算一个百分比。
|
|
54
|
+
- **相邻两段不反向。** 推近之后不接拉远,左移之后不接右移;要换方向,中间隔一段固定。
|
|
55
|
+
- **固定只留给停住的那一拍。** 一句话落下之后的反应、系统面板亮出来的那一刻;不为变化而固定。
|
|
56
|
+
|
|
57
|
+
check 在同一场里遇到相邻两段速度差 30% 以上或方向相反时给出提醒,不挡渲染。
|
|
58
|
+
|
|
59
|
+
## 环境声
|
|
60
|
+
|
|
61
|
+
同一场的底噪写一条 `环境声`,放在这一场第一段:它循环铺满这一场,切点处不断、不起伏,
|
|
62
|
+
只在自己的开头和结尾淡入淡出。换场时在下一场第一段再写一条,`起` 写负数,新的房间声就提前
|
|
63
|
+
几百毫秒进来,和上一场的叠一小段——用声音过桥,不用画面特效。一场里要突然安静(超自然入场、
|
|
64
|
+
念头落地),在那一段写 `环境声:<秒> 无`。
|
|
65
|
+
|
|
66
|
+
## 配音
|
|
67
|
+
|
|
68
|
+
先有配音,再定时长:每句生成好之后量出有声的起止,按「开口前留白 + 句长 + 句后反应」给这一镜定 `时长`,
|
|
69
|
+
再写 `配音` 的起点和同时间的 `字幕`。重出某一句之后,这一镜的时间要按新文件重排。
|
|
70
|
+
|
|
71
|
+
一句话不必只配一张图。说话人开口、话落在听者的反应上,是静帧成片摆脱「一句一张图」的主要办法:
|
|
72
|
+
|
|
73
|
+
- **L-cut**:配音写在说话人那一段,照常往下说,切到听者那一段时声音不断。字幕也写在说话人那一段,
|
|
74
|
+
止写到这句说完,可以超过本段时长。
|
|
75
|
+
- **J-cut**:下一段的人先开口、画面后到。配音写在下一段,`起` 写负数,最早到上一段开头;
|
|
76
|
+
字幕写在上一段、从开口的时刻开始。字幕的起始终在它所在的那一段里。
|
|
77
|
+
|
|
78
|
+
check 按整条片核对:配音和字幕都不得越过成片结尾(配音允许 0.05 秒),任意两句配音、任意两条字幕都不得
|
|
79
|
+
同时出现,跨过来的也算。
|
|
80
|
+
|
|
81
|
+
生成的配音两头常带一小段静音,句尾还可能多一声笑或气口。配音的核对只算文件里有声的部分(比最响处低
|
|
82
|
+
40 dB 以内),所以两句可以贴着排;要跳过开头的静音或只要中间一段时,用 `(起点:<秒>)`。
|
|
83
|
+
句尾多出来的笑想留就让它跨到下一镜,不想留就把这句写成 `音效`,用 `起-止` 截取。
|
|
84
|
+
|
|
85
|
+
同一张关键帧可以给几段用,正反打来回切时不必重出图。
|
|
86
|
+
|
|
87
|
+
字幕照剧本原文写,不照配音文件名或生成时的文本写;两者不一致时以剧本为准,回生产阶段重出这一句。
|
|
88
|
+
|
|
89
|
+
视频段也可以写 `配音`,用于后期补一句旁白或替换听不清的台词。它叠在原声之上:原声里如果已经有
|
|
90
|
+
这句台词,要先在外部把原声处理掉,再用处理后的文件作来源。
|