video-post-production
Skill213 starsChanged 2 days agoMITView on GitHub
Video post-production rules: audio mastering, color, captions, platform export. Use when: 'add music', 'add voiceover', 'export for tiktok', 'add captions', 'color grade', 'audio levels', 'master audio', 'export settings', 'platform requirements'. Covers FFmpeg patterns, audio chain, subtitle standards, and platform-specific export configs. Do NOT use to generate or animate the video frames/scenes in code (use remotion-production-guide), to write the script (use video-narrative-arc), or to evaluate script quality (use script-evaluator); this is the finishing stage applied to an already-rendered video.
We split this skill into the rules it gives an agent
3 rules. About 0 are common, 1 is distinctive, and 2 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 197
Always use -pix_fmt yuv420p - some players can't handle other formats
- Very specific: line 198
Always use -movflags +faststart for web playback (moves metadata to file start)
- Distinctive: line 202
Test on mobile FIRST - most video is watched on phones
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Video Post-Production Guide
Rules and FFmpeg patterns for finishing videos: audio mastering, captions, color, and platform-specific export.
Audio Rules
Volume Levels (dB)
| Track | Level | Notes |
| Voiceover | -12 to -10 dB | Primary audio, clear and upfront |
| Music (under VO) | -32 to -24 dB | Background, should not compete |
| Music (solo, no VO) | -16 to -12 dB | Can be louder when alone |
| Sound effects | -18 to -14 dB | Accent, not distraction |
| Silence floor | -60 dB | True silence feels unnatural, keep room tone |
Music Selection by BPM
| Mood | BPM Range | Use Case |
| Calm, reflective | 60-80 | Luxury brands, testimonials |
| Confident, steady | 80-100 | Corporate, explainers |
| Moderate energy | 100-120 | Product demos, features |
| Energetic | 120-140 | Launch videos, social ads |
| High energy | 140+ | Montage, fast-cut sequences |
Rule: Match music tempo to edit pace. Cut on beats for professional feel.
Audio Mastering Chain (FFmpeg)
# Full mastering chain: highpass + EQ + compression + loudness
ffmpeg -i input.mp4 -af "
highpass=f=80,
equalizer=f=3000:t=q:w=1.5:g=3,
acompressor=threshold=-20dB:ratio=4:attack=5:release=50,
loudnorm=I=-16:TP=-1.5:LRA=11
" -c:v copy output.mp4Free Music/SFX Libraries
- Mixkit (mixkit.co) - royalty-free, no attribution
- Pixabay Audio (pixabay.com/music) - free, Pixabay license
- Freesound (freesound.org) - CC licensed, varies
- YouTube Audio Library - free for YouTube content
Caption / Subtitle Rules
Standards
| Parameter | Value |
| Max characters per line | 32-42 |
| Max 2 lines simultaneously | Always |
| Display duration | 1.5-7 seconds per caption |
| Min display | 1.5 seconds (even for short text) |
| Font size | 48-72px (for 1080p) |
| Font | Sans-serif, bold weight |
| Position | Bottom center, 10% from bottom edge |
| Background | Semi-transparent black (#000000AA) |
Burn-in Captions (FFmpeg)
# Basic caption burn-in
ffmpeg -i input.mp4 -vf "subtitles=subs.srt:force_style='FontSize=24,FontName=Arial,Bold=1,PrimaryColour=&HFFFFFF,OutlineColour=&H000000,Outline=2,MarginV=40'" output.mp4
# Word-by-word highlight (requires ASS format)
ffmpeg -i input.mp4 -vf "ass=styled_subs.ass" output.mp4Color Correction
Quick Presets (FFmpeg)
# Warm punch (indoor/talking head)
ffmpeg -i input.mp4 -vf "eq=contrast=1.1:brightness=0.02:saturation=1.15,colorbalance=rs=0.05:gs=-0.02:bs=-0.05" output.mp4
# Cool tech (product/SaaS)
ffmpeg -i input.mp4 -vf "eq=contrast=1.05:saturation=0.95,colorbalance=rs=-0.03:gs=0.01:bs=0.05" output.mp4
# High contrast B&W
ffmpeg -i input.mp4 -vf "hue=s=0,eq=contrast=1.3:brightness=0.03" output.mp4Platform Export Configs
YouTube (16:9)
ffmpeg -i input.mp4 \
-c:v libx264 -preset slow -crf 18 -pix_fmt yuv420p \
-c:a aac -b:a 192k -ar 48000 \
-movflags +faststart \
youtube_output.mp4TikTok / Instagram Reels (9:16)
# Resize landscape to vertical with blur background
ffmpeg -i input_16x9.mp4 \
-filter_complex "[0:v]scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black[fg];[0:v]scale=1080:1920,boxblur=20:20[bg];[bg][fg]overlay=(W-w)/2:(H-h)/2" \
-c:v libx264 -preset fast -crf 23 -pix_fmt yuv420p \
-c:a aac -b:a 128k \
tiktok_output.mp4
# Native vertical render from Remotion
npx remotion render src/index.ts Comp out/vertical.mp4 --width 1080 --height 1920Instagram Square (1:1)
# Center crop to square
ffmpeg -i input_16x9.mp4 \
-vf "crop=ih:ih:(iw-ih)/2:0,scale=1080:1080" \
-c:v libx264 -crf 23 -pix_fmt yuv420p \
-c:a aac -b:a 128k \
square_output.mp4Common FFmpeg Operations
Trim
# Fast trim (keyframe-based, instant)
ffmpeg -ss 00:00:05 -i input.mp4 -t 15 -c copy trimmed.mp4
# Frame-accurate trim (re-encodes)
ffmpeg -i input.mp4 -ss 00:00:05 -t 15 -c:v libx264 -crf 18 trimmed.mp4Concatenate
# Create file list
echo "file 'scene1.mp4'" > list.txt
echo "file 'scene2.mp4'" >> list.txt
echo "file 'scene3.mp4'" >> list.txt
# Lossless concat (same codec/resolution)
ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4
# Re-encoded concat (different sources)
ffmpeg -f concat -safe 0 -i list.txt -c:v libx264 -crf 18 output.mp4Add Background Music
# Music at -24dB under existing audio
ffmpeg -i video.mp4 -i music.mp3 \
-filter_complex "[1:a]volume=-24dB[music];[0:a][music]amix=inputs=2:duration=first" \
-c:v copy output.mp4Speed Change
# 2x speed (with audio pitch correction)
ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" -af "atempo=2.0" fast.mp4
# 0.5x slow motion
ffmpeg -i input.mp4 -vf "setpts=2.0*PTS" -af "atempo=0.5" slow.mp4GIF Creation
# High quality GIF with palette
ffmpeg -i input.mp4 -vf "fps=15,scale=480:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" output.gifQuality Checklist (Post-Render)
Before publishing, verify:
- No black frames at start/end
- Audio levels consistent (no sudden jumps)
- Captions readable on mobile (test at 50% zoom)
- Colors look correct on both dark and light screens
- File size within platform limits
- Aspect ratio correct for target platform
- First frame is visually interesting (it becomes the thumbnail)
- Last frame has clear CTA visible for 2+ seconds
Gotchas
- Always use
-pix_fmt yuv420p- some players can't handle other formats - Always use
-movflags +faststartfor web playback (moves metadata to file start) - FFmpeg
-ssBEFORE-i= fast seek (keyframe). AFTER-i= accurate (slower) aaccodec needs-strict experimentalon some FFmpeg versions- Complex filter graphs: keep each step simple. Claude makes subtle errors in long chains
- Test on mobile FIRST - most video is watched on phones
Other versions3 projects use a version of this.
Word for word · 1
- AnastasiyaW/claude-code-config★ 209100% same
Edited · 0
None found.
Wrote their own version · 2
- mtarcure/claude-vibe-squad★ 220same name
- dotaclover/clover-skills★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository60 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- agent-harness-designSkill
- agents-best-practicesSkill
- diffusion-engineeringSkill
- flux2-klein-promptingSkill
- flux2-lora-trainingSkill
- forensic-prompt-compilerSkill
- ml-research-labSkill
- notebooklm-grounded-researchSkill
- vlm-segmentationSkill
- feature-newSkill
- harness-designSkill
- layer-newSkill
- plan-swarm-reviewSkill
- pixel-art-storyboardSkill
- pixel-art-studioSkill
- architecture-firstSkill
- architecture-qualitySkill
- bug-reproducerSkill
- code-complexitySkill
- control-cliSkill
- control-uiSkill
- deep-reviewSkill
- deslopSkill
- distill-feedbackSkill
- harness-feedbackSkill
- proof-verifySkill
- refactoring-safelySkill
- repo-mapSkill
- root-cause-deliverySkill
- system-and-data-designSkill
- testing-strategySkill
- thermo-nuclear-code-quality-reviewSkill
- verify-thisSkill
- workflow-orchestrationSkill
- frontend-designSkill
- motion-framerSkill
- ui-designSkill
- ui-ux-pro-maxSkill
- ios-developmentSkill
- lean-codeSkill
- cross-harness-continuationSkill
- deepseek-provider-contractSkill
- desktop-sessions-discoverySkill
- epistemic-challengeSkill
- gemini-delegateSkill
- harness-auditSkill
- observability-monitoringSkill
- remote-compute-opsSkill
- plan-to-ticketsSkill
- product-meaning-extractorSkill
- remotion-production-guideSkill
- script-evaluatorSkill
- video-narrative-arcSkill
- article-structure-reviewSkill
- cavemanSkill
- humanize-englishSkill
- humanize-russianSkill
- owner-voiceSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
Reviews can't be read right now.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

