Video To Text Transcription Scraper
Pricing
Pay per event
Video To Text Transcription Scraper
Convert direct public video files into plain text, timestamped segments, SRT, and VTT with local Whisper speech recognition—no separate transcription API key.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
5 days ago
Last modified
Categories
Share
Convert direct public video files into reusable text, timestamped segments, and optional SRT or VTT subtitle files. This Actor performs video to text transcription locally with Whisper, so you do not need a separate speech-recognition API key.
Provide up to 10 anonymously accessible video file URLs. Each successful result includes the complete transcript, detected language, timestamps, duration, dimensions, codecs, and processing metadata.
What does this Actor do?
The Actor downloads each supplied video within explicit size and duration limits, validates that it contains both video and audio streams, and runs local speech recognition.
It can:
- convert MP4, WebM, Ogg, and other ffmpeg-readable video files to text;
- detect the spoken language or use a supplied language hint;
- return a normalized full transcript;
- return segment-level start and end timestamps;
- create SRT and VTT subtitle files;
- expose video duration, dimensions, and codec metadata;
- process up to 10 direct video URLs in one run;
- report an actionable error record for each failed video.
This Actor does not scrape web pages or social post URLs. The URL must resolve directly to a public video file.
Who is it for?
- Content teams converting recorded interviews, demos, or clips into draft copy.
- Accessibility teams creating timed subtitle files for review.
- Researchers turning supplied video evidence into searchable text.
- Developers adding direct-file transcription to an Apify Task, workflow, or API pipeline.
- Automation teams processing small batches of public or intentionally shared videos.
Why use this video transcriber?
- No transcription API key: inference runs inside the Actor container.
- Structured output: use plain text and timestamped segments without parsing a document.
- Subtitle artifacts: generate SRT and VTT alongside the dataset record.
- Video-specific validation: audio-only files and silent videos fail clearly.
- Safe public downloads: private-network targets, credentialed URLs, oversized files, and excessive redirects are rejected.
- Predictable charging: only successfully transcribed started video minutes are charged.
For a broader input contract that also accepts direct audio files, use Audio Speech-to-Text Transcriber.
What data does it return?
| Field | Type | Description |
|---|---|---|
sourceUrl | string | Submitted direct video URL |
status | string | succeeded or failed |
transcript | string or null | Complete normalized transcript |
language | string or null | Detected or requested language |
languageProbability | number or null | Automatic language-detection confidence |
durationSeconds | number or null | Probed video duration |
width, height | number or null | Video dimensions in pixels |
videoCodec | string or null | Probed video codec |
audioCodec | string or null | Probed audio codec |
segments | array | Timestamped transcript segments |
srtKey, vttKey | string or null | Key-value-store artifact keys |
model | string | Local Whisper model identifier |
processedAt | string | ISO 8601 completion time |
processingSeconds | number | Wall-clock time for the video |
error | string or null | Failure reason for failed inputs |
How to transcribe a video to text
- Open the Actor input page.
- Add one or more direct public video file URLs under Video file URLs.
- Keep
languageset toauto, or enter a language code such asen. - Choose whether to generate SRT, VTT, both, or neither.
- Adjust file-size and duration limits if necessary.
- Start the run.
- Read transcript records in the default dataset.
- Download subtitle files from the run key-value store when requested.
A direct URL normally ends in a media extension or returns video bytes immediately. A YouTube watch page, Facebook post, cloud-drive preview page, or login screen is not a direct video file.
Input parameters
videoUrls
Required array containing 1–10 direct, credential-free HTTP(S) video file URLs. Redirects are supported when every destination remains public.
If you upload a file to an Apify key-value store, use an intentionally public record URL. Do not expose private or sensitive recordings.
language
Optional spoken-language code. The default is auto.
Examples:
enfor English;esfor Spanish;defor German;pt-BRfor Brazilian Portuguese;autofor automatic detection.
A correct language hint can improve results on short or ambiguous recordings.
outputFormats
Optional array containing srt, vtt, both, or neither. Subtitle files use segment timestamps from the same transcript record and are included without an additional billing event.
maxFileSizeMb
Maximum bytes accepted per video, expressed in MB. Default: 250. Allowed range: 1–500.
maxDurationMinutes
Maximum accepted duration per video. Default: 60. Allowed range: 1–180.
Example input
{"videoUrls": [{ "url": "https://media.w3.org/2010/05/sintel/trailer.mp4" }],"language": "auto","outputFormats": ["srt", "vtt"],"maxFileSizeMb": 250,"maxDurationMinutes": 5}
Example output
The prefilled W3C video currently produces a record shaped like this:
{"sourceUrl": "https://media.w3.org/2010/05/sintel/trailer.mp4","status": "succeeded","transcript": "What brings you to the land of the gatekeepers? I'm searching for someone.","language": "en","languageProbability": 0.995,"durationSeconds": 52.208333,"width": 854,"height": 480,"videoCodec": "h264","audioCodec": "aac","segments": [{ "id": 0, "start": 12.0, "end": 15.0, "text": "What brings you to the land of the gatekeepers?" }],"srtKey": "TRANSCRIPT_001.SRT","vttKey": "TRANSCRIPT_001.VTT","model": "tiny","processedAt": "2026-01-15T12:00:00.000Z","processingSeconds": 8.2,"error": null}
Timestamp boundaries and confidence can vary slightly between runtime versions. The transcript and metadata types remain stable.
How much does it cost to transcribe video files?
Pricing has two parts:
- a $0.005 start event, charged once only after the first successful transcription;
- $0.0172 per started video minute at the Bronze tier, with lower per-minute rates at higher usage tiers.
Example Bronze-tier event charges:
| Successful video duration | Started minutes | Event price |
|---|---|---|
| 52 seconds | 1 | $0.0222 total including start |
| 5 minutes | 5 | $0.091 total including start |
| 25 minutes | 25 | $0.435 total including start |
| 100 minutes | 100 | $1.725 total including start |
Failed inputs are uncharged. Requested output artifacts are included in the successful-minute event. Apify platform usage may be billed according to your Apify plan. Exact live pricing is shown on the Actor page before a run.
Video formats and direct URLs
ffmpeg performs media decoding, so common MP4, WebM, Ogg, MOV, and Matroska files normally work when their codecs are supported by the bundled runtime.
File extensions are not trusted on their own. The Actor probes the downloaded bytes and requires:
- a real video stream;
- an audio stream;
- a positive readable duration;
- duration and size within your limits.
Signed URLs can work if they remain valid and require no custom authorization header. Expired URLs fail with an error record.
Accuracy and limitations
The Actor uses the compact local Whisper tiny model with CPU int8 inference. It favors autonomous processing and predictable costs over maximum model accuracy.
Accuracy can decrease with:
- overlapping speakers;
- background music or loud effects;
- low-volume speech;
- strong accents or specialized terms;
- very short utterances;
- multiple languages in one clip.
Review transcripts before using them for legal, medical, safety-critical, or publication decisions. Speaker diarization, translation, OCR, scene analysis, and summarization are not included.
Failure behavior
Each submitted video is processed independently.
- A failed URL produces an uncharged dataset row with
status: "failed"and anerror. - Successful videos in the same batch are preserved.
- If every video fails, the Actor run exits with failure status.
- Temporary media files are removed after processing.
- Transient network failures and temporary 429/5xx responses receive bounded retries.
- Stable invalid input, 404 responses, private destinations, and unsupported media are not retried blindly.
Integration ideas
Accessibility pipeline
Run a Task when a team places a public video URL in a queue. Send the generated SRT to a reviewer and retain timestamped segments in a dataset.
Searchable research archive
Transcribe interview or evidence clips, then index transcript and segments.text in a search database.
Content repurposing
Send the transcript to a downstream summarizer, editor, or language model to draft notes, descriptions, or article outlines. Human review remains important.
Batch conversion
Submit up to 10 direct files per run and export the default dataset to JSON, CSV, Excel, or another Apify integration.
Run with the Apify API using cURL
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~video-to-text-transcriber/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"videoUrls": [{"url":"https://media.w3.org/2010/05/sintel/trailer.mp4"}],"language": "en","outputFormats": ["srt"]}'
Use run-sync-get-dataset-items instead when your client can wait for the complete result.
Run with JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/video-to-text-transcriber').call({videoUrls: [{ url: 'https://media.w3.org/2010/05/sintel/trailer.mp4' }],language: 'auto',outputFormats: ['srt', 'vtt'],});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items[0].transcript);
Run with Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("automation-lab/video-to-text-transcriber").call(run_input={"videoUrls": [{"url": "https://media.w3.org/2010/05/sintel/trailer.mp4"}],"language": "auto","outputFormats": ["vtt"],})items = client.dataset(run["defaultDatasetId"]).list_items().itemsprint(items[0]["transcript"])
Use with Apify MCP
Add the Actor to Claude Code:
claude mcp add --transport http apify \"https://mcp.apify.com?tools=automation-lab/video-to-text-transcriber"
Claude Desktop, Cursor, and VS Code
Use this equivalent MCP configuration in Claude Desktop, Cursor, or VS Code:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/video-to-text-transcriber"}}}
Example prompts:
- “Transcribe this direct MP4 URL and return the text with timestamps.”
- “Create SRT and VTT files for these two public WebM videos.”
- “Convert this interview video to English text and list each timestamped segment.”
Legality and responsible use
Only process videos you are authorized to access and transcribe. Respect copyright, privacy, confidentiality, contractual restrictions, and applicable recording-consent laws.
The Actor intentionally blocks private-network destinations and credentialed URLs, but technical access does not by itself grant legal permission. Avoid publishing private file URLs in Task inputs, logs, or shared datasets.
FAQ and troubleshooting
Why does the Actor say there is no video stream?
You probably supplied an audio file, HTML page, preview page, or unsupported container. Open the URL without authentication and confirm it returns video bytes directly.
Why does the Actor say there is no audio stream?
The video is silent or its audio codec could not be detected. A visible video stream alone cannot produce speech text.
Why did automatic language detection choose the wrong language?
Short or noisy videos can be ambiguous. Set language to a known code such as en and rerun.
Why did every video fail the run?
Inspect the dataset error rows. Typical reasons are an expired signed URL, HTTP 403/404, private destination, oversized file, duration above the chosen limit, missing audio, or no detected speech.
Can it transcribe YouTube, TikTok, Instagram, or Facebook post URLs?
Not directly. This Actor accepts direct video file URLs, not post pages or media-platform pages. Use a source-specific automation to obtain an authorized direct file first.
Does it translate or identify speakers?
No. It returns speech in the recognized language without translation or speaker diarization.
Related Actors
- Audio Speech-to-Text Transcriber — accepts direct public audio and video media URLs.
- Facebook Video Transcript Extractor — works with supported public Facebook video transcript workflows.
Support
If a valid direct public video fails, include the run URL, HTTP-visible file type, and non-sensitive input settings in an Apify issue. Do not post private recordings, expiring secrets, credentials, or sensitive transcript contents.