video-cleaning Checked
Installation
Copy the prompt below and send it to your AI assistant (e.g. Claude Code) — it will follow the instructions and install automatically.
Install the "video-cleaning" skill by following the instructions at https://skill123.me/install/video-cleaning.
Run in your terminal — downloads and installs to ~/.claude/skills/.
curl -fsSL https://skill123.me/install/video-cleaning.sh | bash
Download the zip and extract it into your skills directory (e.g. ~/.claude/skills/), then restart your session.
⬇ Download v1.0.0 · 16 KBNot live-tested yet — this skill is rated on static analysis only.
About this skill
A skill from the GitHub repository jykim/claude-obsidian-skills.
Video Cleaning Skill
Automated video transcription and editing workflow that removes pauses and filler words from Korean videos using OpenAI Whisper API and MoviePy for frame-accurate cuts.
Documentation
A skill from the GitHub repository jykim/claude-obsidian-skills.
Video Cleaning Skill
Automated video transcription and editing workflow that removes pauses and filler words from Korean videos using OpenAI Whisper API and MoviePy for frame-accurate cuts.
When to Use This Skill
Use this skill when you need to:
- Clean up recorded presentations or talks
- Remove awkward pauses and "uh/um" sounds from videos
- Reduce video length by removing dead air
- Create polished videos from raw recordings
- Process Korean language videos with natural speech patterns
**Perfect for**: Presentation recordings, lecture videos, podcast recordings, interview footage, or any speaking video that needs cleaning.
Example Results
See the before/after comparison:
- **Before**: https://youtu.be/2jfRBlQ4veI (1:13 original)
- **After**: https://youtu.be/ZTsFZs9w65M (0:45 edited, 39% reduction)
Requirements
### System Requirements
- **FFmpeg**: Video processing tool (must be installed)
- macOS:
brew install ffmpeg - Linux:
sudo apt install ffmpeg - Windows: Download from ffmpeg.org
### Python Requirements
- **OpenAI Python SDK**:
pip install openai - **MoviePy**:
pip install moviepy(video editing with frame accuracy) - **OpenAI API Key**: Set environment variable
OPENAI_API_KEY - Get your API key from platform.openai.com
- Cost: ~$0.15 per 25-minute video (Whisper transcription)
### Python Version
- Python 3.7 or higher
How It Works
This skill uses a **two-step workflow**:
### Step 1: Transcription (transcribe_video.py)
1. Extracts audio from video using FFmpeg
2. Sends audio to OpenAI Whisper API for transcription
3. Receives word-level timestamps (precise timing for each word)
4. Generates three output files:
{video_name} - transcript.json(complete API response){video_name} - transcript.md(formatted markdown){video_name} - word_timings.txt(simple text reference)
### Step 2: Video Editing (edit_video_remove_pauses.py)
1. Loads word-level transcript from Step 1
2. Identifies long pauses between words (> 1.0 seconds by default)
3. Identifies Korean filler words (어, 음, 아, 이, 오, 저)
4. Calculates which video segments to keep
5. Uses MoviePy for frame-accurate cutting and reassembly
6. Generates edited video and detailed report
Conservative Editing Philosophy
This skill uses **conservative editing** to ensure safe, predictable results:
### What Gets Removed
- ✅ **Long pauses** (>1.0 seconds of silence between words)
- ✅ **Clear filler words**: 어, 음, 아, 이, 오, 저 (Korean equivalents of "uh", "um", "ah", etc.)
### What Gets Kept
- ✅ **Context-dependent words**: 이제, 뭐, 그, 좀, 네, 약간
- These words can be legitimate in Korean speech
- Removing them risks cutting meaningful content
- ✅ **Short pauses** (< 1.0 seconds)
- Natural breathing and thinking pauses
- Important for speech rhythm
View full documentation
### Expected Results
- **Time saved**: 5-10% typically (1-2 minutes per 25-minute video)
- **Video segments**: 50-100 cuts (manageable, smooth transitions)
- **Safety**: Very low risk of removing important content
- **Quality**: Natural-sounding edited video
Usage Guide
### Basic Workflow
# Step 1: Transcribe your video
python transcribe_video.py "my_presentation.mp4"
# Step 2: Preview what will be removed
python edit_video_remove_pauses.py "my_presentation.mp4" --preview
# Step 3: Create edited video
python edit_video_remove_pauses.py "my_presentation.mp4"
### Step 1: Transcription Options
# Basic transcription (Korean, default)
python transcribe_video.py "video.mp4"
# Custom output directory
python transcribe_video.py "video.mp4" --output-dir "transcripts"
# Keep extracted audio file
python transcribe_video.py "video.mp4" --keep-audio
# English transcription
python transcribe_video.py "video_en.mp4" --language "en"
**Transcription outputs** (auto-generated in same directory as video):
video - transcript.json(464 KB for 25-min video, ~2,800 words)video - transcript.md(formatted with timestamps)video - word_timings.txt(simple reference)
### Step 2: Video Editing Options
# Preview mode (see what will be removed)
python edit_video_remove_pauses.py "video.mp4" --preview
# Basic editing (default settings)
python edit_video_remove_pauses.py "video.mp4"
# Custom pause threshold (remove pauses > 0.8 seconds)
python edit_video_remove_pauses.py "video.mp4" --pause-threshold 0.8
# Custom output path
python edit_video_remove_pauses.py "video.mp4" --output "cleaned_video.mp4"
# Adjust padding around cuts (default: 0.1 seconds)
python edit_video_remove_pauses.py "video.mp4" --padding 0.15
# Specify transcript location (if not auto-detected)
python edit_video_remove_pauses.py "video.mp4" --transcript "path/to/transcript.json"
# Skip filler word removal (only remove pauses)
python edit_video_remove_pauses.py "video.mp4" --no-fillers
# Save pauses data for chapter remapping (used by video-full-process)
python edit_video_remove_pauses.py "video.mp4" --output-pauses "video - pauses.json"
**Editing outputs**:
video - edited.mov(cleaned video)video - edited_edit_report.txt(detailed report)
Understanding the Edit Report
After editing, you'll receive a detailed report showing exactly what was removed:
============================================================
VIDEO EDIT REPORT (Conservative Mode)
============================================================
SUMMARY
------------------------------------------------------------
Original Duration: 00:25:21.000
Edited Duration: 00:23:16.690
Time Saved: 00:02:04.310 (8.2%)
Segments Kept: 67
PAUSES REMOVED
------------------------------------------------------------
Total Pauses: 43
Total Pause Time: 87.81 seconds
Top 10 Longest Pauses:
1. 5.64s at 00:07:51.500
2. 5.52s at 00:09:21.020
3. 3.54s at 00:00:11.520
...
FILLER WORDS REMOVED (Clear Fillers Only)
------------------------------------------------------------
Total Fillers: 28
Breakdown:
어 : 25 occurrences
아 : 3 occurrences
SAMPLE EDITS (First 5)
------------------------------------------------------------
1. Pause (3.54s) at 00:00:11.520
2. Pause (1.50s) at 00:00:29.400
3. Filler '어' (0.84s) at 00:05:32.140
...
Advanced Usage
### Custom Pause Thresholds
Adjust based on your content:
# More aggressive pause removal (0.8 seconds)
python edit_video_remove_pauses.py "video.mp4" --pause-threshold 0.8
# Very conservative (only remove 2+ second pauses)
python edit_video_remove_pauses.py "video.mp4" --pause-threshold 2.0
**Guidelines**:
- **0.5-0.8s**: Aggressive, removes more pauses but may feel rushed
- **1.0s** (default): Balanced, removes awkward pauses while keeping natural rhythm
- **1.5-2.0s**: Very conservative, only removes obvious dead air
### Batch Processing Multiple Videos
# Process all videos in a directory
for video in *.mp4; do
echo "Processing: $video"
python transcribe_video.py "$video"
python edit_video_remove_pauses.py "$video"
done
### Preview Before Editing
Always preview first when working with important content:
# Step 1: Transcribe
python transcribe_video.py "important_presentation.mp4"
# Step 2: Preview edits
python edit_video_remove_pauses.py "important_presentation.mp4" --preview
# Step 3: If satisfied, execute
python edit_video_remove_pauses.py "important_presentation.mp4"
File Naming Conventions
The scripts follow consistent naming patterns:
**Input**:
presentation.mp4(your original video)
**Transcription outputs**:
presentation - transcript.json(complete data)presentation - transcript.md(formatted markdown)presentation - word_timings.txt(simple reference)
**Editing outputs**:
presentation - edited.mov(cleaned video)presentation - edited_edit_report.txt(detailed report)
Technical Details
### MoviePy Processing
The editing script uses MoviePy for
Score breakdown
Assessment methodology
Version history
Imported from jykim/claude-obsidian-skills@main
