# Audio & Video Transcriber – Whisper Speech to Text, SRT (`chesapeake/audio-video-transcriber`) Actor

Transcribe audio and video files or podcast RSS episodes to text with Whisper. 99 languages, auto-detect, translate to English, timestamps, SRT/VTT subtitles. MP3, M4A, WAV, MP4 and more. No API key. Pay per minute.

- **URL**: https://apify.com/chesapeake/audio-video-transcriber.md
- **Developed by:** [Chesapeake Commerce](https://apify.com/chesapeake) (community)
- **Categories:** AI, Videos
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 audio minute (standard)s

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Audio & Video Transcriber – Whisper Speech to Text, SRT

Transcribe **audio and video files** (MP3, WAV, M4A, FLAC, OGG, MP4, MOV, WebM...) and **podcast episodes** to text with **OpenAI Whisper** (faster-whisper) running inside the Actor. You get the full transcript, timestamped segments, optional word timings, auto-detected language (99 languages), translation to English, and ready-made **SRT / VTT subtitle files**. No OpenAI key is needed. Pricing is **per audio minute** and starts at **$0.005**.

### Why use it

- **Cheap.** $0.005/min (standard) is cheaper than the Whisper API ($0.006/min), with no API key and no 25 MB upload limit.
- **Podcasts built in.** Paste an RSS feed and it transcribes the latest *N* episodes automatically.
- **Long files.** Multi-hour recordings are decoded in chunks. Big video files work too, since only the audio track is used.
- **Subtitles out of the box.** `.srt`, `.vtt` and `.txt` files are saved for every file.
- **Two quality levels.** *Standard* (Whisper base) is fast and cheap. *Accurate* (Whisper small) gives better punctuation, names and non-English results.
- **Fair billing.** You pay per started minute actually transcribed. Silent or no-speech files and failed downloads are free.

### How to use it

1. Add **direct links** to audio or video files under **Audio/video URLs**: S3, Dropbox, Google Drive (public link), your CDN, or podcast MP3s. You can also add **Podcast RSS feeds**.
2. Choose **Quality** and **Language** (auto-detect by default), and optionally **Translate to English** or **Word timestamps**.
3. Click **Start**. Get `text` and `segments` from the dataset, or download the subtitles from `srtUrl` / `vttUrl`.

Note: video-platform page links (YouTube, TikTok, Instagram, Vimeo, X...) aren't supported. Use a direct media file you have the right to process.

#### Input example

```json
{
  "sources": [{ "url": "https://raw.githubusercontent.com/openai/whisper/main/tests/jfk.flac" }],
  "podcastFeeds": [{ "url": "https://feeds.simplecast.com/54nAGcIl" }],
  "maxEpisodesPerFeed": 1,
  "quality": "standard",
  "language": "auto"
}
```

#### Output example

```json
{
  "url": "https://raw.githubusercontent.com/openai/whisper/main/tests/jfk.flac",
  "status": "OK",
  "model": "whisper-base",
  "durationSeconds": 11.0,
  "language": "en",
  "languageProbability": 0.925,
  "text": "And so my fellow Americans ask not what your country can do for you Ask what you can do for your country",
  "billedMinutes": 1,
  "wordCount": 22,
  "segments": [
    { "start": 0.0, "end": 7.28, "text": "And so my fellow Americans ask not what your country can do for you" },
    { "start": 7.98, "end": 9.98, "text": "Ask what you can do for your country" }
  ],
  "srtUrl": "https://api.apify.com/v2/key-value-stores/…/records/jfk-1.srt",
  "vttUrl": "https://api.apify.com/v2/key-value-stores/…/records/jfk-1.vtt",
  "txtUrl": "https://api.apify.com/v2/key-value-stores/…/records/jfk-1.txt"
}
```

`status` values: `OK`, `NO_SPEECH` (free), `FAILED`, `HTTP_ERROR`, `UNSUPPORTED_SOURCE`, `SKIPPED_ROBOTS_TXT`.

### Pricing (pay per event)

| Event | Price |
|---|---|
| Audio minute transcribed (Standard, Whisper base) | **$0.005** |
| Audio minute transcribed (Accurate, Whisper small) | **$0.012** |

Billing is per started minute of audio transcribed, per file. Example: a 45-minute podcast costs **$0.225** on Standard or **$0.54** on Accurate. Use **Max duration per file** to cap long files. Only the first N minutes are transcribed and billed.

### FAQ

**How fast is it?** Standard transcribes roughly 8–10x faster than real time on the default 4 GB memory. A 1-hour episode takes about 7 minutes. Accurate is about 3x slower.

**Which languages?** All 99 Whisper languages, with automatic detection. Set the **Language** code (for example `de` or `es`) to skip detection on short clips.

**Speaker labels (diarization)?** Not yet. You get timestamps per segment and optionally per word.

**Can I transcribe YouTube videos?** Not through this Actor. Downloading from video platforms breaks their terms. Use your own files or podcast feeds.

**Is my audio stored?** No. Only the transcript and subtitle files are saved in your own run storage.

# Actor input Schema

## `sources` (type: `array`):

Direct links to media files: MP3, M4A, AAC, WAV, FLAC, OGG, OPUS, WEBM, MP4, MOV, MKV and more. Use links to files you have the right to process (your recordings, podcasts, Zoom/Meet exports, S3/Drive/Dropbox links). Video-platform pages such as YouTube or TikTok are not supported.

## `podcastFeeds` (type: `array`):

Podcast RSS feed URLs. The latest episodes (see below) are downloaded from the feed's enclosure links and transcribed.

## `maxEpisodesPerFeed` (type: `integer`):

Newest N episodes per RSS feed.

## `quality` (type: `string`):

Accurate costs more per minute and runs about 3x slower.

## `language` (type: `string`):

"auto" detects the spoken language. Or set a 2-letter code (en, es, de, fr, pt, it, nl, ja, zh, ...) for best results.

## `translateToEnglish` (type: `boolean`):

Output an English translation instead of the original-language transcript (same price).

## `wordTimestamps` (type: `boolean`):

Add start/end times for every word (in segments\[].words).

## `saveSubtitleFiles` (type: `boolean`):

Store subtitle and plain-text files in the key-value store and add download links (srtUrl, vttUrl, txtUrl).

## `maxDurationMinutes` (type: `integer`):

Longer files are transcribed up to this point (flagged truncated). Protects your budget.

## `maxFileSizeMb` (type: `integer`):

Bigger downloads are skipped (not charged).

## `respectRobotsTxt` (type: `boolean`):

Skip URLs whose site disallows automated access (not charged).

## Actor input object example

```json
{
  "sources": [
    {
      "url": "https://raw.githubusercontent.com/openai/whisper/main/tests/jfk.flac"
    }
  ],
  "maxEpisodesPerFeed": 1,
  "quality": "standard",
  "language": "auto",
  "translateToEnglish": false,
  "wordTimestamps": false,
  "saveSubtitleFiles": true,
  "maxDurationMinutes": 180,
  "maxFileSizeMb": 500,
  "respectRobotsTxt": true
}
```

# Actor output Schema

## `results` (type: `string`):

One item per file with the transcript text, timestamped segments, detected language and links to subtitle files.

## `files` (type: `string`):

SRT, VTT and TXT files in the run's default key-value store (also contains the run INPUT record).

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "sources": [
        {
            "url": "https://raw.githubusercontent.com/openai/whisper/main/tests/jfk.flac"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("chesapeake/audio-video-transcriber").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "sources": [{ "url": "https://raw.githubusercontent.com/openai/whisper/main/tests/jfk.flac" }] }

# Run the Actor and wait for it to finish
run = client.actor("chesapeake/audio-video-transcriber").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "sources": [
    {
      "url": "https://raw.githubusercontent.com/openai/whisper/main/tests/jfk.flac"
    }
  ]
}' |
apify call chesapeake/audio-video-transcriber --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,chesapeake/audio-video-transcriber"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/8yWggJSSeQEODonl7/builds/ybf9iDhDXYciZbnpJ/openapi.json
