video-assembly
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseVideo Assembly
视频组装
Combines outputs from video and voice pipelines into final deliverable videos.
将视频和语音流水线的输出合并为最终交付视频。
Two Assembly Modes
两种组装模式
Mode 1: FFmpeg (Simple, Fast)
模式1:FFmpeg(简单、快速)
Best for: Concatenation, audio mixing, basic transitions, format conversion.
No dependencies beyond FFmpeg (pre-installed on most systems).
适用场景:视频拼接、音频混音、基础转场、格式转换。
除FFmpeg外无其他依赖(多数系统已预装)。
Mode 2: Remotion (Complex Compositions)
模式2:Remotion(复杂合成)
Best for: Animated captions, data visualizations, complex motion graphics, React-based templates.
Uses existing skill for guidance.
remotion-best-practices适用场景:动画字幕、数据可视化、复杂动态图形、基于React的模板。
可参考现有技能获取指导。
remotion-best-practicesFFmpeg Operations
FFmpeg操作
Concatenate Video Clips
拼接视频片段
bash
undefinedbash
undefinedCreate file list
Create file list
echo "file 'clip1.mp4'" > filelist.txt
echo "file 'clip2.mp4'" >> filelist.txt
echo "file 'clip3.mp4'" >> filelist.txt
echo "file 'clip1.mp4'" > filelist.txt
echo "file 'clip2.mp4'" >> filelist.txt
echo "file 'clip3.mp4'" >> filelist.txt
Concatenate (same codec/resolution)
Concatenate (same codec/resolution)
ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.mp4
ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.mp4
Concatenate (different codecs/resolutions - re-encode)
Concatenate (different codecs/resolutions - re-encode)
ffmpeg -f concat -safe 0 -i filelist.txt -vf "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2" -c:v libx264 -crf 19 output.mp4
undefinedffmpeg -f concat -safe 0 -i filelist.txt -vf "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2" -c:v libx264 -crf 19 output.mp4
undefinedAdd Audio to Video
为视频添加音频
bash
undefinedbash
undefinedReplace audio
Replace audio
ffmpeg -i video.mp4 -i audio.wav -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 output.mp4
ffmpeg -i video.mp4 -i audio.wav -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 output.mp4
Mix audio (keep original + add music)
Mix audio (keep original + add music)
ffmpeg -i video.mp4 -i music.mp3 -filter_complex "[0:a][1:a]amix=inputs=2:duration=first:dropout_transition=3" -c:v copy output.mp4
ffmpeg -i video.mp4 -i music.mp3 -filter_complex "[0:a][1:a]amix=inputs=2:duration=first:dropout_transition=3" -c:v copy output.mp4
Add audio with volume control
Add audio with volume control
ffmpeg -i video.mp4 -i bgm.mp3 -filter_complex "[1:a]volume=0.3[bg];[0:a][bg]amix=inputs=2:duration=first" -c:v copy output.mp4
undefinedffmpeg -i video.mp4 -i bgm.mp3 -filter_complex "[1:a]volume=0.3[bg];[0:a][bg]amix=inputs=2:duration=first" -c:v copy output.mp4
undefinedAdd Subtitles
添加字幕
bash
undefinedbash
undefinedBurn subtitles (SRT file)
Burn subtitles (SRT file)
ffmpeg -i video.mp4 -vf "subtitles=subs.srt:force_style='FontName=Arial,FontSize=24,PrimaryColour=&HFFFFFF,OutlineColour=&H000000,Outline=2'" -c:a copy output.mp4
ffmpeg -i video.mp4 -vf "subtitles=subs.srt:force_style='FontName=Arial,FontSize=24,PrimaryColour=&HFFFFFF,OutlineColour=&H000000,Outline=2'" -c:a copy output.mp4
Burn subtitles (ASS file for styled)
Burn subtitles (ASS file for styled)
ffmpeg -i video.mp4 -vf "ass=subs.ass" -c:a copy output.mp4
undefinedffmpeg -i video.mp4 -vf "ass=subs.ass" -c:a copy output.mp4
undefinedTransitions Between Clips
片段间转场
bash
undefinedbash
undefinedCrossfade (2 second transition)
Crossfade (2 second transition)
ffmpeg -i clip1.mp4 -i clip2.mp4 -filter_complex
"[0:v]trim=0:5,setpts=PTS-STARTPTS[v0];
[1:v]trim=0:5,setpts=PTS-STARTPTS[v1];
[v0][v1]xfade=transition=fade:duration=2:offset=3[outv]"
-map "[outv]" output.mp4
"[0:v]trim=0:5,setpts=PTS-STARTPTS[v0];
[1:v]trim=0:5,setpts=PTS-STARTPTS[v1];
[v0][v1]xfade=transition=fade:duration=2:offset=3[outv]"
-map "[outv]" output.mp4
undefinedffmpeg -i clip1.mp4 -i clip2.mp4 -filter_complex
"[0:v]trim=0:5,setpts=PTS-STARTPTS[v0];
[1:v]trim=0:5,setpts=PTS-STARTPTS[v1];
[v0][v1]xfade=transition=fade:duration=2:offset=3[outv]"
-map "[outv]" output.mp4
"[0:v]trim=0:5,setpts=PTS-STARTPTS[v0];
[1:v]trim=0:5,setpts=PTS-STARTPTS[v1];
[v0][v1]xfade=transition=fade:duration=2:offset=3[outv]"
-map "[outv]" output.mp4
undefinedExtract/Manipulate Frames
提取/处理帧
bash
undefinedbash
undefinedExtract frames
Extract frames
ffmpeg -i video.mp4 -vf "fps=1" frames/frame_%04d.png
ffmpeg -i video.mp4 -vf "fps=1" frames/frame_%04d.png
Create video from frames
Create video from frames
ffmpeg -framerate 24 -i frames/frame_%04d.png -c:v libx264 -crf 19 -pix_fmt yuv420p output.mp4
ffmpeg -framerate 24 -i frames/frame_%04d.png -c:v libx264 -crf 19 -pix_fmt yuv420p output.mp4
Speed up/slow down
Speed up/slow down
ffmpeg -i video.mp4 -filter:v "setpts=0.5PTS" -filter:a "atempo=2.0" fast.mp4 # 2x speed
ffmpeg -i video.mp4 -filter:v "setpts=2.0PTS" -filter:a "atempo=0.5" slow.mp4 # 0.5x speed
undefinedffmpeg -i video.mp4 -filter:v "setpts=0.5PTS" -filter:a "atempo=2.0" fast.mp4 # 2x speed
ffmpeg -i video.mp4 -filter:v "setpts=2.0PTS" -filter:a "atempo=0.5" slow.mp4 # 0.5x speed
undefinedFormat Conversion
格式转换
bash
undefinedbash
undefinedMP4 (H.264) - universal compatibility
MP4 (H.264) - universal compatibility
ffmpeg -i input.mov -c:v libx264 -crf 19 -preset medium -c:a aac -b:a 192k output.mp4
ffmpeg -i input.mov -c:v libx264 -crf 19 -preset medium -c:a aac -b:a 192k output.mp4
WebM (VP9) - web delivery
WebM (VP9) - web delivery
ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 -c:a libopus output.webm
ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 -c:a libopus output.webm
GIF (short clips)
GIF (short clips)
ffmpeg -i input.mp4 -vf "fps=15,scale=480:-1:flags=lanczos" -loop 0 output.gif
undefinedffmpeg -i input.mp4 -vf "fps=15,scale=480:-1:flags=lanczos" -loop 0 output.gif
undefinedQuality Presets
质量预设
| Use Case | CRF | Resolution | Notes |
|---|---|---|---|
| Master/Archive | 15-17 | Original | Large files, best quality |
| YouTube Upload | 18-20 | 1920x1080 | Good balance |
| Social Media | 20-23 | 1080x1920 (vertical) | Smaller files |
| Preview/Draft | 25-28 | 1280x720 | Quick review |
| 使用场景 | CRF值 | 分辨率 | 说明 |
|---|---|---|---|
| 母版/存档 | 15-17 | 原始分辨率 | 文件体积大,画质最佳 |
| YouTube上传 | 18-20 | 1920x1080 | 画质与体积平衡良好 |
| 社交媒体 | 20-23 | 1080x1920(竖屏) | 文件体积较小 |
| 预览/草稿 | 25-28 | 1280x720 | 快速审核用 |
Assembly Pipeline
组装流程
Standard Video
标准视频
1. Gather clips from comfyui-video-pipeline outputs
2. Gather audio from comfyui-voice-pipeline outputs
3. Normalize audio levels (-16 LUFS for YouTube)
4. Trim/arrange clips to match script timing
5. Add transitions between clips (if multiple)
6. Add background music (optional, lower volume)
7. Add subtitles (if applicable)
8. Export in target format1. 从comfyui-video-pipeline输出中收集视频片段
2. 从comfyui-voice-pipeline输出中收集音频
3. 标准化音频电平(YouTube标准为-16 LUFS)
4. 根据脚本时长修剪/排列片段
5. 为片段添加转场(如有多个片段)
6. 添加背景音乐(可选,调低音量)
7. 添加字幕(如适用)
8. 按目标格式导出Talking Head Video
访谈类视频
1. Lip-synced video from comfyui-voice-pipeline
2. Add intro/outro (if applicable)
3. Add lower thirds or name cards
4. Add background music at -20dB below speech
5. Normalize speech to -16 LUFS
6. Export1. 从comfyui-voice-pipeline获取唇形同步视频
2. 添加片头/片尾(如适用)
3. 添加下方字幕条或姓名卡片
4. 添加背景音乐,音量比语音低20dB
5. 将语音电平标准化至-16 LUFS
6. 导出Tutorial/Walkthrough
教程/演示视频
1. Screen recordings + talking head overlay
2. Use Remotion for animated annotations
3. Add chapter markers
4. Add subtitles (auto-generate from audio)
5. Export with chapters embedded1. 屏幕录制画面 + 访谈画面叠加
2. 使用Remotion添加动画注释
3. 添加章节标记
4. 添加字幕(从音频自动生成)
5. 导出并嵌入章节信息Audio Normalization
音频标准化
bash
undefinedbash
undefinedNormalize to -16 LUFS (YouTube standard)
Normalize to -16 LUFS (YouTube standard)
ffmpeg -i input.mp4 -af "loudnorm=I=-16:TP=-1.5:LRA=11" -c:v copy output.mp4
ffmpeg -i input.mp4 -af "loudnorm=I=-16:TP=-1.5:LRA=11" -c:v copy output.mp4
Two-pass normalization (more accurate)
Two-pass normalization (more accurate)
ffmpeg -i input.mp4 -af loudnorm=I=-16:TP=-1.5:LRA=11:print_format=json -f null -
ffmpeg -i input.mp4 -af loudnorm=I=-16:TP=-1.5:LRA=11:print_format=json -f null -
Read measured values, then:
Read measured values, then:
ffmpeg -i input.mp4 -af "loudnorm=I=-16:TP=-1.5:LRA=11:measured_I=-20:measured_TP=-2:measured_LRA=8:measured_thresh=-30" -c:v copy output.mp4
undefinedffmpeg -i input.mp4 -af "loudnorm=I=-16:TP=-1.5:LRA=11:measured_I=-20:measured_TP=-2:measured_LRA=8:measured_thresh=-30" -c:v copy output.mp4
undefinedRemotion Integration
Remotion集成
For complex compositions, delegate to skill.
remotion-best-practicesUse Remotion when:
- Animated text/captions needed
- Data visualizations in video
- Complex motion graphics
- Programmatic/template-based video generation
- React-based UI elements as video overlays
Pass to Remotion:
- Clip paths and timings
- Text content and styles
- Animation specifications
- Output format requirements
对于复杂合成任务,可交由技能处理。
remotion-best-practices使用Remotion的场景:
- 需要动画文本/字幕
- 视频中包含数据可视化内容
- 复杂动态图形
- 程序化/基于模板的视频生成
- 将基于React的UI元素作为视频叠加层
传递给Remotion的信息:
- 片段路径和时长
- 文本内容和样式
- 动画规格
- 输出格式要求
Output Checklist
输出检查清单
Before marking assembly as complete:
- Audio levels normalized (-16 LUFS for YouTube)
- No audio clipping (peak below -1.5 dB)
- Resolution matches delivery target
- Frame rate is consistent throughout
- No black frames at cuts
- Subtitles are timed correctly (if applicable)
- File size is reasonable for delivery platform
- Metadata is correct (title in filename)
标记组装完成前需确认:
- 音频电平已标准化(YouTube标准为-16 LUFS)
- 无音频削波(峰值低于-1.5 dB)
- 分辨率符合交付目标
- 帧率全程一致
- 剪辑处无黑帧
- 字幕 timing 准确(如适用)
- 文件体积符合交付平台要求
- 元数据正确(文件名包含标题)
Reference
参考资料
- - Video output format settings
references/workflows.md - skill - Complex composition guidance
remotion-best-practices
- - 视频输出格式设置
references/workflows.md - 技能 - 复杂合成指导
remotion-best-practices