← Back to list
⚡

video-cleaning Checked

A skill from the GitHub repository jykim/claude-obsidian-skills.
⚡ Productivity skills By jykim Version v1.0.0 Added 2026-10-21 Updated 2026-10-21 Source ↗
8.0Overall rating
0Views
0Downloads
49Stars

Installation

🤖 Install via AI

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.
⌨️ Command line install

Run in your terminal — downloads and installs to ~/.claude/skills/.

curl -fsSL https://skill123.me/install/video-cleaning.sh | bash
📦 Download ZIP

Download the zip and extract it into your skills directory (e.g. ~/.claude/skills/), then restart your session.

⬇ Download v1.0.0 · 16 KB
📊 Static rating
8.0/10
Trigger
8.0
Structure
0.0
Workflow
8.0
Content
0.0
Engineering
0.0
Security
7.0

Six-dimension rubric with reviewer rationale.

View scorecard ↓
🛡 Dynamic test
—

Not 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

Trigger
8.0
Structure
0.0
Workflow
8.0
Content
0.0
Engineering
0.0
Security
7.0