Claude-skill-registry extract-videos

Extract video metadata from a YouTube channel and save to CSV for tracking. Use when adding a new channel, extracting conference videos, populating video lists, or when the user mentions "extract videos", "get videos from channel", "add channel", or "video metadata".

install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/extract-videos" ~/.claude/skills/majiayu000-claude-skill-registry-extract-videos && rm -rf "$T"
manifest: skills/data/extract-videos/SKILL.md
source content

Extract Videos from YouTube Channel

Why? Manually tracking YouTube videos is tedious and error-prone. This skill automates extracting video metadata (titles, durations, URLs) into a CSV for systematic transcript downloading and analysis.

Quick Start

# Recurring channel (adds to channels.yaml for future syncs)
mkdir -p data/<channel-name>
transcript-extract https://www.youtube.com/@ChannelName/videos \
  --count 50 \
  --append-csv data/<channel-name>/videos.csv \
  --register-channel

# One-time extraction (conferences, playlists)
mkdir -p data/<name>
transcript-extract <youtube_url> --count 100 --append-csv data/<name>/videos.csv

Workflow

1. Determine Extraction Type

ScenarioUse
--register-channel
?
Typical Count
New channel for ongoing trackingYes50-200 initial, then 20-50 for syncs
Conference talks (one-time)No50-500
Specific playlist/topicNoAs needed
Testing/explorationNo5-10

[!TIP] Use

--register-channel
only for channels you want to sync regularly. It adds the channel to
data/channels.yaml
for the
sync-all-channels
skill.

2. Create Directory Structure

mkdir -p data/<channel-name>

Naming conventions:

  • Use lowercase with hyphens:
    aws-reinvent-2025
    ,
    veritasium
    ,
    lexfridman
  • Match the YouTube handle when possible:
    @veritasium
    becomes
    veritasium
  • For conferences, include year:
    pycon-2025
    ,
    kubecon-eu-2024

3. Run Extraction Command

transcript-extract <channel_url> \
  --count <N> \
  --append-csv data/<channel-name>/videos.csv \
  [--register-channel]

Parameters:

OptionDescriptionDefaultWhen to Use
--count, -n
Number of latest videos10Always specify explicitly
--append-csv
CSV file pathRequiredAlways use for tracking
--register-channel
Add to
channels.yaml
FalseRecurring channels only
--output, -o
Save video IDs to text file-Rarely needed
--verbose, -v
Enable verbose outputFalseDebugging

[!CAUTION] The

--count
in the command sets the INITIAL extraction count. The
count
in
channels.yaml
(set by
--register-channel
) controls FUTURE sync counts. These are independent values.

4. Verify Extraction

# Check CSV was created with expected columns
head -3 data/<channel-name>/videos.csv

# Count extracted videos
wc -l data/<channel-name>/videos.csv

Expected CSV columns:

  • url
    - Full YouTube video URL
  • title
    - Video title
  • duration_minutes
    - Video length
  • view_count
    - Number of views
  • description
    - Video description
  • transcript_downloaded
    - Tracking field (initially empty)
  • summary_done
    - Tracking field (initially empty)

Examples

Adding a New Channel for Regular Syncing

# 1. Create directory
mkdir -p data/veritasium

# 2. Extract initial batch with registration
transcript-extract https://www.youtube.com/@veritasium/videos \
  --count 100 \
  --append-csv data/veritasium/videos.csv \
  --register-channel

# Result: 100 videos extracted, channel added to channels.yaml with count: 100

One-Time Conference Extraction

# Extract AWS re:Invent talks (won't be synced later)
mkdir -p data/aws-reinvent-2025
transcript-extract https://www.youtube.com/@AWSEventsChannel/videos \
  --count 200 \
  --append-csv data/aws-reinvent-2025/videos.csv

# No --register-channel = not added to channels.yaml

Re-running on Existing CSV (Incremental Update)

# Running again only adds NEW videos (duplicates auto-skipped)
transcript-extract https://www.youtube.com/@veritasium/videos \
  --count 20 \
  --append-csv data/veritasium/videos.csv

# Safe to run multiple times - existing videos preserved

Troubleshooting

ProblemCauseSolution
"No videos found"Wrong URL formatUse
https://www.youtube.com/@ChannelName/videos
(include
/videos
)
CSV not createdDirectory doesn't existRun
mkdir -p data/<name>
first
Duplicate videos appearingRunning with different URL variantsAlways use canonical
@handle/videos
format
Channel not in
channels.yaml
Forgot
--register-channel
Re-run with flag, or manually add to YAML
Wrong video count in
channels.yaml
Flag uses command's
--count
value
Edit
channels.yaml
manually to adjust future sync count
Permission deniedFile locked or read-onlyClose any apps using the CSV

Common Mistakes

  1. Forgetting

    /videos
    in URL

    • Wrong:
      https://www.youtube.com/@veritasium
    • Right:
      https://www.youtube.com/@veritasium/videos
  2. Using

    --register-channel
    for one-time extractions

    • This pollutes
      channels.yaml
      with channels you won't sync
    • Only use for channels you want in the regular sync rotation
  3. Expecting transcripts to download

    • This skill ONLY extracts video metadata to CSV
    • Use
      download-transcripts
      skill to actually fetch transcripts
  4. Not creating directory first

    • The
      --append-csv
      path requires parent directory to exist
    • Always run
      mkdir -p data/<name>
      before extraction
  5. Confusing command

    --count
    with
    channels.yaml
    count

    • Command
      --count
      : How many videos to extract NOW
    • channels.yaml
      count
      : How many videos for FUTURE syncs
    • Initial extraction might be 200, but sync count might be 30

Quality Checklist

Before considering extraction complete:

  • Directory created in
    data/
    with proper naming
  • CSV exists with expected video count
  • CSV has all required columns (url, title, duration_minutes, etc.)
  • If recurring channel: entry exists in
    channels.yaml
  • If recurring channel:
    channels.yaml
    count is set appropriately for future syncs

Next Steps

After extracting videos:

  1. Download transcripts: Use the
    download-transcripts
    skill
  2. Sync channels later: Use
    sync-all-channels
    for registered channels
  3. Add summaries: Use
    summarize-transcripts
    after downloading