Video Transcriber — Video to Text (Whisper), Any Network
Pricing
$25.00 / 1,000 minute of video transcribeds
Video Transcriber — Video to Text (Whisper), Any Network
Transcribe video to text with Whisper running locally — no API key. Give any video URL (TikTok, YouTube, Instagram, Kwai, Facebook, X) or a direct file and get text, timestamped segments, SRT subtitles and auto-detected language. Pay per minute transcribed.
Pricing
$25.00 / 1,000 minute of video transcribeds
Rating
0.0
(0)
Developer
viralanalyzer
Maintained by CommunityActor stats
0
Bookmarked
170
Total users
62
Monthly active users
3 days ago
Last modified
Share
🎬 Video Transcriber — Video to Text (Whisper) for TikTok, YouTube, Kwai & More
$0.025 per minute transcribed · 🔒 no API key needed · 🌍 any language (auto-detect) · 📝 text + SRT + timestamps 🔗 View on Apify Store · 🇺🇸 English · 🇧🇷 Português
Transcribe video to text using OpenAI Whisper running locally inside the Actor (faster-whisper) — no external API, no key, no rate limits. Give any video URL — TikTok, YouTube, Instagram, Kwai, Facebook, X (Twitter) — or a direct video-file link, and get accurate text, timestamped segments, SRT subtitles and auto-detected language. The audio is extracted from the video automatically; it works even on videos that have no captions.
Who it's for: social-media & content teams, video editors, market/OSINT researchers, accessibility teams, and developers building search, summarization or subtitles on top of video.
▶️ Click Try for free — your first run returns a real transcript in seconds.
✨ Features
- 🎯 Real Whisper transcription (not just captions) — works on any video, even without subtitles.
- 🌐 Any network — TikTok, YouTube, Instagram, Kwai, Facebook, X, and 1800+ sites (or a direct file).
- 🌍 99+ languages, auto-detected (or force one with the
languagefield). - 📝 Rich output — full text, timestamped segments, ready-to-use SRT, word count, language.
- 🔒 Self-contained — Whisper runs in the container; you never need an API key.
- 💸 Fair pricing — pay per minute of video actually transcribed.
📥 Input
| Field | Type | Required | Description |
|---|---|---|---|
mediaUrls | array | ✅ | Video URLs (TikTok/YouTube/Instagram/Kwai/… or a direct video file) |
language | string | ❌ | ISO code (en, pt, es…). Empty = auto-detect |
model | string | ❌ | tiny | base | small (default) — speed vs. accuracy |
maxMinutesPerItem | integer | ❌ | Safety cap on minutes per URL (default 120). Longer media is cut to the cap and the record carries truncated: true |
proxyConfiguration | object | ❌ | RESIDENTIAL by default — networks block datacenter IPs on media download |
📤 Output (per item)
{"url": "https://www.tiktok.com/@user/video/…","title": "…","language": "en","durationSeconds": 47.2,"billedMinutes": 1,"text": "Full transcript text …","segments": [{ "start": 0.0, "end": 4.2, "text": "…" }],"srt": "1\n00:00:00,000 --> 00:00:04,200\n…","wordCount": 120}
🎯 Use cases
- Turn TikTok/Reels/Shorts into searchable, quotable text.
- Generate SRT subtitles for repurposing clips across platforms.
- Feed video speech into summarization / RAG / trend analysis.
- Accessibility transcripts and compliance.
✅ Capabilities & Limits
Stated up front, so you do not pay a run to find out.
Built here: a URL ending in a media extension skips yt-dlp and goes straight to HTTP GET + ffmpeg. yt-dlp's generic extractor asks for a "webpage" first and most CDNs answer 403 - so direct upload and CDN links transcribe here even where yt-dlp gives up.
| Input / feature | Supported | Notes |
|---|---|---|
mediaUrls — required | ✅ | Video URLs to transcribe — TikTok, YouTube, Instagram, Kwai, Facebook, X (audio is extracted automatically) or a direct video/audio file link. |
language | ✅ | ISO code (e.g. 'en', 'pt', 'es'). Leave empty to auto-detect. |
model | ✅ | Accuracy vs. speed. 'small' (default, more accurate), 'base' (faster) or 'tiny' (fastest). Larger models cost a bit more compute time. |
Result volume (maxMinutesPerItem) | ⚠️ | Safety cap on how many minutes of audio to transcribe per URL. |
youtubeCookies | ✅ | Paste the contents of a Netscape cookies.txt exported from a logged-in YouTube session to reliably download YouTube (avoids the 'Sign in to confirm… |
| Proxy | ⚠️ | Residential proxy by default — social networks (YouTube/TikTok/Instagram) block datacenter IPs when downloading media. Keep RESIDENTIAL unless your… |
❓ FAQ
Q: Do I need an API key (OpenAI, etc.)? A: No. Whisper runs inside the Actor — you only provide URLs.
Built here — what YouTube's bot-gate actually does, with both measurements: YouTube answers a share of requests with "Sign in to confirm you're not a bot", and it does so per exit IP, not per video. The rate is not stable, and we have measured it twice on the same video over Apify RESIDENTIAL:
| Date | Condition | Result |
|---|---|---|
| 2026-08-04 | 8 items, full download | 6/8 — the two gated ones were long videos |
| 2026-08-30 | 8 items, partial fetch | 8/8, no gate at all |
Treat neither number as the rate you will get. What holds across both is the mechanism: a URL gated
on one IP goes through on the next. Since 1.2.1 a gated item is retried on a fresh residential
session, up to 3 attempts. The retry costs almost no proxy traffic — the gate fires on the metadata
probe (yt-dlp --skip-download), before any media is pulled. Only a confirmed gate is retried; an
unavailable or removed video fails on the first attempt. When every attempt is gated you get a
BLOCKED record naming how many IPs were tried, and nothing is charged.
Do not reach for youtubeCookies first — measured 2026-08-30. A controlled pair, same video,
same proxy, 8 items each, minutes apart: with no cookies, 8/8 transcribed; with a cookies.txt
exported from a logged-in session, 0/8 — every item failed with "The page needs to be
reloaded." and the run ended FAILED. The file was accepted by YouTube as a session
("LOGGED_IN":true) but was missing the HttpOnly cookies __Secure-1PSID, __Secure-3PSID, HSID
and SSID, because the browser extension used could only read document.cookie. A half-authenticated
session breaks the player request outright — worse than sending nothing.
So leave youtubeCookies empty unless anonymous access is actually failing for you. If you do use it,
the export must include the HttpOnly cookies; a bad file now returns COOKIES_REJECTED naming the
cause instead of a generic download error.
Q: Which networks work? A: Anything yt-dlp supports (1800+ sites) — TikTok, YouTube, Instagram, Kwai, Facebook, X — plus direct video links. Residential proxy is on by default because networks block datacenter IPs.
Q: How is it billed? A: $0.025 per minute of video transcribed (rounded up per item). A 4-minute video = $0.10. Each item is charged right after it is delivered, so a run that stops early bills only what you received.
Q: What if a video is longer than the run can handle? A: The Actor fits the transcription into the remaining run time (and maxMinutesPerItem): the transcript is cut, truncated: true and truncatedReason are set on the record, and only the transcribed minutes are billed. Raise the run timeout (Settings → Timeout, 3600 s recommended for long videos) for full-length transcripts.
Q: What happens to a URL that cannot be downloaded? A: You get an error record for that URL (_dataQuality: "error", errorCode: MEDIA_UNAVAILABLE, BLOCKED, DOWNLOAD_TIMEOUT, TRANSCRIPTION_FAILED, COOKIES_REJECTED, RUN_TIME_BUDGET) — never charged — and the other URLs in the batch still run.
Q: Videos without captions? A: Yes — this transcribes the actual audio, so captions are not required.
💰 Pricing
Pay-per-event: $0.025 per minute transcribed. No platform-usage charges — a fixed price per minute of real video audio. Examples: 1 min = $0.025 · 5 min = $0.125 · 20 min = $0.50.
🔗 Related actors
- Audio Transcriber — podcasts, social audio & uploads.
- YouTube Fast Scraper — metadata + captions.
📝 Changelog
- v1.3.1 (2026-09-02) — a run only fails when something is genuinely broken. A source answering "this is a livestream", "members-only", "still processing" or "log in first" now returns a labelled error item and succeeds with nothing charged, instead of failing the run. Real extractor drift still fails, and the fatal yt-dlp line is no longer truncated mid-message.
- v1.2.3 (2026-09-01) — every failed URL now carries its own diagnosis:
rawError(the untouched yt-dlp message),errorSignature(normalised so the same failure over different videos groups into one line) anddiagnosticswith the yt-dlp version, proxy groups, model and memory that actually ran. The run's terminal status names the dominant cause instead of just the error code. - v1.2.0 (2026-08-29) — Only the audio you pay for is downloaded. The actor now probes the media first, picks a ≤70 kbps audio stream and, for long sources, fetches only the bytes that cover
maxMinutesPerItem(or your max charge / remaining run time) — a 19-minute YouTube video capped at 1 minute moves 1.2 MB instead of 17.8 MB. Items cut this way carrytruncated: true,truncatedReasonandsourceDurationSeconds. - v1.1 (2026-08) — per-stage time budgets,
maxMinutesPerItemenforced, billing right after each item, honest terminal status. - v1.0 — local Whisper (faster-whisper) transcription from any network; text + segments + SRT; per-minute pricing.
🇧🇷 Português
$0.025 por minuto transcrito · 🔒 sem chave de API · 🌍 qualquer idioma (detecção automática) · 📝 texto + SRT + timestamps 🇺🇸 English · 🇧🇷 Português
Transcreva vídeo em texto com o Whisper rodando localmente no Actor (faster-whisper) — sem API externa, sem chave, sem rate limit. Passe qualquer URL de vídeo — TikTok, YouTube, Instagram, Kwai, Facebook, X — ou um link direto de arquivo, e receba texto, segmentos com timestamps, legendas SRT e idioma detectado. O áudio é extraído do vídeo automaticamente; funciona mesmo em vídeos sem legendas.
Para quem é: times de redes sociais e conteúdo, editores de vídeo, pesquisadores de mercado/OSINT, times de acessibilidade e desenvolvedores que constroem busca, resumo ou legendas sobre vídeo.
▶️ Clique em Testar grátis — sua primeira execução retorna uma transcrição real em segundos.
✨ Recursos
- 🎯 Transcrição Whisper real (não só legendas) — funciona em qualquer vídeo, mesmo sem legendas.
- 🌐 Qualquer rede — TikTok, YouTube, Instagram, Kwai, Facebook, X e 1800+ sites (ou arquivo direto).
- 🌍 99+ idiomas, detectados automaticamente.
- 📝 Saída rica — texto completo, segmentos com tempo, SRT pronto, contagem de palavras, idioma.
- 🔒 Autossuficiente — o Whisper roda no container; você nunca precisa de chave de API.
- 💸 Preço justo — pague por minuto de vídeo realmente transcrito.
💰 Preço
Pay-per-event: $0.025 por minuto transcrito. Sem cobrança de uso de plataforma — preço fixo por minuto de áudio do vídeo. Exemplos: 1 min = $0.025 · 5 min = $0.125 · 20 min = $0.50.
❓ FAQ
P: Preciso de chave de API? R: Não. O Whisper roda dentro do Actor — você só fornece URLs.
P: Como é cobrado? R: $0.025 por minuto de vídeo transcrito (arredondado por item). Um vídeo de 4 min = $0.10. Cada item é cobrado logo após ser entregue — um run que para antes do fim cobra só o que você recebeu.
P: E se o vídeo for maior do que o run consegue processar? R: O Actor ajusta a transcrição ao tempo restante do run (e ao maxMinutesPerItem): o texto é cortado, o registro recebe truncated: true e truncatedReason, e só os minutos transcritos são cobrados. Aumente o timeout do run (Settings → Timeout; 3600 s para vídeos longos) para transcrições completas.
Built here — o que o bot-gate do YouTube faz, com as duas medições: o YouTube responde parte das requisições com "Sign in to confirm you're not a bot", e faz isso por IP de saída, não por vídeo. A taxa não é estável, e medimos duas vezes no mesmo vídeo sobre RESIDENTIAL da Apify:
| Data | Condição | Resultado |
|---|---|---|
| 2026-08-04 | 8 itens, download completo | 6/8 — os dois barrados eram vídeos longos |
| 2026-08-30 | 8 itens, busca parcial | 8/8, nenhum gate |
Não tome nenhum dos dois como a taxa que você vai ter. O que vale nos dois é o mecanismo: URL barrada
num IP passa no seguinte. Desde a 1.2.1 o item barrado é retentado em sessão residencial nova, até
3 tentativas. Quase não gasta proxy — o gate dispara na sondagem (yt-dlp --skip-download), antes de
baixar mídia. Só o gate confirmado é retentado; vídeo removido falha na primeira. Quando todas as
tentativas são barradas você recebe um registro BLOCKED dizendo em quantos IPs tentou, e nada é
cobrado.
Não recorra a youtubeCookies primeiro — medido em 2026-08-30. Par controlado, mesmo vídeo, mesmo
proxy, 8 itens cada, minutos de diferença: sem cookie, 8/8 transcritos; com um cookies.txt de
sessão logada, 0/8 — todos falharam com "The page needs to be reloaded." e a execução terminou
FAILED. O arquivo era aceito pelo YouTube como sessão ("LOGGED_IN":true), mas faltavam os cookies
HttpOnly __Secure-1PSID, __Secure-3PSID, HSID e SSID, porque a extensão usada só lia
document.cookie. Sessão pela metade quebra a requisição do player — pior que não mandar nada.
Deixe youtubeCookies vazio a menos que o acesso anônimo esteja falhando para você. Se usar, o export
precisa incluir os HttpOnly; arquivo ruim agora devolve COOKIES_REJECTED nomeando a causa.
P: O que acontece com uma URL que não baixa? R: Você recebe um registro de erro para aquela URL (_dataQuality: "error", errorCode: MEDIA_UNAVAILABLE, BLOCKED, DOWNLOAD_TIMEOUT, TRANSCRIPTION_FAILED, COOKIES_REJECTED, RUN_TIME_BUDGET) — nunca cobrado — e as demais URLs do lote continuam.
P: Vídeos sem legenda? R: Sim — transcrevemos o áudio real, então legendas não são necessárias.
📝 Changelog
- v1.0 — transcrição local com Whisper (faster-whisper) de qualquer rede; texto + segmentos + SRT; preço por minuto.