Video/Audio Transcript + SRT — Bilibili, TED, Podcasts
Pricing
from $2.00 / 1,000 captions transcribeds
Video/Audio Transcript + SRT — Bilibili, TED, Podcasts
Turn public Mandarin & English videos or podcast audio into timestamped JSON, plain text, and .srt files. Captions-first; CPU faster-whisper fallback (no OpenAI key). Supports Bilibili, TED, Vimeo, direct MP3. YouTube & Douyin/TikTok NOT supported — fail fast ≤2 min, no charge on failures.
Chinese & English Video/Audio to Transcript & SRT
Turn public Chinese (Mandarin) and English videos or podcast audio files into timestamped JSON segments, clean plain-text transcripts, and ready-to-download .srt subtitle files—automatically extracting existing captions when available and falling back to built-in CPU faster-whisper transcription with no external API key required.
1. What It Does
Pass a list of public video or audio URLs and get back:
- Timestamped
segments([{start, end, text}]) for search indexing, AI summarization, or subtitle alignment. - Full plain-text transcript (
text) ready for LLM pipelines or content analysis. - Standard SubRip (
.srt) subtitles both inline in the Dataset and saved as individual.srtfiles in the default Key-Value Store.
It uses a two-stage hybrid pipeline to keep your costs low:
- Captions Path (
source: "captions"): Checks metadata first and extracts existing manual or auto-generated subtitles in seconds without downloading media. - Local Whisper Fallback (
source: "whisper"): When no captions exist (such as direct podcast.mp3files or uncaptioned Bilibili videos), downloads only the audio stream and transcribes it on CPU usingfaster-whisper(compute_type="int8",vad_filter=True). You do not need to bring an OpenAI API key.
2. Supported Platforms (Cloud-Verified)
Every platform listed below has been tested and verified on Apify Cloud without cookies or account logins:
| Platform | URL Pattern | How It Works on Apify Cloud | Verified Languages |
|---|---|---|---|
| Bilibili (B站公开视频) | https://www.bilibili.com/video/BV... | Resolves metadata and audio via Bilibili public player API and transcribes Mandarin speech via local faster-whisper (source: "whisper"), or extracts public JSON subtitles when exposed without login. | Chinese (Mandarin zh) |
| Direct Audio & Podcasts | https://.../*.mp3 (e.g. Archive.org, podcast RSS audio CDNs, .m4a, .wav) | Downloads the audio stream directly, enforces maxDurationMinutes truncation, and transcribes speech via faster-whisper (source: "whisper"). | Chinese (zh), English (en), and 90+ languages |
| TED Talks | https://www.ted.com/talks/... | Extracts official human-translated WebVTT subtitles directly (source: "captions") in ~1–2 seconds per talk. | English (en), Chinese (zh), and 40+ subtitle languages |
| Vimeo (Public Videos) | https://vimeo.com/<id> or https://player.vimeo.com/video/<id> | Extracts existing VTT captions directly (source: "captions"), or falls back to faster-whisper audio transcription when uncaptioned. | English (en), Spanish, German, French, Japanese, Korean, etc. |
3. Input Example
{"videoUrls": ["https://www.bilibili.com/video/BV1zUnZ67EMY","https://archive.org/download/call_to_arms_jl_librivox/calltoarms_06_lu.mp3","https://www.ted.com/talks/matt_cutts_try_something_new_for_30_days","https://vimeo.com/1064773380"],"languageHint": "auto","useWhisperFallback": true,"whisperModel": "small","maxDurationMinutes": 60,"maxVideos": 20}
Input Parameters
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
videoUrls | array<string> | Yes | — | Publicly accessible URLs from Bilibili (bilibili.com/video/BV...), direct audio links (.mp3/.m4a/.wav), TED Talks (ted.com/talks/...), or public Vimeo videos (vimeo.com/...). |
languageHint | string | No | "auto" | Preferred language code ("zh", "en", "ja", etc.) or "auto" for automatic detection. |
useWhisperFallback | boolean | No | true | When true, downloads audio and transcribes locally with faster-whisper if no captions exist. |
whisperModel | string | No | "small" | Model size for CPU int8 transcription ("base", "small", or "medium"). |
maxDurationMinutes | integer | No | 60 | Maximum duration per item in minutes. Videos with metadata duration above this limit are skipped (status: "skipped"), and direct audio files are truncated at this limit. |
maxVideos | integer | No | 20 | Maximum number of URLs processed in one run. |
4. Output Examples (Real Apify Cloud Outputs)
Example A — Chinese Audio Direct Link (source: "whisper", Archive.org Mandarin Audiobook)
Dataset JSON Record (Excerpt from real cloud run luw3C2TgcZvDlKLOn):
{"url": "https://archive.org/download/call_to_arms_jl_librivox/calltoarms_06_lu.mp3","title": "calltoarms_06_lu","durationSec": 262.88,"source": "whisper","language": "zh","segments": [{"start": 0.08,"end": 2.64,"text": "鲁迅小说集,呐喊"},{"start": 2.9,"end": 4.44,"text": "一件小事"},{"start": 4.68,"end": 7.5,"text": "此次 LibriVox 录音由公众所有"},{"start": 9.04,"end": 13.4,"text": "我从乡下跑到京城里,一转眼已经六年了"},{"start": 13.64,"end": 18.52,"text": "期间耳闻目睹的所谓国家大事算起来也很不少"}],"text": "鲁迅小说集,呐喊 一件小事 此次 LibriVox 录音由公众所有 我从乡下跑到京城里,一转眼已经六年了 期间耳闻目睹的所谓国家大事算起来也很不少 ...","srt": "1\n00:00:00,080 --> 00:00:02,640\n鲁迅小说集,呐喊\n\n2\n00:00:02,900 --> 00:00:04,440\n一件小事\n\n3\n00:00:04,680 --> 00:00:07,500\n此次 LibriVox 录音由公众所有\n","srtKey": "SRT_001_calltoarms_06_lu.srt","status": "succeeded","error": null}
Saved .srt File in Key-Value Store (SRT_001_calltoarms_06_lu.srt):
100:00:00,080 --> 00:00:02,640鲁迅小说集,呐喊200:00:02,900 --> 00:00:04,440一件小事300:00:04,680 --> 00:00:07,500此次 LibriVox 录音由公众所有400:00:09,040 --> 00:00:13,400我从乡下跑到京城里,一转眼已经六年了500:00:13,640 --> 00:00:18,520期间耳闻目睹的所谓国家大事算起来也很不少
Example B — Bilibili Public Mandarin Video (source: "whisper", Real Cloud Run NkJl91DvzPCxh591Y)
{"url": "https://www.bilibili.com/video/BV1zUnZ67EMY","title": "陕视评:判决未至,定论先入教材 武大图书馆事件反思:公共出版物不能越司法“断案” (策划:李彤 任超 评论员:刁坤 摄像:姬佩瑶)","durationSec": 176,"source": "whisper","language": "zh","segments": [{"start": 0.02,"end": 2.32,"text": "一本教大学生心理健康的小采"},{"start": 2.32,"end": 4.62,"text": "凭什么让一个法院认定清白的男生"},{"start": 4.62,"end": 7.42,"text": "在白纸黑字上继续当性骚扰犯呢"},{"start": 7.42,"end": 9.32,"text": "2023年武汉大学图书馆内"}],"srtKey": "SRT_001_BV1zUnZ67EMY.srt","status": "succeeded","error": null}
Example C — TED Talk / Vimeo Captions Extraction (source: "captions", Real Cloud Run pJBxyhsCk1XEPUI1I)
{"url": "https://www.ted.com/talks/matt_cutts_try_something_new_for_30_days","title": "Try something new for 30 days","durationSec": 190,"source": "captions","language": "en","segments": [{"start": 0,"end": 4.976,"text": "A few years ago, I felt like I was stuck in a rut,"},{"start": 5,"end": 6.976,"text": "so I decided to follow in the footsteps"},{"start": 7,"end": 10.536,"text": "of the great American philosopher, Morgan Spurlock,"}],"srtKey": "SRT_001_1183.srt","status": "succeeded","error": null}
5. Pricing & Cost Examples (Pay-Per-Event)
You only pay for succeeded items based on which path was used:
| Event Name | When It Is Charged | Price |
|---|---|---|
captions-transcribed | Charged per video transcribed using existing platform captions or subtitles (source: "captions") | $0.002 / video ($2.00 per 1,000 captioned videos) |
whisper-transcribed-minute | Charged per started minute of audio (ceil(durationSec / 60)) transcribed locally via faster-whisper (source: "whisper") | $0.025 / minute |
Concrete Cost Examples
- 10 TED Talks or Vimeo videos with existing captions:
10 × $0.002= $0.020 total (completes in ~10 seconds). - A 3-minute Bilibili Mandarin video without public captions:
3 minutes × $0.025= $0.075. - A 5-minute Chinese audiobook / podcast MP3:
5 minutes × $0.025= $0.125. - A 30-minute Chinese podcast episode (MP3):
30 minutes × $0.025= about $0.75. - Failed or skipped URLs: $0.00 (never charged).
6. Supported vs Unsupported Links
Supported (cloud-verified)
| Link type | Example | Expected path | Notes |
|---|---|---|---|
| Bilibili public BV | https://www.bilibili.com/video/BV... | captions (rare) or whisper | Public API audio download; no cookies |
| Direct audio / podcast | https://.../*.mp3 (Archive.org, RSS CDN, .m4a, .wav) | whisper | Truncated at maxDurationMinutes |
| TED Talks | https://www.ted.com/talks/... | captions | Official WebVTT / full.vtt |
| Public Vimeo | https://vimeo.com/<id> | captions or whisper | Rewritten to player.vimeo.com |
NOT supported (fail-fast ≤ 2 minutes, no charge)
| Link type | Why | Actor behavior |
|---|---|---|
| YouTube (with or without captions) | Datacenter IP blocked (Sign in to confirm you're not a bot) | Immediate clear status=failed error — never hangs to TIMED-OUT |
| Douyin / TikTok share links | Login wall / anti-bot; Actor never uses cookies or paid proxies | Immediate clear status=failed error |
| Private / VIP / password / DRM | No login, no cookies | failed or skipped with reason |
Other limits
- Public Content Only (No Login / No Cookies): Does not support private videos, login-walled pages, VIP/paid Bilibili episodes, password-protected Vimeo videos, or DRM-protected streams.
- Bilibili Unauthenticated Subtitle Restriction: Bilibili requires account login to access AI-generated closed captions on most videos. Since this Actor never logs in or uses cookies, Bilibili videos usually take the
whisperaudio transcription path. - CPU Transcription Speed / 10-minute SLA: Whisper runs on Apify Cloud CPU (
faster-whisperint8,vad_filter=True,beam_size=1). For audio longer than ~12 minutes the Actor auto-selectsbase, and above ~25 minutes it selectstiny, so ≤60-minute items can finish within ~10 minutes. Multi-hour files are ffmpeg-cut tomaxDurationMinutesbefore decode to avoid OOM. Caption paths usually finish in seconds. - Fail-fast timeouts: Metadata / captions / download / whisper each have hard asyncio deadlines; unsupported hosts never call yt-dlp. Per-URL wall clock is capped at 10 minutes.
- Mandarin Homophones in Fast Speech: For rapid news commentary or domain-specific proper nouns without context,
whisperModel="small"may occasionally produce same-sound character substitutions (e.g.,统战→统政,小册→小采). You can selectwhisperModel="medium"for higher Mandarin accuracy on complex audio (may miss the 10-minute SLA on long clips). - Memory & Duration Limits: Requires
2048 MB–4096 MBRAM. Audio exceedingmaxDurationMinutes(default60minutes) is automatically skipped or truncated atmaxDurationMinutes. - Billing:
Actor.chargeruns only whenstatus == "succeeded". Failed / skipped / timed-out-internally items cost $0 PPE.
7. Frequently Asked Questions (FAQ)
Do I need an OpenAI API key?
No. Transcription runs locally inside the Actor container using faster-whisper (MIT license). No external API key is needed.
Why is YouTube not supported?
YouTube actively blocks requests from cloud datacenter IP addresses unless authenticated cookies or residential proxies are supplied. To keep pricing predictable and compliant, this Actor focuses on Bilibili, podcast/audio direct links, TED Talks, and public Vimeo videos. YouTube URLs fail immediately with a clear error (no TIMED-OUT hang, no PPE charge).
Are Douyin / TikTok links supported?
No. Douyin and TikTok share links require login or anti-bot challenges. They fail within 2 minutes with a clear unsupported-platform message and are never charged.
How can I cap my maximum spend for a run?
Set the Maximum cost per run (ACTOR_MAX_TOTAL_CHARGE_USD) in Apify Console or via the API. The Actor checks your remaining budget before and after each item and stops gracefully as soon as the limit is reached.
Where do I download the .srt subtitle files?
Every succeeded item includes the full .srt text inside the Dataset JSON (srt field) and also saves a standalone .srt file (such as SRT_001_BV1zUnZ67EMY.srt) in the run's Default Key-Value Store.
What open-source licenses are used?
apifyPython SDK: Apache-2.0yt-dlp: The Unlicensefaster-whisper: MIT Licenseffmpeg(system package installed viaapt): License (LGPL v2.1+ or GPL v2+/v3) depends on the distribution's compile-time configuration.- Users are responsible for complying with the Terms of Service of the target platforms they query.