Video & Audio Transcriber avatar

Video & Audio Transcriber

Pricing

from $40.00 / 1,000 minute of media transcribeds

Go to Apify Store
Video & Audio Transcriber

Video & Audio Transcriber

Transcribe video, audio, and podcasts from 1,800+ sites with OpenAI Whisper (faster-whisper). Get text, timestamped segments, SRT and VTT subtitles. Export as JSON, CSV, or Excel.

Pricing

from $40.00 / 1,000 minute of media transcribeds

Rating

0.0

(0)

Developer

ParseBird

ParseBird

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

16 hours ago

Last modified

Categories

Share

Video & Audio Transcriber

Video & Audio Transcriber turns any video, audio file, or podcast into text using OpenAI Whisper (the fast faster-whisper implementation) running inside the Actor — no API key, no OpenAI account. Paste a YouTube, TikTok, Instagram, Facebook, X (Twitter), SoundCloud, Rumble, Dailymotion, or podcast RSS URL — or a direct .mp3 / .mp4 link — and get back a full transcript, timestamped segments, and ready-to-use SRT and VTT subtitle files.

Speech-to-text for 1,800+ sites with OpenAI Whisper — pick the tiny, base, or small model, force a language or translate to English, cap minutes per item for cost control, and export transcripts, timestamps, and SRT/VTT subtitles as JSON, CSV, or Excel.

Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this Actor.

Actor: parsebird/video-audio-transcriber (Apify). Transcribes video/audio/podcasts with OpenAI Whisper (faster-whisper), locally, no API key. Call it with ApifyClient.
Input:
{
"mediaUrls": ["https://www.youtube.com/watch?v=jNQXAC9IVRw", "https://feed.syntax.fm/rss", "https://traffic.megaphone.fm/ABC.mp3"],
"model": "base", // tiny | base | small
"language": "", // "" = auto-detect, else ISO code: en, es, pt, de, fr, ...
"translateToEnglish": false, // true -> English translation instead of source language
"maxMinutesPerItem": 120, // per-URL cap; you are billed per transcribed minute
"maxEpisodesPerFeed": 1, // newest N episodes taken from each podcast feed
"cookies": "", // Netscape cookies.txt for YouTube bot-gate / restricted content
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}
mediaUrls is required (max 50 per run). Feeds and direct files are fetched directly; the proxy is used only for social networks.
Output: one dataset item per media URL — text, segments[{start,end,text}], srt, vtt, srtFileUrl, vttFileUrl, language, languageProbability, title, uploader, publishedAt, thumbnailUrl, durationSeconds, transcribedSeconds, billedMinutes, wordCount, model, task, sourceType, platform, url, inputUrl, error.
Pricing: pay-per-event, tiered — from $0.04 to $0.05 per transcribed minute. Failed items are never charged.
API docs: https://apify.com/parsebird/video-audio-transcriber/api Token: https://console.apify.com/account/integrations

What does Video & Audio Transcriber do?

This Actor is a video and audio transcription tool and an automatic subtitle generator. It downloads the audio from the URL you give it, runs OpenAI's Whisper speech-recognition model on it, and returns clean, structured text.

  • 🎧 1,800+ supported sites — anything yt-dlp can open: YouTube and YouTube Shorts, TikTok, Instagram Reels, Facebook video, X (Twitter), SoundCloud, Dailymotion, Rumble, Bilibili, Reddit, and more.
  • 📰 Podcast feeds — pass an RSS or Atom feed URL and the Actor transcribes the newest maxEpisodesPerFeed episodes automatically.
  • 📁 Direct media files — point it at an .mp3, .mp4, .wav, .m4a, .flac, .ogg, .webm, or .mov URL and it transcribes the file directly, no proxy needed.
  • 🧠 OpenAI Whisper, three sizestiny (fastest), base (balanced), small (most accurate). Models are baked into the Actor image, so nothing downloads at run time.
  • 🌍 99+ languages — auto-detect the spoken language, or force one with an ISO code. Optionally translate to English instead of transcribing.
  • 🎬 Subtitles included — every result contains an srt and a vtt string plus direct download links to the stored .srt and .vtt files.
  • ⏱️ Timestamped segmentssegments: [{ start, end, text }] with seconds-precision timing for captions, search, or clipping.
  • 💸 Cost controlmaxMinutesPerItem caps how much of each item is transcribed; you are billed only for transcribed minutes, and failed items are never charged.

