Skip to main content

Transcribe Internet videos and media files to text using faster-whisper

This project has been archived.

The maintainers of this project have marked this project as archived. No new releases are expected.

Project description

🗣️ Voxtus

Voxtus is a command-line tool for transcribing Internet videos and media files to text using faster-whisper.

It supports multiple output formats and can download, transcribe, and optionally retain the original audio. It's built in Python and installable as a proper CLI via PyPI or from source.

✨ Features

  • 🎥 Download & transcribe videos from YouTube, Vimeo, and 1000+ sites
  • 📁 Local file support for audio/video files
  • 📝 Multiple output formats: TXT, JSON
  • 🔄 Batch processing multiple formats in one run
  • 📊 Rich metadata in JSON format (title, source, duration, language)
  • 🚀 Stdout mode for pipeline integration
  • 🎯 LLM-friendly default text format
  • Fast transcription via faster-whisper

⚙️ Installation

1. Install system dependency: ffmpeg

Voxtus uses ffmpeg under the hood to extract audio from video files.

macOS:

brew install ffmpeg

Ubuntu/Debian:

sudo apt update && sudo apt install ffmpeg

2. Recommended for end users (via pipx)

pipx install voxtus

After that, simply run:

voxtus --help

🧪 Development Setup

Quick Start for Contributors

git clone https://github.com/johanthoren/voxtus.git
cd voxtus

# Install uv (fast Python package manager)
brew install uv         # macOS
# or: pip install uv    # any platform

# Setup development environment
make dev-install

# Run tests
make test

Development Workflow

The project uses a simple Makefile for development tasks:

make help              # Show all available commands
make install           # Install package and dependencies
make dev-install       # Install with development dependencies
make test              # Run tests
make test-coverage     # Run tests with coverage report

# Release (bumps version, commits, tags, and pushes)
make release           # Patch release (0.1.9 -> 0.1.10)
make release patch     # Patch release (0.1.9 -> 0.1.10)
make release minor     # Minor release (0.1.9 -> 0.2.0)
make release major     # Major release (0.1.9 -> 1.0.0)

The release process automatically:

  1. Checks that working directory is clean
  2. Runs tests
  3. Bumps the version in pyproject.toml
  4. Commits the version change
  5. Creates a git tag
  6. Pushes commit and tag to trigger GitHub Actions CI/CD

🧪 For contributors / running from source

git clone https://github.com/johanthoren/voxtus.git
cd voxtus
brew install uv         # or: pip install uv
uv venv
source .venv/bin/activate
uv pip install .

Then run:

voxtus --help

📋 Output Formats

Format Description Use Case
TXT Plain text with timestamps Default, LLM processing, reading
JSON Structured data with metadata APIs, data analysis, archival

Additional formats (SRT, VTT, CSV) are planned for future releases.

🔧 Extensible Format System

Voxtus uses a modular format system that makes adding new output formats straightforward. Each format is implemented as a separate module with its own writer class, making the codebase maintainable and extensible.


🧪 Examples

Basic Usage

# Transcribe to default TXT format
voxtus https://www.youtube.com/watch?v=abc123

# Transcribe local file
voxtus recording.mp3

Format Selection

# Single format
voxtus video.mp4 -f json

# Multiple formats at once
voxtus video.mp4 -f txt,json

Advanced Usage

# Custom name and output directory
voxtus -f json -n "meeting_notes" -o ~/transcripts video.mp4

# Verbose output with audio retention
voxtus -v -k -f txt,json https://youtu.be/example

# Pipeline integration
voxtus video.mp4 -f json --stdout | jq '.metadata.duration'

# Overwrite existing files
voxtus video.mp4 -f json --overwrite

Real-world Examples

# Generate data for analysis
voxtus podcast.mp3 -f json -o ~/podcast_analysis

# LLM processing pipeline
voxtus lecture.mp4 -f txt --stdout | llm "summarize this lecture"

# Both formats for different uses
voxtus interview.mp4 -f txt,json -n "interview_2024"

🔧 Options

Option Description
-f, --format FORMAT Output format(s): txt, json (comma-separated)
-n, --name NAME Base name for output files (no extension)
-o, --output DIR Output directory (default: current directory)
-v, --verbose Increase verbosity (-v, -vv for debug)
-k, --keep Keep the downloaded/converted audio file
--overwrite Overwrite existing files without confirmation
--stdout Output to stdout (single format only)
--version Show version and exit

📊 JSON Format Structure

The JSON format includes rich metadata for advanced use cases:

{
  "transcript": [
    {
      "id": 1,
      "start": 0.0,
      "end": 5.2,
      "text": "Welcome to our podcast."
    }
  ],
  "metadata": {
    "title": "Podcast Episode 42",
    "source": "https://youtube.com/watch?v=...",
    "duration": 1523.5,
    "model": "base",
    "language": "en"
  }
}

📦 Packaging

Voxtus is structured as a proper Python CLI package using pyproject.toml with a voxtus entry point.

After installation (via pip or pipx), the voxtus command is available directly from your shell.


🔐 License

Licensed under the GNU Affero General Public License v3.0 or later (AGPL-3.0-or-later).

See LICENSE or visit AGPL-3.0 for more.


🔗 Project Links

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

voxtus-0.1.10.tar.gz (32.5 kB view details)

Uploaded Source

Built Distribution

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

voxtus-0.1.10-py3-none-any.whl (25.3 kB view details)

Uploaded Python 3

File details

Details for the file voxtus-0.1.10.tar.gz.

File metadata

  • Download URL: voxtus-0.1.10.tar.gz
  • Upload date:
  • Size: 32.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for voxtus-0.1.10.tar.gz
Algorithm Hash digest
SHA256 4e759ebe1def0a87e9283a05f065e7999d32a51b7c197e36cc322a8a4a0b22d7
MD5 f31d2b8e01a9f7e6874ebcc046b49e91
BLAKE2b-256 81dfc0de3c359710054b73f423230b7a9f9ef9472336add9a402121e624b1dda

See more details on using hashes here.

Provenance

The following attestation bundles were made for voxtus-0.1.10.tar.gz:

Publisher: publish.yml on johanthoren/voxtus

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file voxtus-0.1.10-py3-none-any.whl.

File metadata

  • Download URL: voxtus-0.1.10-py3-none-any.whl
  • Upload date:
  • Size: 25.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for voxtus-0.1.10-py3-none-any.whl
Algorithm Hash digest
SHA256 642498aca2473d2060d972a6e2e51b7dd82517e248ecff4fc738c6ce3dcd286b
MD5 c3eb073f6f8b0f8a4c1cec84c7e8c928
BLAKE2b-256 08f920f1462858e634cc4605dc90c97214a975a3099756376f536b069af8bf78

See more details on using hashes here.

Provenance

The following attestation bundles were made for voxtus-0.1.10-py3-none-any.whl:

Publisher: publish.yml on johanthoren/voxtus

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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