Audio & Video Transcriber (Whisper, SRT/VTT) avatar

Audio & Video Transcriber (Whisper, SRT/VTT)

Pricing

from $25.00 / 1,000 audio minute transcribeds

Go to Apify Store
Audio & Video Transcriber (Whisper, SRT/VTT)

Audio & Video Transcriber (Whisper, SRT/VTT)

Transcribe audio and video you supply, or public podcast RSS/Atom feed episodes, with Whisper (faster-whisper, int8) running inside the Actor. Plain text, SRT, VTT, and optional approximate word timestamps. No scraped platform video.

Pricing

from $25.00 / 1,000 audio minute transcribeds

Rating

0.0

(0)

Developer

Inn Corp

Inn Corp

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

12 hours ago

Last modified

Share

Give it audio or video URLs, or public podcast RSS/Atom feeds, and get back a clean transcript: plain text, SRT, VTT, and, if you want it, approximate word-level timestamps. Transcription runs inside the Actor with faster-whisper (CTranslate2, int8 quantized). No third-party transcription API in the loop, no scraped platform video.

What it does

  • Fetches each URL with a single plain HTTP GET, downloads it to disk, and probes its duration with ffprobe before spending any compute on it.
  • Extracts and normalizes audio with ffmpeg (16kHz mono), which is also how it pulls the audio track out of a video file. Works the same whether you point it at an MP3, an MP4, or anything else ffmpeg reads.
  • Parses podcast RSS <enclosure> tags (and Atom <link rel="enclosure">) from feed URLs, up to enclosuresPerFeed episodes per feed, and runs each one through the same pipeline, tagged with the feed URL and episode title.
  • Writes two record types, discriminated by recordType:
    • transcript, one per source that finished: text, srt, vtt, optional wordTimestamps, detectedLanguage, durationSeconds, modelSize, and where it came from (sourceType, feedUrl, episodeTitle).
    • summary, one per source attempt, always, success or not: status (ok / too-long / download-failed / error), error message, and durationSeconds.

What it deliberately does not do

  • No YouTube, TikTok, Instagram, or any platform video. This Actor only transcribes files you supply directly or podcast episodes from a public RSS/Atom feed's own <enclosure> link. That is the whole differentiator: rivals in this category feed on scraped platform URLs, which puts them on the wrong side of those platforms' terms; this one never goes there.
  • Word timestamps are Whisper's inference-time approximation, not exact forced alignment. They drift, sometimes noticeably, around pauses, cross-talk, music beds, and fast speech. Treat them as "close," not "frame-accurate." Off by default; turn wordTimestamps on when you need them and can tolerate the imprecision.
  • No language is invented. detectedLanguage comes from Whisper's own detection (or echoes back the language you supplied). A source with no intelligible speech will still return something; garbage in, garbage transcript, honestly labeled with whatever confidence Whisper had.
  • maxAudioMinutes is a real cap, not a suggestion. Apify bills the Actor's operator for compute time, not the caller. A job that cannot finish inside the run's timeout would otherwise burn real money and produce nothing. Duration is checked with ffprobe before a single second of audio is transcribed; anything over the cap comes back as a clean too-long summary record, no charge, no wasted compute. Raise the cap only with model size and the numbers below in mind.

Model size: speed vs. accuracy

Real-time factor (RTF) is compute minutes needed per minute of audio, on this Actor's default 4096 MB / 1 vCPU allocation. Below 1.0x is faster than real time.

ModelRelative accuracyReal-world feel
tinyRoughest; fine for skimming, gets names and jargon wrong more oftenFastest, cheapest
base (default)Solid general-purpose accuracyGood default for most podcasts and clean speech
smallNoticeably better on accents, cross-talk, and technical vocabularyMeaningfully slower than base
large-v3-turboBest accuracy this Actor offersSlowest and most expensive; reserve for content that has to be right

The measured number, not an estimate: a real 9:11 (551s) public-domain recording, transcribed on Apify's cloud infrastructure at modelSize=base and 4096 MB, took 2 minutes 59 seconds (178.6s) of wall-clock run time end to end (including model load) and used 0.198 compute units, for an RTF of 0.32x. See "Fair pricing" below for what that means in dollars.

Podcast feeds

Tested against two real, currently-active feeds on two different hosts: LibriVox's own generated podcast RSS (archive.org-hosted enclosures) and NASA's official "Houston We Have a Podcast" feed (Megaphone-hosted). Neither blocked a plain, honestly-identified HTTP GET. Podcast CDNs are built to be fetched without authentication; that is the whole point of RSS-based podcasting, and this Actor leans on exactly that, nothing more.

Sources and privacy

This Actor transcribes audio and video you supply, or that you point it to via public podcast RSS feeds. Use it only on content you have the right to transcribe. It fetches URLs with a plain HTTP GET and never bypasses paywalls, logins, or DRM. Your content and its transcript are yours; results go only to your own Apify dataset.

Output example

Real records from the cloud benchmark run against LibriVox's "The Raven" (Edgar Allan Poe, public domain, 9:11 / 551s), modelSize=base.

A transcript record (SRT/VTT truncated for length):

