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

Transcribe audio and video files, podcast RSS feeds and Apple Podcasts links with Whisper. Dropbox, Drive and OneDrive links work. SRT, VTT and TXT files, word timestamps, 99 languages, translate to English. From $0.0085 per audio minute; failed files are free.

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

## Pricing

from $6.50 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

**Audio & Video Transcriber** turns audio and video files, podcast RSS feeds and Apple Podcasts shows into accurate text with timestamps, using OpenAI's open-source **Whisper** speech recognition model running inside the Actor. You get the full transcript, timed segments, optional word-level timestamps and ready-made **SRT, VTT and TXT** subtitle files for every file.

Paste direct file links, Dropbox, Google Drive or OneDrive share links, a podcast feed or an Apple Podcasts link. It detects 99 languages automatically and can translate any of them into English.

✅ **Pay per result: from $0.0085 per audio minute** ($0.51 per hour) · 🆓 **Files that fail are never charged** · 🔑 No API key, no OpenAI account, audio is never sent to a third-party AI service

[▶ Try it with one click](#how-to-use-it) · [📄 Real example output](#output-example-from-a-real-public-run) · [💲 Pricing](#how-much-does-it-cost-to-transcribe-audio-and-video) · [🔌 API & integrations](#integrations-api-ai-agents-make-zapier) · [❓ FAQ](#faq) · [🛟 Support](#support-reliability-and-feature-requests)

### What does Audio & Video Transcriber do?

- 🎙️ **Speech to text for audio and video**: MP3, M4A, WAV, OGG, OPUS, FLAC, AAC, WebM, MP4, MOV, MKV and anything else FFmpeg can read
- 📻 **Whole podcasts in one run**: give a podcast RSS feed or an Apple Podcasts link and it transcribes the newest episodes (or every episode since a date), with episode title, date and page link on each row
- 🔗 **Share links just work**: Dropbox, Google Drive and OneDrive links are converted to direct downloads for you
- 🎬 **Subtitles included**: SRT and VTT files with timings, plus a clean TXT transcript and an optional JSON file, each with a download link
- 🌍 **99 languages, auto-detected**, or translate any language straight into English text and subtitles
- ⏱️ **Timestamps**: segment timings on every row and optional word-level timestamps with confidence scores
- 🧠 **Two models**: *Standard* (Whisper base, fast and cheap) and *High accuracy* (Whisper small with beam search) for difficult audio, accents and names
- 🏷️ **Vocabulary hint**: give product names, people or jargon so they are spelled correctly
- 🛡️ **Spending control**: per-file minute cap, file size cap, and it stops cleanly at your *Max cost per run*

### Use cases

- **Podcasters and media teams**: transcripts and show notes for every episode, subtitles for video clips
- **Marketers and SEO teams**: turn webinars, interviews and podcasts into blog posts, quotes and searchable text
- **Researchers and journalists**: transcribe interviews, focus groups and public speeches with timestamps for citations
- **AI and RAG builders**: feed spoken content into LLMs, vector databases and AI agents
- **Accessibility**: captions (SRT/VTT) for course videos, product demos and social clips
- **Monitoring**: schedule a podcast feed and get new episodes transcribed automatically

### Why choose this transcriber?

| | This Actor | Typical Store transcribers |
|---|---|---|
| Podcast RSS feeds and Apple Podcasts links | ✅ newest N episodes or all since a date | Usually single files only |
| Dropbox, Google Drive, OneDrive share links | ✅ converted automatically | Often need a direct link |
| SRT + VTT + TXT (+ JSON) files with download links | ✅ every file | Often text only, or extra cost |
| Word-level timestamps, translation to English, vocabulary hint | ✅ included, no surcharge | Mixed |
| Price | **$0.0085 per minute** Standard, $0.012 High accuracy | Most charge $0.006 to $0.05 per minute; some add per-file or usage fees |
| Failed files | **Free** | Varies |

### How to use it

1. Click **Try for free**. The input is already filled in with two short public-domain speeches (26 s and 1 min 44 s). Press **Start**: it finishes in under a minute and costs about $0.03.
2. Replace the links with your own: files, share links, podcast feeds or Apple Podcasts show or episode links. You can also upload a text file with one link per line.
3. Pick the model (*Standard* or *High accuracy*), the language (or *Auto-detect*) and the subtitle formats.
4. For podcasts, set **Max episodes per feed** or **Only episodes published since**.
5. Download the results as JSON, CSV or Excel, or open the SRT/VTT/TXT links in each row.

#### Input example

```json
{
  "sources": [
    { "url": "https://upload.wikimedia.org/wikipedia/commons/4/46/1941_Roosevelt_speech_pearlharbor_p1.ogg" },
    { "url": "https://upload.wikimedia.org/wikipedia/commons/3/30/Wilson_-_Address_to_the_American_Indians_edit.ogg" }
  ]
}
```

Other options: `model` (`standard` or `accurate`), `language` (`auto`, `en`, `es`, `de`, ...), `translateToEnglish`, `subtitleFormats` (`srt`, `vtt`, `txt`, `json`), `includeSegments`, `wordTimestamps`, `vocabularyHint`, `skipSilence`, `maxEpisodesPerFeed`, `episodesSince`, `maxFiles`, `maxMinutesPerFile`, `maxFileSizeMb`.

#### Output example (from a real public run)

First row of the [public example run](https://console.apify.com/view/runs/2hLtjnXcmrKoB7YwC) (segments shortened with `...`):

```json
{
  "source": "https://upload.wikimedia.org/wikipedia/commons/4/46/1941_Roosevelt_speech_pearlharbor_p1.ogg",
  "mediaUrl": "https://upload.wikimedia.org/wikipedia/commons/4/46/1941_Roosevelt_speech_pearlharbor_p1.ogg",
  "title": "1941 Roosevelt speech pearlharbor p1",
  "status": "ok",
  "language": "en",
  "languageProbability": 0.983,
  "task": "transcribe",
  "model": "whisper-base",
  "durationSeconds": 26.1,
  "transcribedSeconds": 26.1,
  "truncated": false,
  "minutesCharged": 1,
  "fileSizeMb": 0.36,
  "wordCount": 30,
  "text": "Yesterday, December 7, 1941, date which will live in infamy, at its states of America, was suddenly and deliberately attacked by naval and air forces of the Empire of Japan.",
  "files": {
    "srt": "https://api.apify.com/v2/key-value-stores/ZdQQE7BD9dUkftgUO/records/001-1941-roosevelt-speech-pearlharbor-p1.srt?signature=XCYLk4v1RdNKFghYQE2j",
    "vtt": "https://api.apify.com/v2/key-value-stores/ZdQQE7BD9dUkftgUO/records/001-1941-roosevelt-speech-pearlharbor-p1.vtt?signature=cp3OUD1AHYBBruqrAmGO",
    "txt": "https://api.apify.com/v2/key-value-stores/ZdQQE7BD9dUkftgUO/records/001-1941-roosevelt-speech-pearlharbor-p1.txt?signature=KDSJfTKrsVWNKksCSiVe"
  },
  "processingSeconds": 2.4,
  "segments": [
    { "id": 1, "start": 0.24, "end": 13.26, "text": "Yesterday, December 7, 1941, date which will live in infamy," },
    ...
  ]
}
```

Full results: [JSON](https://api.apify.com/v2/datasets/bmqizviLxJDq65IXg/items?format=json\&clean=1) · [CSV](https://api.apify.com/v2/datasets/bmqizviLxJDq65IXg/items?format=csv\&clean=1) · [SRT file](https://api.apify.com/v2/key-value-stores/ZdQQE7BD9dUkftgUO/records/001-1941-roosevelt-speech-pearlharbor-p1.srt?signature=XCYLk4v1RdNKFghYQE2j). This 1941 recording is noisy; the *High accuracy* model handles hard audio better.

Podcast rows also carry `podcastTitle`, `episodeTitle`, `episodePublishedAt`, `episodePageUrl`, `episodeGuid` and `feedUrl`. With `wordTimestamps` on, each segment has a `words` list with `start`, `end`, `word` and `probability`.

| Field | Meaning |
|---|---|
| `status` | `ok` or `failed` (failed rows have an `error` and are free) |
| `text` | Full transcript |
| `segments` | Timed segments (`start`, `end` in seconds, `text`) |
| `language`, `languageProbability` | Detected language and confidence |
| `durationSeconds`, `transcribedSeconds`, `truncated` | File length, how much was transcribed, and whether your minute cap cut it short |
| `minutesCharged` | Started minutes billed for this file |
| `files` | Download links for the SRT, VTT, TXT and JSON files |

### How much does it cost to transcribe audio and video?

Pay-per-event pricing: you pay per started minute of audio actually transcribed. No platform usage charges on top.

| Event | Price | Notes |
|---|---|---|
| **Audio minute, Standard** (Whisper base) | **$0.0085** | Silver $0.0075, Gold and above $0.0065 |
| Audio minute, High accuracy (Whisper small, beam search) | $0.012 | Silver $0.0105, Gold and above $0.009 |
| Run start | $0.0005 per GB of memory | Default 4 GB = $0.002 per run |

Minutes are counted per file and rounded up (a 26-second clip is 1 minute; a 61-minute episode is 62).

**Worked examples (Free/Starter prices, default memory):**

| Job | Calculation | Total |
|---|---|---|
| One-click example (26 s + 1 min 44 s) | 1 + 2 = 3 min × $0.0085 + $0.002 start | **$0.0275** |
| One 60-minute podcast episode, Standard | 60 × $0.0085 + $0.002 | **$0.512** |
| 10 interviews of 45 minutes, High accuracy | 450 × $0.012 + $0.002 | **$5.402** |
| 1,000 voice notes of 30 seconds | 1,000 × $0.0085 + $0.002 | **$8.502** |

**Never charged:** files that fail (404, private link, not audio, blocked site, decode error). Translation, word timestamps, subtitle files and the vocabulary hint cost nothing extra. Cap spending with **Max cost per run**: the Actor shortens or skips files to stay within it and tells you which ones (`truncated`). Apify's Free plan includes $5 of monthly credit.

### Integrations (API, AI agents, Make, Zapier)

**API**: transcribe and get results in one call:

```bash
curl -X POST "https://api.apify.com/v2/acts/chris_elder~audio-video-transcriber/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \
  -d '{"sources":[{"url":"https://upload.wikimedia.org/wikipedia/commons/4/46/1941_Roosevelt_speech_pearlharbor_p1.ogg"}]}'
```

```python
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("chris_elder/audio-video-transcriber").call(run_input={
    "sources": [{"url": "https://feeds.megaphone.fm/NATIONALAERONAUTICSANDSPACEADMINISTRATION1776343825"}],
    "maxEpisodesPerFeed": 2,
})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(row.get("episodeTitle"), row.get("wordCount"), row.get("files", {}).get("srt"))
```

**AI agents (MCP)**: add `https://mcp.apify.com/?tools=chris_elder/audio-video-transcriber` to Claude, Cursor, VS Code or any MCP client, and your agent can transcribe any audio or video link.

**Make, Zapier, n8n**: use the Apify app's **Run Actor** action with `chris_elder/audio-video-transcriber`, then send the text to Google Docs, Notion, Slack or an LLM step. **Schedules** plus **Only episodes published since** give you automatic transcripts of new podcast episodes; **webhooks** fire when a run finishes.

### Limits and good to know

- **Speed (measured on Apify at the default 4 GB):** Standard transcribed 20 minutes of podcast audio in about 2 minutes 20 seconds; High accuracy with word timestamps did 10 minutes in about 5 minutes 20 seconds. More memory gives more CPU and faster runs at the same price per minute.
- **Not supported:** YouTube, TikTok, Instagram, Facebook, X, Vimeo, Spotify and SoundCloud page links. Their terms do not allow downloading, so the Actor returns a clear (free) error. Use your own files or a direct, shared or RSS link.
- **No speaker labels (diarization)** yet. Open an issue if you need it.
- Defaults: 240 minutes per file, 2 GB per file, 3 episodes per feed, 100 files per run. All adjustable.
- Whisper can occasionally mishear names or produce a short repeated phrase on long silence or music. *High accuracy* and the vocabulary hint reduce this.
- Files are processed one at a time, in the order given.

### Is it legal?

The Actor downloads only the files and feeds you give it, one request per file, and transcribes them on Apify's servers. It doesn't crawl websites, log in or bypass protection, and it refuses links to platforms whose terms forbid downloading. Make sure you have the right to transcribe the recordings (your own content, public-domain or openly licensed recordings, or content you are licensed to use). Recordings can contain personal data; you are responsible for having a lawful basis to process it. See Apify's guide: [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

### FAQ

**Which languages are supported?** Whisper detects and transcribes 99 languages. Pick one in *Language* to skip detection, or turn on *Translate to English* to get English text and subtitles from any language.

**Can I transcribe a whole podcast?** Yes. Paste the RSS feed or the Apple Podcasts show link and set *Max episodes per feed* (or a start date). Each episode is one row with its title, date and links.

**How accurate is it?** *Standard* (Whisper base) is good for clear speech such as podcasts, webinars and voice notes. Use *High accuracy* (Whisper small with beam search) for noisy audio, strong accents or technical vocabulary.

**Is my audio sent to OpenAI or another AI service?** No. The open-source Whisper model runs inside the Actor on Apify. Nothing is sent to third-party AI APIs.

**How do I get subtitles for a video?** Give the video file link (MP4, MOV, MKV, WebM). Each row has SRT and VTT download links you can upload to your video player or editor.

**What happens if a file fails?** You get a row with `status: "failed"` and the reason, and you are not charged for it. The run carries on with the other files.

### Support, reliability and feature requests

- **Failed files are free.** You pay only for minutes transcribed.
- **Tested on real recordings before every release** (public-domain speeches, a NASA podcast feed and Apple Podcasts link, video files, broken and blocked links).
- **Issues answered within 2 business days.** Open an issue on the **Issues** tab with a sample link.
- **Feature requests welcome**: open an issue titled "Feature request: ...".
- Built by GPT Shop Ltd with AI-assisted development; every release is reviewed and tested before it ships.

### More tools from GPT Shop Ltd

- [AI Image Upscaler](https://apify.com/chris_elder/ai-image-upscaler): batch 2x, 3x and 4x Real-ESRGAN upscaling for image links or datasets
- [PDF to Markdown & Text Converter](https://apify.com/chris_elder/pdf-to-markdown): clean Markdown and text from PDFs, with OCR for scanned pages
- [Image to Text OCR](https://apify.com/chris_elder/image-to-text-ocr): bulk text extraction from images in 100+ languages
- [RSS Feed Reader](https://apify.com/chris_elder/rss-feed-reader): items from many RSS and Atom feeds as clean rows
- All tools: [apify.com/chris_elder](https://apify.com/chris_elder)

# Actor input Schema

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

One link per row. Supported: direct audio/video file links (MP3, M4A, WAV, OGG, OPUS, FLAC, MP4, MOV, WEBM, MKV and more), Dropbox, Google Drive and OneDrive share links, podcast RSS feeds and Apple Podcasts show or episode pages. YouTube, TikTok, Instagram, Facebook, X, Vimeo, Spotify and SoundCloud links are not supported.

## `model` (type: `string`):

Standard is fast and good for clear speech. High accuracy handles accents, noise, names and non-English audio better and costs more per minute.

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

Leave on Auto-detect, or set the language to skip detection and improve accuracy. Whisper supports about 99 languages; the API also accepts any other ISO 639-1 code.

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

Output an English translation instead of the original-language transcript. Same price.

## `subtitleFormats` (type: `array`):

Each transcript is also saved as these files in the run's key-value store, with download links in the dataset. Free.

## `includeSegments` (type: `boolean`):

Adds a segments array (start, end, text) to each row. Turn off for a smaller dataset.

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

Adds the start and end time and confidence of every word. Useful for captions and editing tools. Slower, same price.

## `vocabularyHint` (type: `string`):

Optional. Names, brands or terms that appear in the audio, e.g. "Apify, GPT Shop, Kubernetes". Helps Whisper spell them correctly.

## `skipSilence` (type: `boolean`):

Voice activity detection skips long silences, which avoids made-up text in quiet parts. Billing still uses the file's audio length.

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

For RSS feeds and Apple Podcasts show pages: how many of the newest episodes to transcribe.

## `episodesSince` (type: `string`):

Optional, for podcast feeds. Skips older episodes.

## `maxFiles` (type: `integer`):

Safety limit on the number of media files processed.

## `maxMinutesPerFile` (type: `integer`):

Longer files are transcribed up to this length and marked truncated. You are only charged for the minutes transcribed.

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

Files larger than this are skipped (free).

## Actor input object example

```json
{
  "sources": [
    {
      "url": "https://upload.wikimedia.org/wikipedia/commons/4/46/1941_Roosevelt_speech_pearlharbor_p1.ogg"
    },
    {
      "url": "https://upload.wikimedia.org/wikipedia/commons/3/30/Wilson_-_Address_to_the_American_Indians_edit.ogg"
    }
  ],
  "model": "standard",
  "language": "auto",
  "translateToEnglish": false,
  "subtitleFormats": [
    "srt",
    "vtt",
    "txt"
  ],
  "includeSegments": true,
  "wordTimestamps": false,
  "skipSilence": true,
  "maxEpisodesPerFeed": 3,
  "maxFiles": 100,
  "maxMinutesPerFile": 240,
  "maxFileSizeMb": 2000
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

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

No description

## `summary` (type: `string`):

No description

# 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://upload.wikimedia.org/wikipedia/commons/4/46/1941_Roosevelt_speech_pearlharbor_p1.ogg"
        },
        {
            "url": "https://upload.wikimedia.org/wikipedia/commons/3/30/Wilson_-_Address_to_the_American_Indians_edit.ogg"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("chris_elder/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://upload.wikimedia.org/wikipedia/commons/4/46/1941_Roosevelt_speech_pearlharbor_p1.ogg" },
        { "url": "https://upload.wikimedia.org/wikipedia/commons/3/30/Wilson_-_Address_to_the_American_Indians_edit.ogg" },
    ] }

# Run the Actor and wait for it to finish
run = client.actor("chris_elder/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://upload.wikimedia.org/wikipedia/commons/4/46/1941_Roosevelt_speech_pearlharbor_p1.ogg"
    },
    {
      "url": "https://upload.wikimedia.org/wikipedia/commons/3/30/Wilson_-_Address_to_the_American_Indians_edit.ogg"
    }
  ]
}' |
apify call chris_elder/audio-video-transcriber --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,chris_elder/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/v3LzYYIAJCALkJKe0/builds/CpaRazapNJzFRyLs7/openapi.json
