Video Editing Rules (HARD, NON-NEGOTIABLE)
These rules exist because of repeated failures in April 2026. Every rule corresponds to a real incident that wasted time.
Rule 0: BACKUP BEFORE ANYTHING
# FIRST command before ANY edit:
cp file.tsx file.tsx.bak
cp video_complete.mp4 video_complete_backup.mp4
No exceptions. No “git has it.” Local backup FIRST.
Rule 1: Only Change What’s Asked
- “调整位置” = change CSS
bottom:/top:values. NOTHING ELSE. - Don’t touch audio. Don’t touch fonts. Don’t “improve” anything.
- Don’t reorganize code structure while you’re there.
Rule 2: Audio Pipeline
When only visuals changed (positions, colors, timing):
# Step 1: Extract audio from original complete (已混好的音频)
ffmpeg -y -i short1_complete.mp4 -vn -c:a aac /tmp/audio.aac
# Step 2: Merge with new video (zero re-encoding of audio)
ffmpeg -y -i short1_new.mp4 -i /tmp/audio.aac -map 0:v -map 1:a -c:v copy -c:a copy short1_positioned.mp4
NEVER:
- Guess which VO file to use
- Guess volume levels
- Re-mix audio from individual tracks (unless explicitly asked)
- Use
amix,adelay,volumefilters when just copying audio
The audio files in audio/shorts/:
short1_suffocating.mp3— Short1 VO (NOT harrison_fast!)short2_harrison_fast.mp3— Short2 VOshort3_harrison_fast.mp3— Short3 VOshort*_sfx.mp3— background music + sound effectsbgm_*.mp3— background music variants
When in doubt: extract from the original complete.mp4 — it already has the correct mix.
Rule 3: Output Naming
| Type | Naming | Example |
|---|---|---|
| Original complete | short1_complete.mp4 | SACRED. READ-ONLY. |
| New visual render | short1_v4.mp4 | Video only, no audio |
| New complete | short1_positioned.mp4 | New video + original audio |
| Backup | short1_complete_backup.mp4 | Before any operation |
NEVER overwrite *_complete.mp4.
Rule 4: Re-Read Before Editing
Long conversations cause context loss. Before editing ANY file:
# Always re-read the file you're about to edit
cat Short1Suffocating.tsx | grep "bottom:"
Don’t rely on memory. Don’t say “I remember the values.” RE-READ.
Rule 5: Verify After Each Step
# After render: check it has frames
ffprobe -v quiet -show_entries format=duration output.mp4
# After audio merge: check it has audio
ffprobe -v quiet -show_streams -select_streams a output.mp4
# After position change: render a still and visually verify
npx remotion still CompositionName --frame=400 --output=/tmp/check.png
Current Source Files
| Component | File | VO offset | Duration |
|---|---|---|---|
| Short1Suffocating | src/Short1Suffocating.tsx | 4s | 15s |
| Short2CodeRatio | src/Short2CodeRatio.tsx | 4s | 15s |
| Short3Dollar | src/Short3Dollar.tsx | 5.5s | 15s |
Render Commands
# Render video only (no audio)
npx remotion render Short1Suffocating out/shorts/short1_v5.mp4 --codec=h264
# Render a still for position check
npx remotion still Short1Suffocating --frame=400 --output=/tmp/check.png
# Merge video + extracted audio
ffmpeg -y -i new_video.mp4 -i extracted_audio.aac -map 0:v -map 1:a -c:v copy -c:a copy output.mp4