Why use this instead of the OpenAI API?

The OpenAI audio API needs an API key, bills separately, and caps upload size at 25 MB. This Actor runs Whisper inside the container with faster-whisper (a CTranslate2 reimplementation that is several times faster and lighter than the reference model), pulls the media for you from any supported site, and hands back subtitles and timestamps in one step — all billed through your existing Apify account.

Supported inputs

Input typeExampleNotes
YouTube video / Shorthttps://www.youtube.com/watch?v=…Add cookies if you hit the "sign in to confirm you're not a bot" gate.
TikTok videohttps://www.tiktok.com/@user/video/…Audio is extracted automatically. Residential proxy recommended.
Instagram Reel / posthttps://www.instagram.com/reel/…Public content only.
Facebook videohttps://www.facebook.com/watch?v=…Public content only.
X (Twitter) videohttps://x.com/user/status/…Public content only.
SoundCloud trackhttps://soundcloud.com/user/trackTranscribed directly as audio.
Dailymotion videohttps://www.dailymotion.com/video/…Supported.
Rumble videohttps://rumble.com/v…Supported.
Podcast RSS / Atom feedhttps://feed.syntax.fm/rssNewest maxEpisodesPerFeed episodes are transcribed.
Direct media filehttps://…/episode.mp3mp3, mp4, wav, m4a, flac, ogg, webm, mov, … — fetched directly, no proxy.
1,800+ other sitesBilibili, Reddit, Snapchat, Xiaohongshu, Kwai, Likee, …Anything yt-dlp supports. Success depends on the site and your proxy.

