Video Production
Overview
Assemble course videos from individual lesson files with title slides and auto-generated timestamps for YouTube.
Quick Decision Tree
What do you need?
│
├── Full course assembly (end-to-end)
│ └── references/workflow.md
│ └── Combines all scripts below
│
├── Download videos from Drive
│ └── Script: scripts/gdrive_video_download.py
│
├── Create title slides
│ └── Script: scripts/create_title_slides.py
│
├── Stitch videos together
│ └── Script: scripts/stitch_videos.py
│
└── Generate YouTube description
└── Script: scripts/generate_youtube_description.py
Environment Setup
Google Drive OAuth (same as google-workspace skill).
System Requirements
- FFmpeg installed and in PATH
- Python 3.9+
Complete Workflow
bash
# Full course assembly from Drive folder
python scripts/stitch_videos.py \
--folder "https://drive.google.com/drive/folders/xxx" \
--output "Complete Course.mp4" \
--slide-duration 3
Pipeline Steps
- Download - Get all videos from Drive folder
- Parse Titles - Extract clean names from format
- Get Metadata - FFprobe for duration/resolution
- Generate Slides - Title card for each lesson
- Build Concat List - video1 → slide2 → video2 → ...
- Stitch with FFmpeg - Concatenate all segments
- Calculate Timestamps - Track cumulative duration
- Generate Description - YouTube-ready markdown
Outputs
| File | Description |
|---|
| Final stitched video |
| Timestamped description |
| Processing info |
Performance
| Input | Time | Output Size |
|---|
| 5 videos (30 min) | ~5 min | ~1.5 GB |
| 10 videos (1 hr) | ~10 min | ~3 GB |
| 20 videos (2 hr) | ~20 min | ~6 GB |
Security Notes
Credential Handling
- Google OAuth credentials for Drive access (see google-workspace skill)
- and never committed to git
- No additional API keys required for local video processing
Data Privacy
- All video processing happens locally using FFmpeg
- No video content is uploaded to external cloud services
- Source videos downloaded from Google Drive to local
- Final videos stored locally until manually uploaded
- Metadata JSON contains file names and timestamps only
Access Scopes
- Google Drive: sufficient for downloading
- Google Drive: required for uploading final videos
- No external video processing APIs used
Compliance Considerations
- Local Processing: All encoding/stitching done locally (privacy-preserving)
- No Cloud Upload: Videos never leave your machine during processing
- Content Rights: Ensure you have rights to source video content
- Course Content: Verify licensing for educational content distribution
- YouTube ToS: Generated descriptions comply with YouTube guidelines
- Storage: Large video files require adequate local disk space
- Cleanup: Remove temporary files from after processing
Troubleshooting
Common Issues
Issue: FFmpeg not found
Symptoms: "FFmpeg not found" or "command not found: ffmpeg"
Cause: FFmpeg not installed or not in system PATH
Solution:
- Install FFmpeg: (macOS) or download from ffmpeg.org
- Verify installation:
- Add FFmpeg to PATH if installed in non-standard location
- Restart terminal after installation
Issue: Codec mismatch / incompatible videos
Symptoms: "Non-monotonous DTS" or codec errors during stitching
Cause: Source videos have different codecs, resolutions, or frame rates
Solution:
- Re-encode all source videos to the same format before stitching
- Use FFmpeg to normalize:
ffmpeg -i input.mp4 -c:v libx264 -c:a aac output.mp4
- Ensure consistent resolution (e.g., all 1920x1080)
- Match frame rates across all videos (e.g., all 30fps)
Issue: Audio out of sync
Symptoms: Audio drifts from video over time
Cause: Inconsistent frame rates or variable frame rate sources
Solution:
- Use constant frame rate for all source videos
- Re-encode with flag
- Avoid mixing video from different sources/devices
- Check audio sample rates match across files
Issue: Insufficient disk space
Symptoms: "No space left on device" or incomplete output
Cause: Not enough free space for video processing
Solution:
- Check available disk space:
- Clear directory of old files
- Move large source videos to external drive
- Process fewer videos at once
Issue: Google Drive download fails
Symptoms: Videos fail to download from Drive folder
Cause: OAuth issue, permissions, or network timeout
Solution:
- Verify Google OAuth credentials (see google-workspace skill)
- Check folder sharing permissions
- Try downloading single file first to test
- Check for network connectivity issues
Issue: Title slides not generating
Symptoms: Missing title cards in final video
Cause: Font or image generation issue
Solution:
- Verify ImageMagick or Pillow is installed
- Check font files exist if custom fonts specified
- Review title text for special characters
- Try with default font settings first
Resources
- references/workflow.md - Complete video course workflow
Integration Patterns
Full Course Pipeline
Skills: google-workspace → video-production → google-workspace
Use case: End-to-end course video assembly
Flow:
- Download lesson videos from Google Drive folder
- Generate title slides and stitch all videos together
- Upload final video back to Drive and generate YouTube description
Transcript to Timestamps
Skills: transcript-search → video-production
Use case: Generate YouTube descriptions from meeting recordings
Flow:
- Search transcripts for relevant meetings
- Extract topic timestamps from transcript
- Generate formatted YouTube description with chapter markers
Content to Title Slides
Skills: content-generation → video-production
Use case: Create branded title cards for videos
Flow:
- Generate title slide images with content-generation
- Export slides in video-compatible format
- Insert title slides between video segments