{
"recordType": "transcript",
"url": "https://www.archive.org/download/miscellaneouspoe_1501_librivox/miscellaneouspoe_12_poe_64kb.mp3",
"sourceType": "audioUrls",
"feedUrl": null,
"episodeTitle": null,
"detectedLanguage": "en",
"durationSeconds": 550.74,
"modelSize": "base",
"text": "Section 12 of Miscellaneous Poe This is a LibriVox recording. All LibriVox recordings are in the public domain. For more information or to volunteer, please visit LibriVox.org Recording by Rosanne Hoffman Youngstown, Ohio Miscellaneous Poe by Edgar Allen Poe Section 12, The Raven Once upon a midnight dreary, while I pondered weak and weary over many acquaint and curious volume of forgotten lore... [6,469 characters total]",
"srt": "1\n00:00:00,000 --> 00:00:09,000\nSection 12 of Miscellaneous Poe This is a LibriVox recording. All LibriVox recordings are in the public domain.\n\n2\n00:00:09,000 --> 00:00:14,000\nFor more information or to volunteer, please visit LibriVox.org\n\n... [more cues] ...",
"vtt": "WEBVTT\n\n00:00:00.000 --> 00:00:09.000\nSection 12 of Miscellaneous Poe This is a LibriVox recording. All LibriVox recordings are in the public domain.\n\n00:00:09.000 --> 00:00:14.000\nFor more information or to volunteer, please visit LibriVox.org\n\n... [more cues] ...",
"wordTimestamps": null,
"fetchedAt": "2026-08-24T21:44:32+00:00"
}

The matching summary record:

{
"recordType": "summary",
"url": "https://www.archive.org/download/miscellaneouspoe_1501_librivox/miscellaneouspoe_12_poe_64kb.mp3",
"sourceType": "audioUrls",
"feedUrl": null,
"episodeTitle": null,
"modelSize": "base",
"status": "ok",
"error": null,
"durationSeconds": 550.74
}

Input

FieldMeaning
audioUrlsDirect links to audio or video files.
rssFeedUrlsPublic podcast RSS/Atom feed URLs. <enclosure> (or Atom <link rel="enclosure">) tags are parsed and each episode runs through the same pipeline.
enclosuresPerFeedMax episodes pulled per feed, default 5.
modelSizetiny / base (default) / small / large-v3-turbo. See the table above.
languageOptional ISO 639-1 code. Empty = auto-detect.
wordTimestampsAdds an approximate per-word timing array. Default off.
outputFormatsAny of text (always included regardless of this setting) / srt / vtt. Formats you don't select come back null.
maxAudioMinutesDuration cap, checked before transcription starts, default 15 (30 max). See "What it deliberately does not do" above for why this exists.

Typical uses

  • Turn a podcast episode into captions (SRT/VTT) without a separate transcription subscription.
  • Feed an AI agent or a RAG index the plain-text transcript of a recording it was pointed at directly, no scraping involved.
  • Batch-transcribe your own interview or meeting recordings from wherever they're hosted.
  • Monitor a small podcast feed for new episodes and keep a running transcript archive.

Fair pricing

Pay per audio-minute actually transcribed (rounded up) and once per source successfully processed, once pay-per-event pricing is enabled. Rejected, too-long, and failed-to-download sources cost nothing. No subscription.

The math, from the real cloud benchmark, not an estimate:

  • Measured: 550.74s of audio, modelSize=base, 4096 MB (1 vCPU), took 178.6s of wall-clock run time end to end (download, ffprobe, ffmpeg normalize, model load, transcribe) and used 0.198 compute units.
  • Chad's actual Apify account rate (confirmed via the API, Free plan): $0.20 / compute unit. 0.198 CU x $0.20 = $0.0397 for that job.
  • $0.0397 / 9.18 audio-minutes = $0.0043 raw compute cost per audio-minute, at modelSize=base.
  • Apify pays the developer roughly 80% of what a pay-per-event charge collects. At a recommended price of $0.025 per audio-minute transcribed, Chad nets ~$0.020/minute, a 4.6x cushion over the measured $0.0043 raw cost.

That cushion is deliberate, not padding: the per-minute charge is a single flat event regardless of which modelSize the caller picks, and only base (the default) was cloud-benchmarked here. tiny should be faster still; small and large-v3-turbo were not cloud-tested and are plausibly several times slower per audio-minute on CPU, by general knowledge of how those model sizes compare, not a measurement. The 4.6x cushion is what stands between a large-v3-turbo job and an unprofitable one; it is a real number, not a guaranteed-safe one. Recommend benchmarking small and large-v3-turbo before trusting this price at volume, and treat $0.025/minute as an informed starting point, not a final answer, when Chad sets it at publish.

Secondary event: $0.01 per source successfully processed, in line with the flat per-item fee this Actor family already uses (pdf-processed, company-processed), to cover the fixed per-job overhead (download, probing, model warm-up) that the per-minute charge alone doesn't capture.

One more honest note: Apify Actor runs are ephemeral, so each run's model warm-up may include downloading the selected Whisper model's weights fresh rather than hitting a warm cache. The benchmark above reflects one real run end to end, including that overhead; base and tiny are small (well under 200 MB), so this is unlikely to matter, and it's already inside the measured number, not an extra cost on top of it.