video-assembly

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Video 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
remotion-best-practices
skill for guidance.
适用场景:动画字幕、数据可视化、复杂动态图形、基于React的模板。
可参考现有
remotion-best-practices
技能获取指导。

FFmpeg Operations

FFmpeg操作

Concatenate Video Clips

拼接视频片段

bash
undefined
bash
undefined

Create 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
undefined
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
undefined

Add Audio to Video

为视频添加音频

bash
undefined
bash
undefined

Replace 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
undefined
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
undefined

Add Subtitles

添加字幕

bash
undefined
bash
undefined

Burn 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
undefined
ffmpeg -i video.mp4 -vf "ass=subs.ass" -c:a copy output.mp4
undefined

Transitions Between Clips

片段间转场

bash
undefined
bash
undefined

Crossfade (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
undefined
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
undefined

Extract/Manipulate Frames

提取/处理帧

bash
undefined
bash
undefined

Extract 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
undefined
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
undefined

Format Conversion

格式转换

bash
undefined
bash
undefined

MP4 (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
undefined
ffmpeg -i input.mp4 -vf "fps=15,scale=480:-1:flags=lanczos" -loop 0 output.gif
undefined

Quality Presets

质量预设

Use CaseCRFResolutionNotes
Master/Archive15-17OriginalLarge files, best quality
YouTube Upload18-201920x1080Good balance
Social Media20-231080x1920 (vertical)Smaller files
Preview/Draft25-281280x720Quick review
使用场景CRF值分辨率说明
母版/存档15-17原始分辨率文件体积大,画质最佳
YouTube上传18-201920x1080画质与体积平衡良好
社交媒体20-231080x1920(竖屏)文件体积较小
预览/草稿25-281280x720快速审核用

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 format
1. 从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. Export
1. 从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 embedded
1. 屏幕录制画面 + 访谈画面叠加
2. 使用Remotion添加动画注释
3. 添加章节标记
4. 添加字幕(从音频自动生成)
5. 导出并嵌入章节信息

Audio Normalization

音频标准化

bash
undefined
bash
undefined

Normalize 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
undefined
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
undefined

Remotion Integration

Remotion集成

For complex compositions, delegate to
remotion-best-practices
skill.
Use 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

参考资料

  • references/workflows.md
    - Video output format settings
  • remotion-best-practices
    skill - Complex composition guidance
  • references/workflows.md
    - 视频输出格式设置
  • remotion-best-practices
    技能 - 复杂合成指导