Transcribe audio and video files and podcast RSS episodes with OpenAI Whisper (faster-whisper, CPU). Get full text, timestamped segments, language detection and SRT + VTT subtitles. Pay per audio minute, only for transcripts that were saved.
First version, built and tested locally. Not yet published.
Transcribes audio and video files from direct URLs (mp3, m4a, wav, ogg, opus, flac, aac, mp4, webm, mov, mkv and more), from Apify key-value store records, and podcast episodes from RSS/Atom feeds (latest N, or published since a date).
OpenAI Whisper via faster-whisper (CTranslate2 int8, CPU). Two quality levels: "fast" (Whisper base, default) and "balanced" (Whisper small). Weights are baked into the Docker image and SHA-256 verified; nothing is downloaded at run time.
Output per file or episode: full text, timestamped segments, detected language with its probability, duration, and SRT, WebVTT, TXT and JSON files in the key-value store with links in the dataset. Optional word-level timestamps, translation to English, a vocabulary hint and voice-activity detection (skips silence and music).
Long files are transcribed in ~10-minute chunks cut at quiet moments, with the decoded audio memory-mapped from disk, so a 3-hour podcast fits in the default 4 GB. With more memory, one single-threaded model worker runs per CPU core, and files and chunks run in parallel.
Legal gate: links to YouTube, TikTok, Instagram, Facebook, X/Twitter, Vimeo, Twitch, Spotify, SoundCloud, Apple Music, Netflix and other streaming or social platforms are refused per item, before any request, at no charge. The check runs again on every redirect hop.
Pay-per-event per started minute: audio-minute-transcribed (Fast) and audio-minute-transcribed-balanced (Balanced; falls back to 2 standard minutes if that event is not configured). Charged only after the transcript files are saved. Respects the user's maximum cost per run, with in-flight reservation so parallel files cannot overspend.
Robustness: polite downloads (2 per host, retries with backoff honoring Retry-After, resume with Range requests), size, duration and content-type limits, private-network URL blocking, a per-file time limit, ffmpeg in a subprocess (a bad file fails only itself), feed parsing that tolerates broken XML and links from a podcast website to its feed, migration-safe progress, and stable error codes.