Audio & Video Transcriber (Whisper, SRT/VTT)
Pricing
from $25.00 / 1,000 audio minute transcribeds
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
12 hours ago
Last modified
Categories
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
ffprobebefore 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 elseffmpegreads. - Parses podcast RSS
<enclosure>tags (and Atom<link rel="enclosure">) from feed URLs, up toenclosuresPerFeedepisodes 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, optionalwordTimestamps,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),errormessage, anddurationSeconds.
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
wordTimestampson when you need them and can tolerate the imprecision. - No language is invented.
detectedLanguagecomes from Whisper's own detection (or echoes back thelanguageyou 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
ffprobebefore a single second of audio is transcribed; anything over the cap comes back as a cleantoo-longsummary 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.
| Model | Relative accuracy | Real-world feel |
|---|---|---|
tiny | Roughest; fine for skimming, gets names and jargon wrong more often | Fastest, cheapest |
base (default) | Solid general-purpose accuracy | Good default for most podcasts and clean speech |
small | Noticeably better on accents, cross-talk, and technical vocabulary | Meaningfully slower than base |
large-v3-turbo | Best accuracy this Actor offers | Slowest 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
| Field | Meaning |
|---|---|
audioUrls | Direct links to audio or video files. |
rssFeedUrls | Public podcast RSS/Atom feed URLs. <enclosure> (or Atom <link rel="enclosure">) tags are parsed and each episode runs through the same pipeline. |
enclosuresPerFeed | Max episodes pulled per feed, default 5. |
modelSize | tiny / base (default) / small / large-v3-turbo. See the table above. |
language | Optional ISO 639-1 code. Empty = auto-detect. |
wordTimestamps | Adds an approximate per-word timing array. Default off. |
outputFormats | Any of text (always included regardless of this setting) / srt / vtt. Formats you don't select come back null. |
maxAudioMinutes | Duration 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.