# Audio & Video Transcriber (Whisper): MP3, MP4, Podcasts to Text (`pavel.tashev/audio-video-transcriber`) Actor

Transcribe audio and video files and podcast episodes to text, SRT and VTT subtitles with OpenAI Whisper. No API key, files never leave your run, pay per audio minute.

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

## Pricing

from $15.00 / 1,000 audio minute transcribeds

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### What does Audio & Video Transcriber do?

**Transcribe audio and video files and podcast episodes to text, SRT and VTT subtitles with OpenAI Whisper — no API key, pay per audio minute.** Give it direct links to MP3, M4A, WAV, MP4, MOV or WEBM files, or a podcast RSS feed, and it returns the full transcript, timestamped segments, the detected language and ready-to-use subtitle files.

Whisper runs **inside your Apify run**, so your files are never sent to a third-party speech API. Because it runs on the Apify platform, you also get API access, scheduling, webhooks, integrations (Make, Zapier, n8n, LangChain) and run monitoring out of the box, and AI agents can call it through the Apify MCP server.

### Why use Audio & Video Transcriber?

- **No API keys or accounts.** Paste a link and click Start.
- **Text, segments and subtitles in one run.** Plain text for search and AI, timestamps for editing, SRT and VTT files for video players.
- **Podcast feeds built in.** Add an RSS feed and the newest episodes are transcribed automatically; schedule it to transcribe new episodes as they come out.
- **Private by design.** Files are processed inside your run and deleted afterwards. Nothing is sent to third-party APIs.
- **Fair billing.** You pay per started minute of audio that was transcribed. Broken links, web pages, silent files and files over your limits are never charged.
- **~99 languages**, with automatic language detection and an option to translate speech into English.

Typical uses: meeting and interview notes, podcast show notes and SEO pages, subtitles for videos, searchable archives of lectures and webinars, and feeding spoken content into RAG pipelines and AI agents.

### How to transcribe audio and video to text

1. Click **Try for free**.
2. Paste direct file links into **Audio and video file links**, or add a **Podcast RSS feed**.
3. Optionally choose the **Language** (automatic by default) and whether to **translate to English**.
4. Click **Start**. The status line shows progress, for example "Transcribing 2/5: episode.mp3 — 12:30 of 45:00".
5. Open the **Output** tab: **Overview** lists every file with its duration, billed minutes and subtitle link; **Transcript** shows the text.

### Input

| Field | Description | Default |
|---|---|---|
| **Audio and video file links** | Direct links to MP3, M4A, WAV, FLAC, OGG, OPUS, AAC, MP4, M4V, MOV, WEBM or MKV files. Dropbox and Google Drive share links are converted automatically. | – |
| **Podcast RSS feeds** | Feed links; the newest episodes are transcribed. | – |
| **Episodes per feed** | 1–50 | 3 |
| **Language** | Automatic detection, or one of 25 common languages. Whisper recognizes about 99 languages in automatic mode. | automatic |
| **Task** | Transcribe in the original language, or translate to English | transcribe |
| **Include timestamped segments** | Phrases with start and end times in seconds | on |
| **Create SRT and VTT subtitle files** | Saved to the run's key-value store and linked in the output | on |
| **Maximum minutes per file** | Longer files are skipped and not charged | 240 |
| **Maximum file size (MB)** | Larger files are skipped and not charged | 1024 |

Example input:

```json
{
  "mediaUrls": [
    { "url": "https://archive.org/download/newhampshire_1902_librivox/newhampshire_13_frost_64kb.mp3" }
  ],
  "podcastFeeds": ["https://www.nasa.gov/feeds/podcasts/small-steps-giant-leaps"],
  "maxEpisodesPerFeed": 1
}
```

### Output

Each file becomes one item in the dataset. A real example from a run on 14 September 2026 (text and segments shortened):

```json
{
  "url": "https://traffic.megaphone.fm/NATIONALAERONAUTICSANDSPACEADMINISTRATION1980847908.mp3",
  "source": "podcast",
  "title": "Passing Down Knowledge",
  "podcast": "Small Steps, Giant Leaps",
  "publishedAt": "2026-09-02T14:11:00+00:00",
  "status": "success",
  "language": "en",
  "languageProbability": 0.998,
  "task": "transcribe",
  "durationSeconds": 996.3,
  "billedMinutes": 17,
  "text": "When I learned that it was okay to not know everything, that it's okay to ask questions and ask for understanding, allow myself to be mentored, that's when opportunities presented themselves...",
  "wordCount": 2792,
  "segments": [
    { "start": 0.46, "end": 4.36, "text": "When I learned that it was okay to not know everything," },
    { "start": 4.36, "end": 6.1, "text": "that it's okay to ask questions" }
  ],
  "srtUrl": "https://api.apify.com/v2/key-value-stores/.../records/002-NATIONALAERONAUTICSANDSPACEADMINISTRATION1980847908.srt",
  "vttUrl": "https://api.apify.com/v2/key-value-stores/.../records/002-NATIONALAERONAUTICSANDSPACEADMINISTRATION1980847908.vtt",
  "model": "whisper-small",
  "processingSeconds": 288.9
}
```

A file that cannot be transcribed is still listed, with `"status": "failed"`, `"billedMinutes": 0` and a plain-language `error`, for example *"This is a web page, not a media file. Use a direct link to the audio or video file."*

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

### Output fields

