# Audio & Video Transcriber: Speech to Text & SRT Subtitles (`manageable_gully/audio-video-transcriber`) Actor

Transcribe audio and video files to text with Whisper: MP3, MP4, WAV, M4A, WebM, OGG and more. 99 languages with auto-detect, timestamps, SRT/VTT subtitles, word timings and translation to English. No API key. Pay per audio minute.

- **URL**: https://apify.com/manageable_gully/audio-video-transcriber.md
- **Developed by:** [WebIntel Tools](https://apify.com/manageable_gully) (community)
- **Categories:** AI, Videos
- **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 minutes

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: Speech to Text, SRT & VTT Subtitles (Whisper)

Turn **audio and video files into text** with OpenAI's open-source **Whisper** speech recognition model. Paste links to MP3, MP4, WAV, M4A, WebM, OGG, FLAC or MOV files (or upload one), and get a clean transcript, **timestamped segments**, **SRT and WebVTT subtitle files**, optional **word-level timestamps** and **translation to English**. 99 languages with automatic language detection. No API key, no OpenAI account, no setup. You pay per minute of audio, from **$0.005 per minute**.

### What you can use it for

- **Podcast and interview transcripts:** searchable text and show notes from episodes and recorded calls.
- **Subtitles and captions:** SRT/VTT files for videos, courses, webinars and social clips, ready to upload to any video player or editor.
- **Meeting and lecture notes:** transcribe recordings, then summarize them with ChatGPT, Claude or your own LLM.
- **AI and RAG pipelines:** feed transcripts with timestamps into vector databases, agents and n8n/Make/Zapier workflows.
- **Translate speech to English:** Spanish, Hebrew, Arabic, French, German, Hindi and 90+ other languages to English text in one step.
- **Content repurposing:** turn videos into blog posts, quotes and newsletter material.

### How to use it

1. Paste one or more **direct file links** (or upload a file). Google Drive files shared as *Anyone with the link* and Dropbox links are converted automatically.
2. Pick **Fast** or **Accurate** quality and, optionally, the spoken language.
3. Click **Start**. Each file becomes one result row with the full text, plus links to the SRT, VTT and TXT files.

### Fast or Accurate?

| | Fast | Accurate |
|---|---|---|
| Model | Whisper base (int8) | Whisper small (int8, beam search 5) |
| Best for | Clear speech, English and major languages | Accents, noisy audio, names, non-English speech |
| Price | **$0.005 / audio minute** | **$0.010 / audio minute** |

### Pricing example

Billing is per started minute of audio in each file (a 30-minute podcast = 30 minutes), plus a tiny start fee. Files that fail to download or contain no speech are **not charged**.
| Job | Fast | Accurate |
|---|---|---|
| One 10-minute interview | $0.05 | $0.10 |
| Ten 30-minute podcast episodes (300 min) | $1.50 | $3.00 |
| 100 hours of lectures (6,000 min) | $30 | $60 |

### Features

- **Every common format:** anything FFmpeg can read, including video files (the audio track is extracted automatically).
- **99 languages** with auto-detect, or force a language for better accuracy.
- **Translate to English** (Whisper's built-in translation task).
- **SRT, WebVTT, TXT and JSON** files saved to the run's key-value store, with direct links in each result.
- **Word-level timestamps** with confidence scores (for karaoke-style captions, editing tools and search).
- **Silence skipping (VAD):** detects speech first, which avoids the "phantom text" Whisper can produce on silence or music.
- **Vocabulary hint:** give it names, brands or jargon to improve spelling.
- **Budget safe:** before transcribing, it checks your run's max cost and skips files that would exceed it.
- **Private by design:** files are processed inside your run and not stored anywhere else.

### Input example

```json
{
  "fileUrls": [{"url": "https://www.archive.org/download/count_monte_cristo_0711_librivox/count_of_monte_cristo_001_dumas.mp3"}],
  "quality": "fast",
  "language": "auto",
  "task": "transcribe",
  "outputFormats": ["srt", "vtt", "txt"],
  "wordTimestamps": false,
  "maxMinutesPerFile": 180
}
```

### Output example (one item per file)

```json
{
  "url": "https://www.archive.org/download/count_monte_cristo_0711_librivox/count_of_monte_cristo_001_dumas.mp3",
  "fileSizeMB": 18,
  "durationSeconds": 1179.5,
  "language": "en",
  "languageProbability": 0.962,
  "quality": "fast",
  "model": "whisper-base",
  "task": "transcribe",
  "transcribedSeconds": 300,
  "truncated": true,
  "billedMinutes": 5,
  "processingSeconds": 34.9,
  "segmentCount": 62,
  "text": "This is a Librevox recording. All Librevox recordings are in the public domain and for more information or to volunteer visit Librevox.org\n\nRecording by Christian Luoma, greenkri.com of the Count of Monte Cristo by Alexander Dumas ...",
  "wordCount": 728,
  "srtUrl": "https://api.apify.com/v2/key-value-stores/<store-id>/records/001-count_of_monte_cristo_001_dumas.srt",
  "vttUrl": "https://api.apify.com/v2/key-value-stores/<store-id>/records/001-count_of_monte_cristo_001_dumas.vtt",
  "txtUrl": "https://api.apify.com/v2/key-value-stores/<store-id>/records/001-count_of_monte_cristo_001_dumas.txt",
  "segments": [
    {
      "start": 0.66,
      "end": 10.86,
      "text": "This is a Librevox recording. All Librevox recordings are in the public domain and for more information or to volunteer visit Librevox.org"
    },
    {
      "start": 12.86,
      "end": 22.3,
      "text": "Recording by Christian Luoma, greenkri.com of the Count of Monte Cristo by Alexander Dumas"
    }
  ]
}
```

This example was run with **Max minutes per file** = 5 on a 19.7-minute file, so only 5 minutes were transcribed and billed (`truncated: true`). With **Word-level timestamps** on, every segment also has a `words` array with `start`, `end`, `word` and `probability`.

Failed files produce a row with `url` and `error` (for example *File has no audio track* or *The link returned a web page, not a media file*) and are not charged.

### Use it from code, n8n or AI agents

Call it through the Apify API (`POST https://api.apify.com/v2/acts/manageable_gully~audio-video-transcriber/run-sync-get-dataset-items`), the Apify Python/JavaScript clients, the Apify n8n/Make/Zapier integrations, or as a tool for AI agents through the Apify MCP server.

### FAQ

**Which links work?** Direct links to media files (they should download the file, not open a web page), Apify key-value store records, S3/GCS signed URLs, Google Drive (shared publicly) and Dropbox share links.

**Can I transcribe YouTube, TikTok or Instagram links?** No. Those are web pages, and downloading from them breaks their terms. Download your own video file and pass its link instead.

**How long can a file be?** Up to 240 minutes and 1 GB per file. Use **Max minutes per file** to cap cost on long recordings.

**How accurate is it?** It's Whisper, the same open-source model family used by many paid services. Accuracy depends on audio quality; use **Accurate** for difficult audio and set the language when you know it.

**Speaker labels (diarization)?** Not yet. Segments are timestamped but not split by speaker.

**Is my audio used for training?** No. Transcription runs locally inside the Actor; nothing is sent to third-party AI APIs.

### More tools from WebIntel Tools

- [PDF & Image OCR to Text/Markdown](https://apify.com/manageable_gully/pdf-ocr-extractor)
- [Web Page to Markdown for LLMs](https://apify.com/manageable_gully/page-to-markdown)
- [URL to PDF & Screenshot](https://apify.com/manageable_gully/url-to-pdf-screenshot)
- [Website Health Audit](https://apify.com/manageable_gully/website-health-audit)

# Actor input Schema

## `fileUrls` (type: `array`):

Direct links to audio or video files (MP3, MP4, WAV, M4A, AAC, FLAC, OGG, OPUS, WebM, MOV, MKV). Google Drive (shared as 'Anyone with the link') and Dropbox share links are converted automatically. Max 1 GB per file. Platform pages such as YouTube or TikTok are not supported.

## `uploadedFile` (type: `string`):

Upload one audio or video file from your computer instead of (or in addition to) links.

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

Fast is good for clear speech in English and major languages. Accurate is better for accents, noisy audio, names and non-English languages.

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

Leave on auto-detect, or pick the language for better accuracy. Whisper supports 99 languages; use the API to pass any ISO 639-1 code.

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

Transcribe keeps the spoken language. Translate outputs English text from any language.

## `outputFormats` (type: `array`):

Saved to the run's key-value store; links are included in each result.

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

Add start/end time and confidence for every word (for karaoke captions, editing, search).

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

Detect speech first and skip long silences and music. Reduces hallucinated text. Billing is by file duration either way.

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

Add start/end timestamps for each sentence-like segment to every result.

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

Optional: names, brands or jargon that appear in the audio (e.g. 'Apify, Kubernetes, Dr. Cohen'). Helps spelling.

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

Longer files are transcribed up to this limit (and billed only up to it).

## Actor input object example

```json
{
  "fileUrls": [
    {
      "url": "https://www.archive.org/download/count_monte_cristo_0711_librivox/count_of_monte_cristo_001_dumas.mp3"
    }
  ],
  "quality": "fast",
  "language": "auto",
  "task": "transcribe",
  "outputFormats": [
    "srt",
    "vtt",
    "txt"
  ],
  "wordTimestamps": false,
  "skipSilence": true,
  "includeSegments": true,
  "maxMinutesPerFile": 180
}
```

# Actor output Schema

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

One item per file: language, duration, full text, timestamped segments and links to SRT/VTT/TXT files.

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

SRT, VTT, TXT and JSON files saved in the run's key-value store.

# 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 = {
    "fileUrls": [
        {
            "url": "https://www.archive.org/download/count_monte_cristo_0711_librivox/count_of_monte_cristo_001_dumas.mp3"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("manageable_gully/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 = { "fileUrls": [{ "url": "https://www.archive.org/download/count_monte_cristo_0711_librivox/count_of_monte_cristo_001_dumas.mp3" }] }

# Run the Actor and wait for it to finish
run = client.actor("manageable_gully/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 '{
  "fileUrls": [
    {
      "url": "https://www.archive.org/download/count_monte_cristo_0711_librivox/count_of_monte_cristo_001_dumas.mp3"
    }
  ]
}' |
apify call manageable_gully/audio-video-transcriber --silent --output-dataset

```

## MCP server setup

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