# Audio & Video to Text — Transcription, SRT, VTT & RAG chunks (`lif_manager/audio-video-transcription`) Actor

Transcribe your audio and video files (MP3, M4A, WAV, WhatsApp voice notes, MP4, MOV...) into text with timestamps, SRT/VTT subtitles, Markdown and RAG-ready chunks. Open-source Whisper runs inside Apify: no third-party API. Strong in Spanish, 90+ languages. From $0.004 per audio minute.

- **URL**: https://apify.com/lif_manager/audio-video-transcription.md
- **Developed by:** [LIF](https://apify.com/lif_manager) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.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?

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 to Text — Transcription with SRT, VTT and RAG chunks

Transcribe **your own audio and video files** — meetings, interviews, classes, podcasts, WhatsApp voice notes, webinars — into text you can use right away:

- 📝 **Clean text in paragraphs**, plus every segment with its **start and end time**.
- 🎬 **SRT and VTT subtitles** ready to upload, with cues of at most two lines and about 7 seconds.
- 🧩 **Ready-to-embed chunks for RAG** that never cut a sentence segment and keep their start and end time, so an agent can cite *"minute 12:40"*.
- 📄 **Markdown and TXT files** for each transcript, with download links in the result.
- 🇪🇸 **Strong in Spanish** and 90+ other languages with automatic detection. Add names and terms (brands, people, places) so they are spelled right.
- 🔒 **Open-source Whisper running inside Apify**: your audio is not sent to OpenAI or any third-party API.

### How to use it

1. Paste direct URLs to your audio/video files, **or** upload files and select the storage they were uploaded to in **Storage with uploaded files** (the Actor runs with limited permissions and can only read the storage you choose).
2. Choose **Accurate** (recommended) or **Fast draft**, and the language (or leave auto-detect).
3. Run it. Leave the input empty to try a demo with a public-domain audio (not charged).

From code or an AI agent, call it through the Apify API or MCP with `{"files": ["https://example.com/meeting.m4a"], "language": "es"}`.

Formats: MP3, WAV, M4A, AAC, OGG, OPUS, FLAC, WEBM, MP4, MOV, MKV, AVI, WMA, AMR, 3GP. Up to 500 MB per file. Links to video platforms (YouTube, TikTok, Instagram…) are not supported: use direct links to files you own.

### Input

| Field | Default | What it does |
|---|---|---|
| `files` | — | Files or direct URLs. |
| `storage` | — | The key-value store with your uploaded files. |
| `mode` | `accurate` | `accurate` (Whisper *small*) or `fast` (Whisper *base*, cheaper, more mistakes). |
| `language` | `auto` | Spoken language, e.g. `es`, `en`, `pt`. |
| `vocabulary` | — | Names and terms that appear in the audio, comma separated. |
| `output_mode` | `transcript` | One item per `transcript` (file), per `segments` or per `chunks`. |
| `chunk_tokens` | 400 | Target chunk size (≈4 characters per token). 0 = no chunks. |
| `chunk_overlap` | 40 | Last segments repeated at the start of the next chunk. |
| `skip_silence` | true | Skips long silences and music (faster, avoids invented text). |
| `save_files` | true | Saves `.srt`, `.vtt`, `.md` and `.txt` per file. |
| `max_minutes_per_file` | 240 | Longer files are skipped and not charged. |

### Output (transcript mode)

```json
{
  "file": "team-meeting.m4a",
  "status": "ok",
  "language": "es",
  "language_probability": 0.99,
  "duration": "42:17",
  "duration_s": 2537.4,
  "minutes": 43,
  "word_count": 6120,
  "text": "Buen día a todos, arrancamos con el presupuesto del trimestre…\n\nSegundo punto: logística…",
  "segments": [{"id": 1, "start": 0.0, "end": 4.2, "text": "Buen día a todos, arrancamos con el presupuesto del trimestre."}],
  "chunks": [{"chunk_id": 1, "start": 0.0, "end": 96.4, "start_ts": "0:00", "end_ts": "1:36", "tokens_est": 398, "text": "…"}],
  "files": {"srt": "https://api.apify.com/v2/key-value-stores/…/records/001-team-meeting.srt", "vtt": "…", "markdown": "…", "text": "…"},
  "mode": "accurate",
  "billing": {"audio-minute": 43},
  "warnings": []
}
```

In **segments** mode each item is one timestamped segment; in **chunks** mode each item is one chunk with `start`, `end`, `start_ts`, `end_ts`, `tokens_est` and `text`, ready for a vector database.

### Pricing

Pay per audio minute (rounded up per file), only for files where speech was found:

| Event | Price | When |
|---|---|---|
| `audio-minute` | $0.010 | Each minute of audio transcribed in **Accurate** mode |
| `audio-minute-fast` | $0.004 | Each minute of audio transcribed in **Fast draft** mode |

Files without speech, failed downloads, unsupported files and the demo are **not charged**. A file that would go over the maximum cost per run you set is skipped before it is transcribed, so you never pay for a cut-off transcript.

### Speed

Accurate mode processes about **3 minutes of audio per minute** with the default 4 GB of memory; Fast mode about 5. Give the run more memory (8 or 16 GB) to go faster: the price per audio minute stays the same.

### Limits (honest list)

- No speaker labels (who said what) yet.
- Very noisy audio, people talking over each other or heavy accents lower the accuracy, as with any speech model. Accurate mode handles them much better than Fast.
- Long silences are billed as part of the file's duration (they are skipped, not removed from the file).
- Only direct links to files: no YouTube, TikTok, Instagram or other platforms.

### Privacy and permissions

- Network access only to download the files you give it. The Apify token is only ever sent to `api.apify.com`.
- Audio is processed in the run's container with open-source models (faster-whisper, MIT license; Whisper models, MIT license) and deleted when the run ends. Results stay in your own dataset and key-value store.
- Limited permissions: the Actor can only read the storage you select.

### Feedback

Got a transcript with errors? Open an issue on the Actor page with a short public sample (or describe the audio) and it will be looked at.

# Actor input Schema

## `files` (type: `array`):

Upload files or paste direct public URLs to audio/video files. Formats: MP3, WAV, M4A, AAC, OGG, OPUS (WhatsApp voice notes), FLAC, WEBM, MP4, MOV, MKV, AVI, WMA, AMR, 3GP. Up to 500 MB per file. If you upload files here, also select the storage they went to below. Leave empty to see a demo.

## `storage` (type: `string`):

The key-value store where your uploaded files are. This Actor runs with limited permissions and can only read the storage you pick here. If you leave the list above empty, every audio/video file in this storage is transcribed.

## `mode` (type: `string`):

Accurate: Whisper 'small' model, good punctuation and names ($0.010 per audio minute). Fast: Whisper 'base' model, cheaper drafts with more mistakes ($0.004 per audio minute).

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

Spoken language. Auto-detect works well; set it when the audio starts with music or with another language.

## `vocabulary` (type: `string`):

Names, brands or technical terms that appear in the audio, separated by commas. Helps spell them right, e.g. 'Mercado Pago, ARCA, Rosario, Dr. Fernández'.

## `output_mode` (type: `string`):

transcript: one item per file with text, timestamped segments and chunks. segments: one item per timestamped segment. chunks: one item per chunk, ready for a vector database.

## `chunk_tokens` (type: `integer`):

Target chunk size, estimated as 4 characters per token. Chunks never cut a sentence segment and keep their start and end time. 0 = no chunks.

## `chunk_overlap` (type: `integer`):

Last segments of a chunk repeated at the start of the next one.

## `skip_silence` (type: `boolean`):

Voice activity detection: skips long silences and music, which makes it faster and avoids invented text. You are still billed per audio minute of the file.

## `save_files` (type: `boolean`):

Saves each transcript as .srt, .vtt, .md and .txt in the run's key-value store, with download links in the result.

## `max_minutes_per_file` (type: `integer`):

Files longer than this are skipped and not charged (cost control).

## Actor input object example

```json
{
  "mode": "accurate",
  "language": "auto",
  "output_mode": "transcript",
  "chunk_tokens": 400,
  "chunk_overlap": 40,
  "skip_silence": true,
  "save_files": true,
  "max_minutes_per_file": 240
}
```

# Actor output Schema

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

No description

## `files` (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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("lif_manager/audio-video-transcription").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("lif_manager/audio-video-transcription").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 '{}' |
apify call lif_manager/audio-video-transcription --silent --output-dataset

```

## MCP server setup

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

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/sHC9eIB69AdkaHZhy/builds/u2aHdKG8ZvBbOXgaX/openapi.json
