Skip to main content

A comprehensive tool for downloading, processing, and transcribing audio from YouTube videos and playlists for machine learning datasets

Project description

YouTube Audio Dataset Collector

A comprehensive Python library for downloading, processing, and transcribing audio from YouTube videos and playlists for machine learning datasets.

Features

  • YouTube Audio Download: Download audio from single videos or entire playlists using yt-dlp
  • Audio Processing: Convert audio to 16kHz, 16-bit mono WAV format optimized for ML
  • Intelligent Segmentation: Segment audio into 12-28 second chunks based on silence detection
  • Multi-API Transcription: Transcribe audio using Gemini API with multiple key rotation for rate limit avoidance
  • Parallel Processing: Multi-threaded processing for efficient handling of large datasets
  • CSV Export: Export results in CSV format with audio_filepath and transcript columns

Installation

From PyPI (recommended)

pip install youtube-audio-dataset-collector

From Source

git clone https://github.com/yourusername/youtube-audio-dataset-collector.git
cd youtube-audio-dataset-collector
pip install -e .

System Dependencies

The library requires ffmpeg for audio processing:

Ubuntu/Debian:

sudo apt install ffmpeg

macOS:

brew install ffmpeg

Windows: Download from https://ffmpeg.org/download.html

Quick Start

Command Line Interface

# Basic usage
youtube-audio-collector --url "https://www.youtube.com/watch?v=VIDEO_ID" --output ./my_dataset

# With multiple API keys for better rate limits
youtube-audio-collector --url "https://www.youtube.com/playlist?list=PLAYLIST_ID" \
                       --output ./my_dataset \
                       --keys-file gemini_keys.txt \
                       --rotate-keys

# Advanced options
youtube-audio-collector --url "https://www.youtube.com/watch?v=VIDEO_ID" \
                       --output ./my_dataset \
                       --threads 8 \
                       --batch-size 6 \
                       --language en

Python API

from youtube_audio_collector import YouTubeAudioCollector

# Initialize with single API key
collector = YouTubeAudioCollector(
    output_dir="./my_dataset",
    api_key="your_gemini_api_key",
    threads=4
)

# Process a YouTube URL
output_csv = collector.process_url("https://www.youtube.com/watch?v=VIDEO_ID")
print(f"Dataset saved to: {output_csv}")

# Initialize with multiple API keys for better rate limits
collector = YouTubeAudioCollector(
    output_dir="./my_dataset",
    api_keys=["key1", "key2", "key3"],
    threads=8,
    batch_size=6
)

# Process a playlist
output_csv = collector.process_url(
    "https://www.youtube.com/playlist?list=PLAYLIST_ID",
    language="kn"  # Kannada
)

Individual Components

from youtube_audio_collector import (
    YouTubeDownloader, 
    AudioProcessor, 
    TranscriptionService,
    APIKeyManager
)

# Download audio
downloader = YouTubeDownloader(cookies_path="cookies.txt")
audio_files = downloader.download_audio(
    "https://www.youtube.com/watch?v=VIDEO_ID",
    "./downloads"
)

# Process audio
processor = AudioProcessor(sample_rate=16000)
segments = processor.segment_audio(
    audio_files[0],
    "./segments",
    min_length=12000,  # 12 seconds
    max_length=28000   # 28 seconds
)

# Transcribe with multiple API keys
api_manager = APIKeyManager(["key1", "key2", "key3"])
transcriber = TranscriptionService(api_key_manager=api_manager)

for segment in segments:
    transcript = transcriber.transcribe_audio(segment, language="en")
    print(f"{segment}: {transcript}")

Configuration

Environment Variables

Create a .env file in your project directory:

# Single API key
GEMINI_API_KEY=your_gemini_api_key

# Multiple API keys (for rate limit avoidance)
GEMINI_API_KEY_1=your_first_api_key
GEMINI_API_KEY_2=your_second_api_key
GEMINI_API_KEY_3=your_third_api_key

API Keys File

Create a text file with one API key per line:

AIzaSyD...key1
AIzaSyE...key2  
AIzaSyF...key3

Cookies for Restricted Content

To access age-restricted or private content:

  1. Install a browser extension like Cookie Editor
  2. Export YouTube cookies in Netscape format
  3. Save as cookies.txt
  4. Pass the file path to the library

Output Structure

The library organizes output in a structured format:

output_directory/
├── raw/                    # Downloaded audio files
│   ├── video1.wav
│   └── video2.wav
├── converted/              # Format-converted audio
│   ├── converted_video1.wav
│   └── converted_video2.wav  
├── segments/               # Segmented audio chunks
│   ├── video1_segment_001.wav
│   ├── video1_segment_002.wav
│   └── ...
└── transcriptions.csv      # Final dataset

The CSV contains two columns:

  • audio_filepath: Path to audio segment
  • transcript: Transcribed text

API Reference

YouTubeAudioCollector

Main class for the complete pipeline.

collector = YouTubeAudioCollector(
    output_dir="./output",           # Output directory
    prefix="dataset",                # File prefix
    cookies_path="cookies.txt",      # Cookies file path
    api_keys=["key1", "key2"],       # Multiple API keys
    api_key="single_key",            # Single API key
    sample_rate=16000,               # Audio sample rate
    threads=4,                       # Processing threads
    batch_size=4,                    # Transcription batch size
    calls_per_key_per_minute=15,     # API rate limit
    key_cooldown=60                  # Key cooldown period
)

APIKeyManager

Manages multiple API keys with intelligent rotation.

manager = APIKeyManager(
    api_keys=["key1", "key2", "key3"],
    calls_per_key_per_minute=15,
    cooldown_period=60
)

# Get next available key
key = manager.get_next_available_key()

# Mark key as unhealthy (e.g., after rate limit)
manager.mark_key_unhealthy(key)

YouTubeDownloader

Downloads audio from YouTube URLs.

downloader = YouTubeDownloader(cookies_path="cookies.txt")
files = downloader.download_audio(url, output_dir, prefix="dataset")

AudioProcessor

Processes and segments audio files.

processor = AudioProcessor(sample_rate=16000)

# Convert format
converted = processor.convert_format(audio_path, output_dir)

# Segment audio
segments = processor.segment_audio(
    audio_path, 
    output_dir,
    min_length=12000,    # 12 seconds
    max_length=28000,    # 28 seconds
    min_silence_len=500, # 500ms
    silence_thresh=-35   # -35dB
)

TranscriptionService

Transcribes audio using Gemini API.

# With API key manager
transcriber = TranscriptionService(api_key_manager=manager)

# With single key
transcriber = TranscriptionService(api_key="your_key")

# Transcribe
transcript = transcriber.transcribe_audio(audio_path, language="en")

Supported Languages

The library supports transcription in multiple languages:

  • en - English
  • kn - Kannada
  • hi - Hindi
  • es - Spanish
  • fr - French
  • And many more supported by Gemini API

Performance Tips

  1. Use Multiple API Keys: Significantly improves throughput by avoiding rate limits
  2. Optimize Thread Count: Use 4-8 threads for most systems
  3. Batch Processing: Use batch sizes of 4-6 for optimal API usage
  4. Storage: Use SSD storage for better I/O performance with large datasets

Legal Considerations

  • Ensure you comply with YouTube's Terms of Service
  • Only download content you have rights to use
  • Respect content creators' intellectual property
  • Consider fair use guidelines for research and educational purposes

Contributing

Contributions are welcome! Please read our contributing guidelines and submit pull requests to our GitHub repository.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Support

Changelog

v1.0.0

  • Initial release
  • YouTube audio downloading with yt-dlp
  • Intelligent audio segmentation
  • Multi-API key support for Gemini transcription
  • Parallel processing
  • Command-line interface
  • Python API

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

youtube_audio_dataset_collector-0.1.1.tar.gz (17.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

File details

Details for the file youtube_audio_dataset_collector-0.1.1.tar.gz.

File metadata

File hashes

Hashes for youtube_audio_dataset_collector-0.1.1.tar.gz
Algorithm Hash digest
SHA256 e31bdd9fd74efc090a43eb5f81f933613c77e6c55114b13838af59b1b2ea4afe
MD5 04c05d1d0a10d32914fd29054f5c801f
BLAKE2b-256 3af447d54e267204ad09bac71bbdf3cd0f43c3d221d4d482c136e773d0db353e

See more details on using hashes here.

File details

Details for the file youtube_audio_dataset_collector-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for youtube_audio_dataset_collector-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 48f141ec3e29972a1d3ab57eea6e97f406c820b3233e6d66a1348af6fbdcf4ec
MD5 48b979836cedf97012ea208c5a5b10e0
BLAKE2b-256 b667b798597cd34026cb13c9cd33019808e1f777cf1837195693568061f842e8

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page