Currently not working — flagged:

  • Vimeo — broken upstream in yt-dlp: Vimeo removed anonymous OAuth tokens (yt-dlp #17271), so Vimeo URLs require a logged-in cookies export. Without cookies the Actor returns a clear error for the item and does not charge it.
  • Live streams — cannot be transcribed until the broadcast has ended and a recording exists.
  • DRM-protected audio (e.g. Spotify, Apple Music tracks) — not downloadable; use the podcast's RSS feed instead.

Input parameters

ParameterTypeRequiredDefaultDescription
mediaUrlsarrayYesVideo / audio / podcast-feed / direct-file URLs. Up to 50 per run.
modelstringNobaseWhisper model: tiny (fastest), base (balanced), small (most accurate).
languagestringNoautoISO 639-1 code (en, es, pt, de, fr, …) to force a language. Empty = auto-detect.
translateToEnglishbooleanNofalseOutput an English translation instead of the original language.
maxMinutesPerItemintegerNo120Per-URL transcription cap in minutes (1–600). Longer media is transcribed up to the cap.
maxEpisodesPerFeedintegerNo1Newest episodes taken from each podcast feed URL (1–50).
cookiesstring (secret)NoNetscape cookies.txt content for the YouTube bot-gate or restricted content.
proxyConfigurationobjectNoResidentialProxy for social networks only. Feeds and direct files always go direct.

Minimal input

{
"mediaUrls": ["https://www.youtube.com/watch?v=jNQXAC9IVRw"]
}

Full input

{
"mediaUrls": [
"https://www.youtube.com/watch?v=jNQXAC9IVRw",
"https://feed.syntax.fm/rss",
"https://traffic.megaphone.fm/FSI3025045146.mp3"
],
"model": "base",
"language": "en",
"translateToEnglish": false,
"maxMinutesPerItem": 60,
"maxEpisodesPerFeed": 3,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}

Output example

{
"url": "https://traffic.megaphone.fm/FSI3025045146.mp3",
"inputUrl": "https://feed.syntax.fm/rss",
"sourceType": "podcast-episode",
"platform": "podcast",
"title": "1023: Mosh, Caddy & Tailscale: A Remote Dev Deep Dive",
"uploader": "Syntax - Tasty Web Development Treats",
"publishedAt": "2026-07-22T11:00:00.000Z",
"thumbnailUrl": "https://megaphone.imgix.net/podcasts/…/image.jpg",
"durationSeconds": 2926.8,
"transcribedSeconds": 120,
"billedMinutes": 2,
"language": "en",
"languageProbability": 0.9956,
"model": "base",
"task": "transcribe",
"text": "Everybody has built tools for agents nobody is building actual products …",
"wordCount": 342,
"segments": [
{ "start": 0, "end": 6.04, "text": "Everybody has built tools for agents nobody is building actual products once I got team hooks" }
],
"srt": "1\n00:00:00,000 --> 00:00:06,040\nEverybody has built tools for agents …",
"vtt": "WEBVTT\n\n00:00:00.000 --> 00:00:06.040\nEverybody has built tools …",
"srtFileUrl": "https://api.apify.com/v2/key-value-stores/…/records/001-1023-mosh-caddy.srt",
"vttFileUrl": "https://api.apify.com/v2/key-value-stores/…/records/001-1023-mosh-caddy.vtt",
"error": null
}

Output fields

FieldDescription
textFull transcript as one string.
segments[{ start, end, text }] with seconds-precision timestamps.
srt / vttReady-to-save subtitle strings.
srtFileUrl / vttFileUrlDirect download links to the stored .srt / .vtt files.
language / languageProbabilityDetected language and confidence (0–1).
title, uploader, publishedAt, thumbnailUrlMedia metadata from the source.
durationSeconds / transcribedSecondsFull source length vs. what was transcribed (after the cap).
billedMinutesMinutes charged for this item (rounded up, never above maxMinutesPerItem).
wordCount, model, taskWord count, Whisper model used, transcribe or translate.
sourceType, platformvideo / audio / podcast-episode / direct-file, and the source platform.
url / inputUrlResolved media URL and the URL you supplied (the feed URL for podcast episodes).
errornull on success. Failed items keep the error message and are never charged.

How to transcribe a video or audio file

  1. Open the Actor and click Try for free.
  2. Paste one or more URLs into Media URLs — a YouTube link, a TikTok link, a podcast RSS feed, or a direct .mp3 URL.
  3. Pick a Whisper model. base is a good default; use small for noisy audio or accents, tiny for speed.
  4. (Optional) Set Language to force a language, turn on Translate to English, or lower Max minutes per item to control cost.
  5. (Optional) For YouTube's bot-check gate, paste a cookies.txt export into Cookies.
  6. Click Start. When the run finishes, open the Output / Storage tab and download the results as JSON, CSV, Excel, or the individual .srt / .vtt files.

You can also schedule the Actor to transcribe the newest episode of a podcast every day, or call it from your own code via the API.

Use cases

  • Subtitles & captions — generate SRT/VTT files for videos that have no captions, in the original language or translated to English.
  • Podcast show notes & search — turn every episode into searchable text and timestamped segments.
  • Content repurposing — pull quotes, write blog posts, or build clip lists from long videos and streams.
  • Accessibility — add transcripts to media libraries and course platforms.
  • Research & monitoring — transcribe interviews, earnings calls, press conferences, or a competitor's video channel.
  • AI & LLM pipelines — feed clean transcripts into RAG, summarization, embeddings, or fine-tuning datasets.

How it works

  1. Each URL in mediaUrls is classified as a direct file, a podcast feed, or a site URL.
  2. Podcast feeds are parsed and expanded into their newest maxEpisodesPerFeed episodes.
  3. Direct files and podcast episodes are downloaded directly; site URLs are handled by yt-dlp, through the residential proxy, with your cookies if provided.
  4. The audio is extracted and normalised with ffmpeg and clipped to maxMinutesPerItem.
  5. OpenAI Whisper (faster-whisper, CPU, int8) transcribes — or translates — the audio with voice-activity detection to skip silence.
  6. The transcript, timestamped segments, and generated SRT and VTT subtitles are pushed to the dataset; the subtitle files are also saved to the key-value store.
  7. Results export from the Apify Console or API as JSON, CSV, Excel, XML, or RSS, and connect to Make, Zapier, Google Sheets, Slack, and more.

Using the Actor via API

Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run_input = {
"mediaUrls": [
"https://www.youtube.com/watch?v=jNQXAC9IVRw",
"https://feed.syntax.fm/rss",
],
"model": "base",
"maxMinutesPerItem": 60,
"maxEpisodesPerFeed": 2,
}
run = client.actor("parsebird/video-audio-transcriber").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["title"], "—", item["language"], "—", item["wordCount"], "words")
print(item["text"][:300])

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const input = {
mediaUrls: ['https://www.tiktok.com/@user/video/1234567890'],
model: 'small',
translateToEnglish: true,
};
const run = await client.actor('parsebird/video-audio-transcriber').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0].text);

