DaVinci Resolve — Screencast Editing
Edit OBS screen recordings into polished developer screencasts (railscasts-style). Covers the end-to-end workflow from raw recording to exported video.
Environment
- DaVinci Resolve 20 (free edition) on Arch Linux
- OBS Studio recordings in
~/Videos/(MP4, default OBS output) - Finished screencasts go to
~/Videos/screencasts/
Screencast Editing Workflow
The standard workflow for a developer screencast:
1. Project Setup
- Launch DaVinci Resolve (
davinci-resolvefrom terminal or app menu) - Create new project from Project Manager
- Switch to Edit page (timeline icon at bottom bar)
- Close unnecessary panels — toggle off Media Pool (top-left icon) and Inspector (top-right icon) to maximize viewer/timeline space
- Import: right-click Media Pool area → Import Media... → select recording from
~/Videos/ - Drag clip from Media Pool to timeline (auto-creates timeline)
- Set proxy mode for smooth playback: Playback menu → Proxy Mode → Half Resolution
2. Remove Original Audio
OBS recordings include system/mic audio that is usually replaced with voiceover.
- Right-click clip in timeline → Remove Attributes...
- Check All Audio Attributes → OK
This strips the audio component from the clip. The video remains intact.
Note: "Link/Unlink" for separating audio from video is not available via right-click in Resolve 20. Use Remove Attributes instead.
3. Trim Start and End
- Play from beginning — find where real content starts
- Park playhead at that point → Ctrl+B to split
- Click the junk segment before the cut → Backspace (ripple delete — removes and closes gap)
- Jump to end of timeline (End key), trim the tail the same way
4. Speed Ramp Boring Sections
The goal is to show the full workflow without jump cuts — speed up boring parts rather than deleting them.
Navigation:
- Space — play/pause
- J / K / L — rewind / pause / forward (tap J or L multiple times for faster speed)
- Left/Right arrows — frame-by-frame
- End — jump to end of timeline
- Drag playhead in timeline ruler
Splitting clips: Park playhead → Ctrl+B to split at playhead. (Blade tool B also works but Ctrl+B is more reliable.)
Speed ramping:
- Split at start and end of a boring section using Ctrl+B
- Right-click the boring segment → Change Speed
- Set percentage (e.g. 400% for 4x) and check Ripple Sequence to auto-close timeline gaps
- Repeat for all boring sections
Matching video speed to audio duration: To speed-ramp a video segment so it exactly matches an audio clip's length:
- Formula: Speed % = (original video duration / target audio duration) × 100
- Visual method: Hold Ctrl and drag the right edge of the video clip — this speed-changes (not trims) the clip to fit the new duration
Compound clips: Select multiple clips (Ctrl+click) → right-click → New Compound Clip to merge them into one. Double-click a compound clip to edit inside it.
5. Audio Overlay
After the rough cut is locked, add replacement audio.
Voiceover (record in Resolve):
- Switch to Fairlight page (music note icon at bottom bar)
- Right-click in track header area (far left of timeline) → Add Track → Mono
- Set input: click the input routing on the track header → Patch Input/Output dialog → Source: Audio Inputs, select your ALSA mic input (usually 1: ALSA), Destination: click your new track → close
- Arm the track (red R button on track header)
- Mute the track (M button on track header) to prevent echo/feedback while recording
- Increase audio buffer if crackling: DaVinci Resolve menu → Preferences → Audio → Buffer Size → 1024 or 2048
- Park playhead where narration starts → press Record (red circle in transport controls at bottom) — video plays while you narrate
- Press Space or Stop when done
Voiceover (external file):
- Import audio file into Media Pool
- Drag it onto Audio Track 2 (A2) in the timeline
- Align with video
Background music:
- Import audio file
- Drag onto a new audio track (A3)
- Lower volume: select clip → Inspector → Volume slider (or right-click → Set Clip Volume)
- Music should be -15dB to -20dB below voiceover
6. Zoom Into Code / Image Overlays
Zoom into a section of video (e.g. a few lines of code):
- Split the clip at start and end of the section to zoom (Ctrl+B)
- Select the middle segment → Inspector (Ctrl+I) → Video → Transform
- Increase Zoom (e.g. 2.0 for 2x), adjust Position X/Y to center on the target area
- For smooth zoom: click the diamond keyframe icon next to Zoom at the start, move playhead a few frames forward, change Zoom value — Resolve auto-creates the transition. Reverse at the end to zoom back out.
Image overlays (diagrams, screenshots):
- Import image into Media Pool
- Drag onto a track above video (V2/V3)
- Select image clip → Inspector → Video → Transform → adjust Zoom and Position to size/place it
7. Contextual Text Annotations
Explanatory text overlays that contextualize what's happening on screen (e.g. "Setting up the config file", "Running the test suite").
- In the top icon row of the left panel, click the T icon (Titles) — it's next to the sparkle/effects icon
- Drag Text onto a track above your video in the timeline (creates V2)
- Stretch/shrink the title clip to match how long the context is relevant
- Select the title clip → toggle Inspector (wrench icon, top-right, or Ctrl+I)
- Edit text content, font, size, color, position in the Inspector
Claude Code Screencast Style Guide
These screencasts show Claude Code sessions — prompting, Claude generating, reviewing output, iterating. The value is expert judgment about what to ask and how to evaluate, not watching Claude type.
Voiceover Principles
- Narrate intent, not action. "I'm going to have Claude build the API endpoint" not "Now I'm typing a prompt." The viewer can see what's happening — explain why.
- Narrate during fast-forward sections especially. While Claude churns, explain what it's doing and why you prompted it that way. Fast-forward becomes more interesting than real-time with expert commentary.
- Front-load context. Before each Claude interaction, briefly explain what you're about to ask and why. Then let the clip play/fast-forward.
- Comment on Claude's output, not the process. When Claude finishes, pause on the result and narrate what's interesting. Skip narrating the thinking/streaming.
Pacing
- Normal speed: your prompts (viewers want to read them), reviewing Claude's output, test results, key decisions
- 4x-8x speed: Claude generating responses, long file reads, scrolling output
- Cut entirely: false starts, re-prompts where you changed your mind, debugging your own typos
Annotations
- Label what phase you're in: "Prompting", "Reviewing output", "Running tests", "Iterating on feedback"
- Annotate when something surprising or important happens in Claude's output that might scroll by fast
- Caption the prompt text itself if it's not fully visible on screen
Structure
- Open with 15-30 seconds of "here's what we're building and why"
- Close with "here's what we accomplished" — show the diff or test output
- Each "prompt → Claude works → review output" cycle is a natural segment
8. Export
- Switch to Deliver page (rocket icon at bottom bar)
- Select preset: YouTube (1080p) is a good default
- Verify settings:
- Resolution: 1920x1080 (match your OBS recording)
- Frame Rate: match source (usually 30 or 60fps)
- Format: MP4
- Codec: H.264 (broad compatibility) or H.265 (smaller file)
- Set Save to location:
~/Videos/screencasts/ - Click Add to Render Queue (bottom-left of settings panel)
- Click Render All (right panel)
Linux free edition note: H.264/H.265 codecs are not available — only APV. Export as MOV/APV, then convert with ffmpeg:
ffmpeg -i output.mov -vf format=yuv420p -c:v libx264 -preset fast -crf 22 -c:a aac -b:a 128k output.mp4
The -vf format=yuv420p is required because ProRes exports as 10-bit yuv422p10le. Intel Arc QSV encoding (hevc_qsv, av1_qsv) has not worked — MFX session errors with 10-bit input. CPU libx264 is the proven path.
Export takes ~40 minutes for a 17-min video (render + convert). Run ffmpeg with run_in_background.
CRITICAL: Check audio before sharing. Verify the exported file has audio:
ffmpeg -i output.mp4 -af volumedetect -f null /dev/null 2>&1 | grep mean_volume
If mean_volume is below -80dB, audio is silent. Common cause: voiceover track was muted (M button) during export. Unmute before rendering.
Consider Descript for future screencasts — web-based editor with cloud rendering, transcript-based editing, built-in voiceover/captions. Eliminates the ProRes→ffmpeg conversion pain. Resolve remains useful for complex editing but the export workflow on Linux free edition is painful.
Keyboard Shortcuts Reference
| Action | Shortcut |
|---|---|
| Play/Pause | Space |
| Rewind / Pause / Forward | J / K / L |
| Frame back/forward | Left / Right arrow |
| Blade tool | B |
| Selection tool | A |
| Trim tool | T |
| Undo | Ctrl+Z |
| Ripple delete | Backspace |
| Delete (leave gap) | Delete |
| Fullscreen viewer | Ctrl+F |
| Cinema viewer | Ctrl+Shift+F (Esc to exit) |
| Mark In / Out | I / O |
| Split clip at playhead | Ctrl+B (without switching to blade) |
| Move clip to track above | Alt+Up Arrow |
| Move clip to track below | Alt+Down Arrow |
| Drag clip between tracks | Hold Shift while dragging vertically |
Viewer Controls
- Maximize viewer: Ctrl+F toggles fullscreen viewer
- Hide panels: Toggle off Media Pool (top-left icon), Inspector (top-right icon), Effects Library to reclaim space
- Zoom timeline: Alt+scroll wheel on the timeline area (not the ruler)
Linux-Specific Notes
- Launch:
davinci-resolvefrom terminal, or via desktop launcher - OBS output: Default
~/Videos/— MP4 files with timestamp names - Audio devices: Fairlight page uses ALSA/PulseAudio. If mic input doesn't appear, check
pavucontrolfor input device routing. - GPU: Resolve prefers NVIDIA on Linux. Intel Arc / AMD may have limited hardware acceleration in free version.
- Crashes on export: If Resolve crashes during render, try switching codec from H.265 to H.264, or reduce timeline resolution to 1080p.
- File permissions: Resolve may not follow symlinks for media import. Use actual file paths.
Project Context
Read resources/domain-skill.md if it exists for project-specific guidance.
Read resources/personal-skill.md if it exists for personal customizations.