Gsd-skill-creator av-studio

Audio/video studio production — multi-track editing, color grading, motion graphics, compositing, live streaming, screen recording, YouTube publishing.

install
source · Clone the upstream repo
git clone https://github.com/Tibsfox/gsd-skill-creator
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/Tibsfox/gsd-skill-creator "$T" && mkdir -p ~/.claude/skills && cp -r "$T/examples/skills/media/av-studio" ~/.claude/skills/tibsfox-gsd-skill-creator-av-studio && rm -rf "$T"
manifest: examples/skills/media/av-studio/SKILL.md
source content

AV Studio Production Skill

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.

Production Templates

YouTube Video Pipeline

# 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

Presentation Recording

# 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

Tutorial / Screencast

# 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

Color Grading

LUT Application

# 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

Manual Color Correction

# 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

Motion Graphics

Text Animations

# Fade-in title card (2 seconds)
ffmpeg -i input.mp4 -vf "\
  drawtext=text='Episode Title':\
  fontsize=72:fontcolor=white@0.0:\
  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:color=black@0.7: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

Transitions

# 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

Picture-in-Picture

# 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

Video Stabilization

# 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 / Slow Motion

# 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

Live Streaming

# 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"

Aspect Ratios

FormatRatioResolutionUse
Widescreen16:91920x1080YouTube, presentations
Vertical9:161080x1920TikTok, Reels, Shorts
Square1:11080x1080Instagram feed
Ultrawide21:92560x1080Cinematic
Classic4:31440x1080Legacy, some webcams
Cinema2.39:12048x858Film standard

Letterboxing / Pillarboxing

# 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

YouTube Publishing Checklist

  1. Video specs: H.264, 1080p+, -14 LUFS audio, thumbnail 1280x720
  2. faststart:
    -movflags +faststart
    for progressive download
  3. Pixel format:
    -pix_fmt yuv420p
    for compatibility
  4. Chapters: Include in description (00:00 Intro, 01:30 Topic, etc.)
  5. Thumbnail: High-contrast, readable text at small sizes, faces perform well
  6. Subtitles: SRT file or burn-in with
    drawtext
    filter
  7. End screen: Last 20 seconds reserved for cards/end screen elements

Related Skills & Agents

AssetRole
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

When This Skill Activates

  • Video editing, trimming, concatenation with transitions
  • Color grading and correction
  • Motion graphics, titles, lower thirds
  • Screen recording and screencasts
  • Live streaming (YouTube, Twitch)
  • Picture-in-picture compositing
  • Video stabilization
  • Timelapse and slow motion
  • Aspect ratio conversion
  • YouTube video publishing workflow