| Field | Meaning |
|---|---|
| `url`, `source`, `title`, `fileName` | The link, `file` or `podcast`, the episode title or file name |
| `podcast`, `feedUrl`, `publishedAt` | Podcast name, feed and episode date (podcast items only) |
| `status`, `error` | `success`, `failed` or `truncated` (stopped at your maximum cost per run) |
| `language`, `languageProbability`, `task` | Detected or chosen language, detection confidence, transcribe or translate |
| `durationSeconds`, `billedMinutes` | Media length and the minutes charged |
| `text`, `wordCount` | Full transcript |
| `segments` | `[{start, end, text}]` in seconds |
| `srtUrl`, `vttUrl` | Subtitle files |
| `model`, `processingSeconds`, `processedAt` | Engine and timing |

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

This Actor uses **pay-per-event pricing**: you pay per **started minute of audio** that was transcribed (a 2 minute 1 second file is 3 minutes). Platform compute is included in the price. Failed downloads, web pages, files without speech and files over your limits cost nothing. See the **Pricing** tab for the current price per minute. You can set a maximum cost per run: the Actor transcribes only as many minutes as your budget allows and marks the last file as `truncated`.

### Tips

- **Speed:** at the default 8 GB of memory, transcription runs about 3× faster than real time (a 17-minute episode took under 5 minutes). More memory gives more CPU and finishes sooner; files are processed one after another.
- **Use direct file links.** A link that opens a player page returns HTML, not audio. On podcast hosting sites, copy the episode's download link or use the RSS feed.
- **Set the language** for short clips or heavy accents if automatic detection picks the wrong one.
- **Long recordings:** files over 2 hours need at least 4 GB of memory.
- **New episodes on a schedule:** run daily with **Episodes per feed** set to 1.

### What is not supported

- **YouTube, TikTok, Spotify, Instagram, Vimeo, SoundCloud and other platform pages.** Their terms do not allow downloading, so this Actor only accepts direct links to files you have the right to use.
- Speaker identification (who said what) is not included yet. Tell us in the **Issues** tab if you need it.
- Password-protected or login-only links.

### Related tools

Combine with these tools for content and AI pipelines:

- [PDF Text Extractor & Document to Markdown](https://apify.com/pavel.tashev/doc-to-markdown): convert PDF, Word, PowerPoint and Excel files (including scans) to Markdown for AI pipelines.
- [RSS Feed Reader & Finder](https://apify.com/pavel.tashev/rss-feed-reader): read RSS, Atom and JSON feeds or find the feed of any website.

### FAQ and support

**Which model is used?** [Whisper](https://github.com/openai/whisper) "small" by OpenAI (MIT licence), running through [faster-whisper](https://github.com/SYSTRAN/faster-whisper) on CPU. Accuracy is best for major languages with clear audio.

**Is my data stored?** Files are downloaded into your run, transcribed and deleted. Transcripts and subtitles are saved only to your own Apify storage.

**Can I transcribe any recording?** You must have the right to transcribe the content you submit, for example your own recordings, public-domain material or content you are licensed to use.

**Something went wrong?** Open an issue in the **Issues** tab with the link (if it is public) and what you expected. Custom transcription pipelines are available on request.

# Actor input Schema

## `mediaUrls` (type: `array`):

Direct links to audio or video files: MP3, M4A, WAV, FLAC, OGG, OPUS, AAC, MP4, M4V, MOV, WEBM or MKV. Dropbox and Google Drive share links work too. Web pages such as YouTube, TikTok or Spotify links are not supported.

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

RSS feed links of podcasts. The newest episodes of each feed are transcribed.

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

How many of the newest episodes to transcribe from each podcast feed.

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

Spoken language. Leave on automatic detection unless the language is misdetected, for example in short clips.

## `task` (type: `string`):

Transcribe in the original language, or translate the speech into English text.

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

Add a list of phrases with start and end times in seconds.

## `includeSubtitles` (type: `boolean`):

Save subtitle files to the run's key-value store and link them in the output.

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

Longer files are skipped and not charged. Files over 2 hours need at least 4 GB of memory.

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

Larger files are skipped and not charged.

## Actor input object example

```json
{
  "mediaUrls": [
    {
      "url": "https://archive.org/download/newhampshire_1902_librivox/newhampshire_13_frost_64kb.mp3"
    }
  ],
  "podcastFeeds": [],
  "maxEpisodesPerFeed": 3,
  "language": "auto",
  "task": "transcribe",
  "includeSegments": true,
  "includeSubtitles": true,
  "maxMinutesPerFile": 240,
  "maxFileSizeMb": 1024
}
```

# Actor output Schema

## `transcripts` (type: `string`):

No description

## `subtitles` (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 = {
    "mediaUrls": [
        {
            "url": "https://archive.org/download/newhampshire_1902_librivox/newhampshire_13_frost_64kb.mp3"
        }
    ],
    "podcastFeeds": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("pavel.tashev/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 = {
    "mediaUrls": [{ "url": "https://archive.org/download/newhampshire_1902_librivox/newhampshire_13_frost_64kb.mp3" }],
    "podcastFeeds": [],
}

# Run the Actor and wait for it to finish
run = client.actor("pavel.tashev/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 '{
  "mediaUrls": [
    {
      "url": "https://archive.org/download/newhampshire_1902_librivox/newhampshire_13_frost_64kb.mp3"
    }
  ],
  "podcastFeeds": []
}' |
apify call pavel.tashev/audio-video-transcriber --silent --output-dataset

```

## MCP server setup

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