Audio/video studio production — multi-track editing, color grading, motion graphics, compositing, live streaming, screen recording, YouTube publishing.
Combines ffmpeg-media (codecs/formats), audio-engineering (mastering/mixing), and gource-visualizer (repo visualization) into a unified production toolkit for video content creation, live streaming, and multimedia publishing.
# 1. Screen recording (with audio)
ffmpeg -f x11grab -video_size 1920x1080 -framerate 30 -i :0.0 \
-f pulse -i default \
-c:v libx264 -preset ultrafast -crf 18 \
-c:a aac -b:a 192k \
raw_recording.mkv
# 2. Trim to content
ffmpeg -ss 00:00:05 -i raw_recording.mkv -to 00:45:00 -c copy trimmed.mkv
# 3. Add intro + outro
cat > concat.txt << EOF
file 'intro.mp4'
file 'trimmed.mkv'
file 'outro.mp4'
EOF
ffmpeg -f concat -safe 0 -i concat.txt -c:v libx264 -c:a aac assembled.mp4
# 4. Color grade + normalize audio
ffmpeg -i assembled.mp4 \
-vf "eq=brightness=0.04:contrast=1.1:saturation=1.15,unsharp=5:5:0.5" \
-af "loudnorm=I=-14:TP=-1:LRA=11" \
-c:v libx264 -preset medium -crf 20 -pix_fmt yuv420p \
-c:a aac -b:a 192k \
-movflags +faststart \
final.mp4
# 5. Generate thumbnail
ffmpeg -i final.mp4 -ss 00:00:30 -frames:v 1 \
-vf "scale=1280:720" thumbnail.jpg
# Record screen + webcam PiP
ffmpeg -f x11grab -video_size 1920x1080 -framerate 30 -i :0.0 \
-f v4l2 -video_size 320x240 -framerate 30 -i /dev/video0 \
-f pulse -i default \
-filter_complex "[0:v][1:v]overlay=W-w-20:H-h-20[out]" \
-map "[out]" -map 2:a \
-c:v libx264 -preset fast -crf 22 \
-c:a aac -b:a 128k \
presentation.mp4
# Record with mouse cursor highlight
ffmpeg -f x11grab -video_size 1920x1080 -framerate 30 \
-draw_mouse 1 -i :0.0 \
-f pulse -i default \
-c:v libx264 -preset fast -crf 20 \
-c:a aac -b:a 128k \
tutorial.mp4
# Add chapter markers (for YouTube)
ffmpeg -i tutorial.mp4 -c copy \
-metadata:c:0 title="Introduction" \
-metadata:c:0 timebase=1/1000 \
chaptered.mp4
# Apply a 3D LUT (cube format)
ffmpeg -i input.mp4 -vf "lut3d=cinematic.cube" graded.mp4
# Apply with blend (50% strength)
ffmpeg -i input.mp4 -vf "split[a][b];[b]lut3d=cinematic.cube[c];[a][c]blend=all_opacity=0.5" graded.mp4
# Lift/Gamma/Gain (shadows/midtones/highlights)
ffmpeg -i input.mp4 -vf "\
colorbalance=rs=0.1:gs=-0.05:bs=0.15:\
rm=0:gm=0:bm=0:\
rh=-0.05:gh=0:bh=0.05" \
corrected.mp4
# White balance correction (warm up)
ffmpeg -i input.mp4 -vf "colortemperature=temperature=6500" warm.mp4
# Curves (S-curve for contrast)
ffmpeg -i input.mp4 -vf "curves=master='0/0 0.25/0.15 0.5/0.5 0.75/0.85 1/1'" contrast.mp4
# Fade-in title card (2 seconds)
ffmpeg -i input.mp4 -vf "\
drawtext=text='Episode Title':\
fontsize=72:[email protected]:\
x=(w-text_w)/2:y=(h-text_h)/2:\
alpha='if(lt(t,1),t,if(lt(t,3),1,if(lt(t,4),4-t,0)))'" \
titled.mp4
# Lower third (name + title)
ffmpeg -i input.mp4 -vf "\
drawbox=x=0:y=ih-120:w=500:h=120:[email protected]:t=fill,\
drawtext=text='Jane Doe':fontsize=36:fontcolor=white:x=20:y=ih-110,\
drawtext=text='Software Engineer':fontsize=24:fontcolor=0xcccccc:x=20:y=ih-65" \
lower_third.mp4
# Crossfade between two clips (1 second overlap)
ffmpeg -i clip1.mp4 -i clip2.mp4 \
-filter_complex "\
[0:v]trim=0:10,setpts=PTS-STARTPTS[v0];\
[1:v]trim=0:10,setpts=PTS-STARTPTS[v1];\
[v0][v1]xfade=transition=fade:duration=1:offset=9[vout];\
[0:a]atrim=0:10,asetpts=PTS-STARTPTS[a0];\
[1:a]atrim=0:10,asetpts=PTS-STARTPTS[a1];\
[a0][a1]acrossfade=d=1[aout]" \
-map "[vout]" -map "[aout]" crossfade.mp4
# Available xfade transitions:
# fade, wipeleft, wiperight, wipeup, wipedown, slideleft, slideright,
# slideup, slidedown, circlecrop, circleopen, circleclose, dissolve,
# pixelize, diagtl, diagtr, diagbl, diagbr, hlslice, hrslice,
# vuslice, vdslice, hblur, fadegrays, squeezeh, squeezev
# Webcam overlay (bottom right, 25% size)
ffmpeg -i screen.mp4 -i webcam.mp4 \
-filter_complex "\
[1:v]scale=iw/4:ih/4[pip];\
[0:v][pip]overlay=W-w-20:H-h-20" \
-c:v libx264 -crf 22 -c:a aac pip.mp4
# Animated PiP (slides in from right)
ffmpeg -i screen.mp4 -i webcam.mp4 \
-filter_complex "\
[1:v]scale=320:240[pip];\
[0:v][pip]overlay=x='if(lt(t,1),W,W-w-20)':y=H-h-20" \
animated_pip.mp4
# Two-pass stabilization with vidstab
# Pass 1: analyze
ffmpeg -i shaky.mp4 -vf vidstabdetect=shakiness=5:accuracy=15 -f null -
# Pass 2: apply
ffmpeg -i shaky.mp4 -vf vidstabtransform=smoothing=10:input=transforms.trf stabilized.mp4
# Timelapse from photos (one frame per image)
ffmpeg -framerate 30 -pattern_type glob -i 'photos/*.jpg' \
-c:v libx264 -crf 18 -pix_fmt yuv420p timelapse.mp4
# Speed ramp (normal → 4x → normal)
ffmpeg -i input.mp4 -filter_complex "\
[0:v]trim=0:10,setpts=PTS-STARTPTS[v1];\
[0:v]trim=10:30,setpts=0.25*(PTS-STARTPTS)[v2];\
[0:v]trim=30:40,setpts=PTS-STARTPTS[v3];\
[v1][v2][v3]concat=n=3:v=1:a=0[out]" \
-map "[out]" speed_ramp.mp4
# Smooth slow motion (frame interpolation with minterpolate)
ffmpeg -i input.mp4 -vf "minterpolate=fps=120:mi_mode=mci:mc_mode=aobmc:vsbmc=1" \
-r 30 slowmo.mp4
# Stream to YouTube via RTMP
ffmpeg -f x11grab -video_size 1920x1080 -framerate 30 -i :0.0 \
-f pulse -i default \
-c:v libx264 -preset veryfast -maxrate 4500k -bufsize 9000k \
-pix_fmt yuv420p -g 60 \
-c:a aac -b:a 128k -ar 44100 \
-f flv "rtmp://a.rtmp.youtube.com/live2/YOUR_STREAM_KEY"
# Stream to Twitch
ffmpeg -f x11grab -video_size 1920x1080 -framerate 30 -i :0.0 \
-f pulse -i default \
-c:v libx264 -preset veryfast -maxrate 6000k -bufsize 12000k \
-pix_fmt yuv420p -g 60 \
-c:a aac -b:a 160k -ar 44100 \
-f flv "rtmp://live.twitch.tv/app/YOUR_STREAM_KEY"
| Format | Ratio | Resolution | Use |
|---|---|---|---|
| Widescreen | 16:9 | 1920x1080 | YouTube, presentations |
| Vertical | 9:16 | 1080x1920 | TikTok, Reels, Shorts |
| Square | 1:1 | 1080x1080 | Instagram feed |
| Ultrawide | 21:9 | 2560x1080 | Cinematic |
| Classic | 4:3 | 1440x1080 | Legacy, some webcams |
| Cinema | 2.39:1 | 2048x858 | Film standard |
# Add letterbox (16:9 → 21:9 cinematic bars)
ffmpeg -i input.mp4 -vf "pad=iw:iw*9/21:(ow-iw)/2:(oh-ih)/2:black" cinematic.mp4
# Convert vertical to horizontal (blur background)
ffmpeg -i vertical.mp4 -filter_complex "\
[0:v]scale=1920:1080:force_original_aspect_ratio=increase,crop=1920:1080,boxblur=20[bg];\
[0:v]scale=-1:1080[fg];\
[bg][fg]overlay=(W-w)/2:0" \
horizontal_blurbg.mp4
-movflags +faststart for progressive download-pix_fmt yuv420p for compatibilitydrawtext filter| Asset | Role |
|---|---|
ffmpeg-media skill | Codec/format foundation |
audio-engineering skill | Audio mastering/mixing |
ffmpeg-processor agent | Format conversion |
audio-engineer agent | Audio mastering |
podcast-producer agent | Podcast pipeline |
music-analyzer agent | Audio analysis |
gource-visualizer skill | Repository visualization → video |