Video Transcriber — Video to Text (Whisper), Any Network avatar

Video Transcriber — Video to Text (Whisper), Any Network

Pricing

$25.00 / 1,000 minute of video transcribeds

Go to Apify Store
Video Transcriber — Video to Text (Whisper), Any Network

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

viralanalyzer

Maintained by Community

Actor stats

0

Bookmarked

170

Total users

62

Monthly active users

3 days ago

Last modified

Categories

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 language field).
  • 📝 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

FieldTypeRequiredDescription
mediaUrlsarrayVideo URLs (TikTok/YouTube/Instagram/Kwai/… or a direct video file)
languagestringISO code (en, pt, es…). Empty = auto-detect
modelstringtiny | base | small (default) — speed vs. accuracy
maxMinutesPerItemintegerSafety cap on minutes per URL (default 120). Longer media is cut to the cap and the record carries truncated: true
proxyConfigurationobjectRESIDENTIAL 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 / featureSupportedNotes
mediaUrlsrequiredVideo URLs to transcribe — TikTok, YouTube, Instagram, Kwai, Facebook, X (audio is extracted automatically) or a direct video/audio file link.
languageISO code (e.g. 'en', 'pt', 'es'). Leave empty to auto-detect.
modelAccuracy 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.
youtubeCookiesPaste 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:

DateConditionResult
2026-08-048 items, full download6/8 — the two gated ones were long videos
2026-08-308 items, partial fetch8/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.

📝 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) and diagnostics with 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 carry truncated: true, truncatedReason and sourceDurationSeconds.
  • v1.1 (2026-08) — per-stage time budgets, maxMinutesPerItem enforced, 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:

DataCondiçãoResultado
2026-08-048 itens, download completo6/8 — os dois barrados eram vídeos longos
2026-08-308 itens, busca parcial8/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.