The Actor runs on the Apify platform, so you also get scheduling, a full REST API, webhooks, and native integrations. Results export as JSON, CSV, Excel, XML, or RSS.

Pricing

This Actor uses the pay-per-event pricing model, tiered by your Apify plan. You are charged per started minute of media actually transcribed (rounded up per item), at the same flat rate for video and audio. Failed items are never charged.

PlanPrice per transcribed minutePrice per 1,000 minutes
Free$0.05$50.00
Bronze$0.045$45.00
Silver$0.045$45.00
Gold$0.04$40.00

A tiny platform start fee (~$0.05 per 1,000 runs) also applies. Examples on the Free plan: a 3-minute TikTok ≈ $0.15; a 45-minute podcast episode ≈ $2.25; capping maxMinutesPerItem to 10 for that episode ≈ $0.50.

FAQ

Do I need an OpenAI API key? No. Whisper runs inside the Actor with faster-whisper. You only need an Apify account.

Which Whisper model should I pick? base handles clear speech well in most languages. Use small for noisy audio, strong accents, or technical vocabulary. Use tiny when speed matters more than accuracy.

Can it transcribe a video that has no captions? Yes — it transcribes the actual audio, so captions are not required.

How do I fix "Sign in to confirm you're not a bot" on YouTube? Export a cookies.txt from a browser where you are logged in to YouTube (use a "Get cookies.txt" extension) and paste its contents into the cookies input. A residential proxy also helps.

Why did a Vimeo link fail? Vimeo removed anonymous access from the API that yt-dlp uses. Vimeo now requires a logged-in cookies export. This is flagged in the Supported inputs section above.

Can I limit how much of a long video is transcribed? Yes. maxMinutesPerItem caps it (default 120). You are billed only for transcribedSeconds, and billedMinutes never exceeds the cap.

How are podcast feeds handled? Pass the RSS/Atom feed URL. The Actor transcribes the newest maxEpisodesPerFeed episodes and sets inputUrl to the feed URL on each result.

Can I get translated subtitles? Set translateToEnglish: true. The srt / vtt output and text will be in English regardless of the source language.

Can I schedule recurring transcriptions? Yes. Use Apify's scheduler to transcribe a feed or channel on any cron interval, and route results onward with a webhook or integration.

Something looks wrong — where do I report it? Open the Issues tab on the Actor page. Include the URL and the run ID.

This Actor downloads and transcribes media from URLs that you supply. You are responsible for having the right to access and transcribe that content, and for using the transcripts in accordance with each source platform's terms of service, copyright law, and — where personal data is involved — applicable privacy laws such as the GDPR and CCPA. Do not use it to transcribe private, paywalled, or DRM-protected content you are not authorised to access. See Apify's guide to the legality of web scraping for background.