Individual skill
video-assemble
合成视频解说最终成片:把旁白音频铺到源视频上,按旁白窗口压低原声,生成 SRT / ASS 字幕并可烧录, 最后做响度标准化。作为最终合成阶段使用。输入源视频、tts_meta.json 与旁白位置; 输出 recap 成片和字幕。触发词:视频合成、混音、字幕、压字幕、assemble video、mux、ducking、subtitles、成片。
packages/knowledge/video-recap/skills/video-assemble/SKILL.md
Source commit ed56e4a3946fe7e6713b07164787a23128f6a848
What was checked
- Matches the observed repository HEAD
- Yes
- Scanner rules are current
- Yes
- Repository scan complete
- No
- Skill scan complete
- No
- Observed behavior
- Local scripts
- Last checked
- Nov 10, 2026
These are observations at the recorded commit, not a guarantee of safety. Review the source before running it.
Install this skill
Choose an agent in your Stack or copy a command below. Commands fetch the pinned commit and copy only this skill directory. Existing destinations are refused. Copying a command does not install anything.
An install command is unavailable: current rules, complete repository and skill scans, an eligible behavior level and a permitted license are required.
Repository context
- Repository stars (not skill ratings)
- 725
- Repository last updated
- Nov 8, 2026
- License
- MIT
Observed agent integration: No specific integration evidence. Standard SKILL.md installation does not imply verified compatibility.
- ai-agents Repository topic
- creative-writing Repository topic
- deepseek-harness Repository topic
- dsh-plugin Repository topic
- fiction-writing Repository topic
- novel-writing Repository topic
- oh-story Repository topic
- screenwriting Repository topic
- short-drama Repository topic
- drama-skills Repository topic
- engineering Derived category
Files and excerpt
File metadata and permitted, redacted excerpts come from the recorded scan. Source links are pinned to that commit.
Browse files
SKILL.mdcore · 12,364 bytesSKILL.mdcore · 12,364 bytesreferences/audio-modes.mddoc · 3,509 bytesreferences/explicit-audio-mix.mddoc · 3,951 bytesreferences/jianying/LICENSE.duo-videoasset · 1,062 bytesreferences/jianying/SOURCE.mddoc · 703 bytesreferences/jianying/empty_draft_meta_info.jsonasset · 1,768 bytesreferences/jianying/empty_jy_material_video.jsonasset · 1,811 bytesreferences/jianying/empty_jy_meta_material_value.jsonasset · 358 bytesreferences/jianying/empty_jy_project_info.jsonasset · 3,718 bytesreferences/jianying/empty_jy_segment.jsonasset · 1,370 bytesreferences/jianying/empty_jy_text_styles.jsonasset · 440 bytesreferences/jianying/empty_yj_material_audio.jsonasset · 865 bytesreferences/jianying/empty_yj_material_text.jsonasset · 2,447 bytesreferences/narration-adoption.mddoc · 4,767 bytesreferences/packaging.mddoc · 2,801 bytesreferences/source-score.mddoc · 6,869 bytesreferences/subtitle-track.mddoc · 8,659 bytesscripts/adoption/__init__.pyruns · 94 bytesscripts/adoption/audio_mix_binding.pyruns · 14,208 bytesscripts/adoption/av_clock.pyruns · 5,933 bytesscripts/adoption/frozen_audio.pyruns · 7,750 bytesscripts/adoption/narration_binding.pyruns · 14,877 bytesscripts/adoption/strict_inputs.pyruns · 4,200 bytesscripts/adoption/strict_publish.pyruns · 6,299 bytesscripts/artifacts.pyruns · 1,177 bytesscripts/assemble.pyruns · 36,598 bytesscripts/assemble_constants.pyruns · 1,991 bytesscripts/assembly_contract.pyruns · 12,501 bytesscripts/assembly_settings.pyruns · 6,228 bytesscripts/audio_automation.pyruns · 6,859 bytesscripts/audio_mix.pyruns · 21,812 bytesscripts/codec_peak.pyruns · 5,199 bytesscripts/export_jianying.pyruns · 5,740 bytesscripts/jianying/__init__.pyruns · 49 bytesscripts/jianying/builders.pyruns · 11,062 bytesscripts/jianying/model.pyruns · 2,796 bytesscripts/jianying/optional.pyruns · 1,012 bytesscripts/jianying/schema.pyruns · 2,600 bytesscripts/jianying/templates.pyruns · 1,064 bytesscripts/jianying/timeline_contract.pyruns · 5,914 bytesscripts/jianying/tracks.pyruns · 2,068 bytesscripts/jianying/writer.pyruns · 7,973 bytesscripts/lib.pyruns · 13,254 bytesscripts/loudness.pyruns · 15,008 bytesscripts/media.pyruns · 13,897 bytesscripts/narration_audio.pyruns · 20,387 bytesscripts/packaging.pyruns · 5,586 bytesscripts/render_preflight.pyruns · 3,481 bytesscripts/source_score.pyruns · 24,274 bytesscripts/source_subtitles.pyruns · 21,111 bytesscripts/subtitles/__init__.pyruns · 56 bytesscripts/subtitles/core.pyruns · 15,097 bytesscripts/subtitles/render.pyruns · 3,577 bytesscripts/subtitles/track.pyruns · 12,677 bytesscripts/subtitles/track_binding.pyruns · 10,175 bytesscripts/timeline.pyruns · 8,371 bytesscripts/timeline_emit.pyruns · 7,774 bytesscripts/visual_render.pyruns · 18,372 bytes
Read excerpt
## 1. 定位
本技能负责最终合成:
1. 把各段旁白音频放到视频时间线上。
2. 在旁白窗口内用固定包络压低原声(盖住原声对白时与落在安静段时各用一档音量),间隙恢复原声。
3. 根据旁白位置生成 `subtitles.srt`;默认同时生成并烧录 `subtitles.ass`,`--no-burn-subtitles` 可关闭。不烧录时(关闭或降级),`subtitles.srt` 复制到成片旁,名为 `recap_<stem>.srt`;烧录时删掉旧的同名外挂字幕。
4. 可选把最终响度标准化到目标 LUFS:两遍 loudnorm,只用一个恒定增益,不做动态压缩;混音的真峰值放不下这么大的增益时,先过 4 倍过采样的真峰值限幅器(最多削 `LOUDNESS_LIMITER_MAX_DB`,默认 6 dB),超出部分才下调目标响度。真峰值目标针对交付的 AAC 文件:AAC 编码会让真峰值比 PCM 混音高 0.3–1.4 dB,所以首次渲染瞄准 TP 下 0.5 dB,渲染后解码成片实测;仍超过 -1 dBTP 时按超出量再降 0.1 dB 只重编码音频(画面流复制),最多两次,仍超出则以 `delivered_true_peak_over_target` 阻断。ffmpeg 实际用的模式、限幅量与成片实测值记在 `assembly_qc.json` 的 `loudness_mode` 与 `loudnorm_final_pass`(`delivered`)。
5. 成片不带原片的容器元数据(`title`、`comment` 等标签与章节)。
## 2. 声音收尾契约
合成阶段只实现创作决定,不凭空制造决定。Agent 在写旁白位置前,已在 `visual_audio_board.json` 为每个 beat 指定 `audio_owner`: