https://github.com/open-technology-foundation/transcribe
A robust Python package for high-quality audio transcription using OpenAI's Whisper and post-processing with GPT models.
https://github.com/open-technology-foundation/transcribe
python transcription
Last synced: 6 months ago
JSON representation
A robust Python package for high-quality audio transcription using OpenAI's Whisper and post-processing with GPT models.
- Host: GitHub
- URL: https://github.com/open-technology-foundation/transcribe
- Owner: Open-Technology-Foundation
- License: gpl-3.0
- Created: 2025-03-02T12:41:20.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-10-23T06:18:45.000Z (9 months ago)
- Last Synced: 2025-10-23T08:28:09.807Z (9 months ago)
- Topics: python, transcription
- Language: Python
- Homepage: https://yatti.id/
- Size: 92.7 MB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Transcribe
A robust Python package for high-quality audio transcription using OpenAI's Whisper API with intelligent post-processing via GPT models.
## Features
- **High-Quality Transcription**: Uses OpenAI's Whisper API for accurate audio-to-text conversion
- **Intelligent Post-Processing**: GPT models clean and format transcripts for readability
- **Timestamp Support**: Precise timing information for each speech segment
- **Subtitle Generation**: Create SRT and VTT subtitle files with proper formatting
- **Parallel Processing**: Efficiently process large audio files using multiple workers
- **Content-Aware Processing**: Specialized handling for different content types (technical, medical, etc.)
- **Multi-language Support**: Automatic language detection and processing
- **Flexible Configuration**: Configure via command line, environment variables, or JSON files
- **Smart Caching**: Avoid redundant API calls and reduce costs
- **Robust Error Handling**: Automatic retry mechanisms with graceful degradation
## Installation
### Using the Installation Script (Recommended)
The simplest way to install is using the provided installation script:
```bash
# Clone the repository
git clone https://github.com/Open-Technology-Foundation/transcribe.git
cd transcribe
# Local installation (recommended - installs in current directory)
./install.sh --local
# OR System-wide installation (requires sudo)
sudo ./install.sh --system
```
After installation, create a `.env` file with your OpenAI API key:
```bash
echo "OPENAI_API_KEY=your_api_key_here" > .env
```
### Manual Installation
If you prefer manual installation:
#### Local Development Setup
```bash
# Clone the repository
git clone https://github.com/Open-Technology-Foundation/transcribe.git
cd transcribe
# Create and activate virtual environment
python3 -m venv .venv
source .venv/bin/activate
# Install dependencies and package in development mode
pip install -r requirements.txt
pip install -e .
# Make wrapper scripts executable
chmod +x transcribe clean-transcript create-sentences
```
#### System-wide Installation
```bash
# Clone to system location
sudo git clone https://github.com/Open-Technology-Foundation/transcribe.git /usr/share/transcribe
cd /usr/share/transcribe
# Create virtual environment and install
sudo python3 -m venv .venv
sudo .venv/bin/pip install -r requirements.txt
sudo .venv/bin/pip install -e .
# Make scripts executable
sudo chmod +x transcribe clean-transcript create-sentences
# Create system-wide symlinks
sudo ln -sf /usr/share/transcribe/transcribe /usr/local/bin/transcribe
sudo ln -sf /usr/share/transcribe/clean-transcript /usr/local/bin/clean-transcript
sudo ln -sf /usr/share/transcribe/create-sentences /usr/local/bin/create-sentences
```
## Quick Start
### Basic Transcription
```bash
# Simple transcription
transcribe audio_file.mp3 -o transcript.txt
# With context for better accuracy
transcribe audio_file.mp3 -o transcript.txt -c "medical,technical" -v
# Generate timestamps
transcribe audio_file.mp3 -o transcript.txt -T
# Create SRT subtitles
transcribe audio_file.mp3 --srt
# Create VTT subtitles
transcribe audio_file.mp3 --vtt
```
### Large File Processing
```bash
# Use parallel processing for large files
transcribe audio_file.mp3 -w 4 --parallel --max-parallel-workers 4
```
### Post-Processing Tools
```bash
# Clean existing transcript
clean-transcript raw_transcript.txt -o clean_transcript.txt -c "context"
# Format text into sentences
create-sentences transcript.txt -o formatted.txt
```
## Command Line Options
### Transcribe
```
Usage: transcribe [options] audio_file
Output Options:
-o, --output FILE Output file (default: input filename with .txt extension)
-O, --output-to-stdout Output transcription to stdout
Processing Options:
-P, --no-post-processing Disable post-processing cleanups (default: enabled)
-l, --chunk-length MS Audio chunk length in milliseconds (default: 600000)
-L, --input-language LANG Input audio language (default: auto-detect)
-c, --context TEXT Context for post-processing (e.g., medical,legal,technical)
-W, --transcribe-model MODEL Whisper model for transcription (default: whisper-1)
-m, --model MODEL GPT model for post-processing (default: gpt-4o)
-s, --max-chunk-size N Maximum chunk size for post-processing (default: 3000)
-t, --temperature N Temperature for generation (default: 0.05)
-p, --prompt TEXT Prompt to guide initial transcription
-w, --max-workers N Parallel workers for transcription (default: 1)
Advanced Post-Processing Options:
--summary-model MODEL Model for context summarization (default: gpt-4o-mini)
--auto-context Auto-determine domain context from content
--raw Save raw transcript before post-processing
--auto-language Auto-detect language from transcript content
--parallel Enable parallel processing for large transcripts
--max-parallel-workers N Parallel workers for post-processing (default: CPU count)
--cache Enable caching for better performance
--content-aware Enable content-aware specialized processing
--clear-cache Clear cached results before starting
Timestamp and Subtitle Options:
-T, --timestamps Include timestamp information in output
--srt Generate SRT subtitle file (enables timestamps)
--vtt Generate VTT subtitle file (enables timestamps)
Logging Options:
-v, --verbose Enable verbose output
-d, --debug Enable debug output
Examples:
# Basic transcription
transcribe audio_file.mp3
# Advanced transcription with all features
transcribe audio_file.mp3 -o transcript.txt --content-aware --parallel --cache
# Transcription with context
transcribe audio_file.mp3 -c "medical,technical" -m gpt-4o
# Generate subtitles
transcribe audio_file.mp3 --srt
# Parallel processing
transcribe audio_file.mp3 -w 4 --parallel --max-parallel-workers 4
```
### Clean Transcript
```
Usage: clean-transcript [options] input_file
Options:
-L, --input-language LANG Input language (translate to English if specified)
-c, --context TEXT Domain-specific context (e.g., medical,legal)
-m, --model MODEL OpenAI model to use (default: gpt-4o)
--summary-model MODEL OpenAI model for summaries (default: gpt-4o-mini)
-M, --max-tokens N Maximum tokens (default: 4096)
-s, --max-chunk-size N Maximum chunk size for processing (default: 3000)
-t, --temperature N Temperature for generation (default: 0.05)
-o, --output FILE Output file (default: stdout)
-v, --verbose Enable verbose output
-d, --debug Enable debug output
```
### Create Sentences
```
Usage: create-sentences [options] input_file
Options:
-o, --output FILE Output file (default: stdout)
-p, --paragraphs Create paragraphs instead of sentences
-m, --min-sentences N Minimum sentences per paragraph (default: 2)
-M, --max-sentences N Maximum sentences per paragraph (default: 8)
-s, --max-sentence-length N Maximum sentence length in bytes (default: 3000)
-v, --verbose Enable verbose output
-d, --debug Enable debug output
```
## Environment Variables
- `OPENAI_API_KEY`: Your OpenAI API key (required)
- `OPENAI_COMPLETION_MODEL`: Default model for post-processing (default: gpt-4o)
- `OPENAI_SUMMARY_MODEL`: Default model for summaries (default: gpt-4o-mini)
- `TRANSCRIBE_CHUNK_LENGTH_MS`: Audio chunk length in milliseconds (default: 600000)
- `TRANSCRIBE_MAX_CHUNK_SIZE`: Maximum text chunk size for processing (default: 3000)
- `TRANSCRIBE_PARALLEL`: Enable parallel processing (true/false, default: true)
- `TRANSCRIBE_MAX_WORKERS`: Maximum number of workers (default: 4)
- `TRANSCRIBE_TEMP_DIR`: Directory for temporary files (default: system temp)
- `TRANSCRIBE_LOG_LEVEL`: Logging level (INFO, DEBUG, etc., default: INFO)
## Configuration File
You can specify configuration options in a JSON file:
```json
{
"openai": {
"models": {
"transcription": "whisper-1",
"completion": "gpt-4o",
"summary": "gpt-4o-mini"
}
},
"transcription": {
"chunk_length_ms": 600000,
"temperature": 0.05,
"parallel": true,
"max_workers": 4
},
"processing": {
"max_chunk_size": 3000,
"temperature": 0.1,
"max_tokens": 4096,
"post_processing": true
},
"output": {
"save_raw": true,
"create_paragraphs": true,
"min_sentences_per_paragraph": 2,
"max_sentences_per_paragraph": 8
},
"system": {
"temp_dir": "",
"log_level": "INFO"
}
}
```
## Advanced Usage
### Parallel Processing
For large audio files (>30 minutes), configure parallel processing:
```bash
# Parallel transcription workers
transcribe audio_file.mp3 -w 4
# Parallel post-processing
transcribe audio_file.mp3 --parallel --max-parallel-workers 4
# Combined parallel processing
transcribe audio_file.mp3 -w 4 --parallel --max-parallel-workers 4
```
### Advanced Features
```bash
# Content-aware processing (automatically detects content type)
transcribe audio_file.mp3 --content-aware
# Enable caching to reduce API costs
transcribe audio_file.mp3 --cache
# Auto-detect domain context from content
transcribe audio_file.mp3 --auto-context
# All advanced features combined
transcribe audio_file.mp3 --content-aware --parallel --cache --auto-context
# Save raw transcript before post-processing
transcribe audio_file.mp3 --raw --content-aware
```
### Using as a Python Package
```python
from transcribe_pkg.core.transcriber import Transcriber
from transcribe_pkg.core.processor import TranscriptProcessor
from transcribe_pkg.utils.subtitle_utils import save_subtitles
# Initialize transcriber
transcriber = Transcriber(
model="whisper-1",
language="en",
temperature=0.05,
chunk_length_ms=600000
)
# Initialize processor with advanced features
processor = TranscriptProcessor(
model="gpt-4o",
summary_model="gpt-4o-mini",
max_chunk_size=3000,
cache_enabled=True,
content_aware=True
)
# Transcribe audio file
transcript = transcriber.transcribe(
audio_path="lecture.mp3",
prompt="University lecture on quantum physics",
with_timestamps=True,
max_workers=4
)
# Generate subtitles if timestamps are available
if isinstance(transcript, dict) and "segments" in transcript:
save_subtitles(transcript, "lecture.srt", format_type="srt")
# Process transcript with content-aware analysis
processed_text = processor.process(
text=transcript["text"] if isinstance(transcript, dict) else transcript,
context="scientific,physics,education",
use_parallel=True,
content_analysis=True
)
# Save results
with open("lecture_processed.txt", "w", encoding="utf-8") as f:
f.write(processed_text)
```
## Development
### Running Tests
```bash
# Run all tests
python run_tests.py
# Run with coverage report
python run_tests.py -c
# Run specific test module
python run_tests.py -p tests.test_text_utils
# Run specific test method
python run_tests.py -p tests.test_text_utils.TestTextUtils.test_create_sentences_normal
```
### Benchmarking
Performance testing scripts are available in `tests/benchmark/`:
```bash
# Benchmark parallel processing
./tests/benchmark/benchmark-parallel.sh sample_audio.mp3
# Test specific parallel features
python tests/benchmark/test-parallel-flag.py
python tests/benchmark/test-medium-file.py
python tests/benchmark/test-large-file.py
```
For detailed setup and development information, see [DEVELOPMENT.md](DEVELOPMENT.md).
## Contributing
Contributions are welcome! Please:
1. Fork the repository
2. Create a feature branch
3. Make your changes with tests
4. Follow the coding standards in [DEVELOPMENT.md](DEVELOPMENT.md)
5. Submit a Pull Request
## License
This project is licensed under the GNU General Public License v3.0 - see the [LICENSE](LICENSE) file for details.
## Authors
- Gary Dean
- AI Transcription Team
---
*This README was comprehensively updated to reflect the current codebase*