Professional Subtitle Translator & Video Captioner avatar

Professional Subtitle Translator & Video Captioner

Pricing

from $30.00 / 1,000 translated minutes

Go to Apify Store
Professional Subtitle Translator & Video Captioner

Professional Subtitle Translator & Video Captioner

Transcribe, translate, quality-check, and burn subtitles into videos. Upload video, audio, SRT, or VTT and export SRT, VTT, TXT, JSON, or ready-to-publish MP4. Supports multilingual subtitles with automatic timing and QC.

Pricing

from $30.00 / 1,000 translated minutes

Rating

0.0

(0)

Developer

François Fernandez

François Fernandez

Maintained by Community

Actor stats

0

Bookmarked

7

Total users

2

Monthly active users

20 days ago

Last modified

Share

Create technically checked multilingual subtitles and optional captioned MP4 videos from video, audio, SRT, or WebVTT files — in one automated workflow.

This Actor combines speech transcription, subtitle translation, technical quality control, file export, and optional video rendering. Translate into up to five languages per run and download SRT, WebVTT, TXT, JSON, or ready-to-review MP4 outputs.

No external transcription or translation API key is required.

Machine translations are not human-reviewed. Technical QC checks timing, readability, formatting, overlaps, and subtitle compliance. Linguistic review is recommended before professional publication.

Quick start

  1. Upload a video, audio, SRT, or VTT file, or provide a direct media-file URL.
  2. Select up to five target languages. Leave the list empty to export only the source language.
  3. Keep quality control enabled to check and correct timing and formatting issues.
  4. Optionally enable Burn subtitles into the video to create captioned MP4 files.
  5. Run the Actor and download each successful language version from the Dataset.

What you get

  • Timed subtitles transcribed from video or audio
  • Existing SRT, VTT, or embedded text subtitles reused without retranscription
  • Translation into up to five target languages per run
  • Automatic checks for reading speed, line length, timing, gaps, and overlaps
  • Terminology replacements for names, brands, and technical vocabulary
  • SRT, WebVTT, TXT, and structured JSON exports
  • Optional MP4 videos with permanently embedded subtitles
  • Separate downloadable results for every successful language
  • Batch processing for multiple direct media URLs

Common use cases

  • Localize interviews, courses, documentaries, and training videos
  • Produce multilingual subtitles for social-media content
  • Turn audio recordings into timed subtitle files
  • Improve and translate an existing SRT or VTT file
  • Check subtitle timing and formatting before human review
  • Generate captioned MP4 videos without building a separate FFmpeg workflow

Supported inputs

Media

  • Video: MP4, MOV, MKV, WEBM
  • Audio: MP3, WAV, M4A, AAC, OGG, FLAC
  • Files uploaded through the Apify Console
  • Direct public HTTP or HTTPS links to media files
  • Multiple direct media URLs through mediaUrls

Existing subtitles

  • Standalone SRT or WebVTT
  • One video paired with an external SRT or VTT file
  • A compatible text subtitle track embedded in a video container

Not supported

YouTube, TikTok, Instagram, and similar webpage URLs are not direct media files and are refused. Download the media first, then upload it or provide a direct file URL.

Bitmap subtitle tracks such as PGS or VobSub are not supported because this Actor does not include OCR.

Choose the right input setup

Pick exactly one of the three setups below. Mixing them is the most common cause of a failed run.

A. Subtitle file only (SRT/VTT, no video)

  1. In Standalone subtitle file (SRT or VTT; no paired video) (subtitleUrl), click Upload new file and select your SRT or VTT file. A direct public URL to the file also works.
  2. Leave Video or audio file, Direct media URL and the batch media list empty: no media is needed.
  3. Keep Subtitle source for video on its default. Do not use videoSubtitleMode: "external" — that mode is only for a video paired with a subtitle file.
  4. Disable Burn subtitles into the video (renderSubtitles: false): there is no video to render.

Example (after uploading the file with Upload new file, the Console fills subtitleUrl for you):

{
"languageCode": "en",
"targetLanguages": ["FR"],
"outputLanguageMode": "translations",
"enableQc": true,
"qcAfterTranslation": true,
"outputFormats": ["srt", "vtt", "txt", "json"],
"renderSubtitles": false,
"maxMediaMinutes": 5
}

B. Video with an external SRT/VTT file

  1. Provide exactly one video, in Video or audio file (mediaFile) or Direct media URL (mediaUrl).
  2. Set Subtitle source for video to Use an SRT/VTT paired with the video (videoSubtitleMode: "external").
  3. In SRT/VTT paired with the video (External mode only) (videoSubtitleUrl), click Upload new file and select the SRT/VTT file.
  4. Leave Standalone subtitle file empty.

Transcription is skipped; timings and text come from your file, and the video can be rendered with burned-in subtitles.

C. Video to transcribe

  1. Provide the video in Video or audio file or Direct media URL.
  2. Keep Subtitle source for video on Transcribe the audio (videoSubtitleMode: "transcribe", the default).
  3. Do not provide any subtitle file (leave both subtitleUrl and videoSubtitleUrl empty).

Uploaded files and Tasks

Warning: do not copy a private Apify storage URL (https://api.apify.com/v2/key-value-stores/…/records/…) from another run or from an older Task. Runs execute with limited permissions and cannot read another run's private storage, so the download fails with an "Upload new file" error. Instead, open the Task you want to run, upload the file again with the corresponding Upload new file button, then save the Task before starting it.

If every input is refused before any processing starts because of the input itself — invalid or contradictory fields, a URL that answers with an HTTP error, an unreadable or unsupported file, a media over the size or duration limit, a file without audio, or a maximum cost per run too low — the run ends normally with the status message Input needs changes, nothing is billed, and the Dataset and OUTPUT contain "status": "failed" with an errorCode and an actionable errorMessage. When you call the Actor through the API or an integration, check the status field of OUTPUT, not only the run status.

Any other failure, including a technical problem on our side or at a provider, ends with status Failed so that it stays visible. A batch in which at least one input succeeds ends normally with a partial status.

Main workflows

1. Transcribe video or audio

Choose the transcription mode to create timed subtitles from the audio track.

The Actor can automatically detect the spoken language, preserve speaker changes when diarization is enabled, and format the result using the selected subtitle profile.

2. Reuse existing subtitles

Use an external SRT/VTT file or an embedded text subtitle track to skip transcription.

This is useful when the original timing is already correct and you only need quality control, translation, or a final subtitled video. Skipped transcription is not charged.

3. Translate subtitles

Select one or more target languages. Each successful translation is returned as a separate set of subtitle files.

The Translate into menu provides 10 validated output languages:

  • English (American) — EN-US
  • Spanish — ES
  • French — FR
  • German — DE
  • Italian — IT
  • Portuguese (Brazilian) — PT-BR
  • Arabic — AR
  • Chinese (Simplified) — ZH-HANS
  • Japanese — JA
  • Korean — KO

You can select up to five of these languages in one run.

Longer translated text may be redistributed into additional cues while remaining inside the available media timeline. A failure in one language does not remove successful outputs from other languages.

4. Quality control

Technical QC checks:

  • maximum lines per subtitle;
  • maximum characters per line;
  • reading speed in characters per second;
  • minimum and maximum cue duration;
  • overlaps and chronological order;
  • minimum gaps between cues;
  • empty cues and invalid timecodes;
  • whitespace and line wrapping;
  • media-boundary overflow.

When correction mode is enabled, the Actor can rewrap lines, normalize whitespace, repair overlaps, extend or trim durations, and conservatively merge short adjacent fragments.

QC validates technical subtitle compliance. It does not guarantee that a machine translation is semantically or culturally correct.

5. Render final subtitled MP4 videos

Enable renderSubtitles to permanently embed subtitles into the video.

You can render:

  • the source language;
  • translated languages;
  • every available language.

Rendering uses FFmpeg and libass inside the Actor container. The original media file is never overwritten.

When subtitles are already burned into the image, an optional box or blur can hide a user-defined horizontal zone before the new subtitles are added.

Subtitle profiles

The Actor includes three formatting profiles:

ProfileIntended use
documentaryLong-form and general video
socialShort-form and social-media video
accessibilityMore conservative, highly readable subtitles

Advanced settings can override line length, reading speed, minimum duration, maximum duration, and related rules.

Output files

For each successful language, the Actor can generate:

  • .srt — SubRip subtitles;
  • .vtt — WebVTT subtitles;
  • .txt — plain-text transcript;
  • .json — structured data with metadata, cue timings, and QC information;
  • .mp4 — optional H.264/AAC video with burned subtitles.

Generated files are stored in the run Key-Value Store. The Dataset contains one result row per language with direct download links.

The OUTPUT record contains the complete run summary, including successful languages, failed languages, QC details, file references, billable minutes, and safe error messages.

Example input

Translate an existing French SRT paired with a video into English, Spanish, and German:

{
"mediaUrl": "https://example.com/video.mp4",
"videoSubtitleMode": "external",
"videoSubtitleUrl": "https://example.com/subtitles-fr.srt",
"outputLanguageMode": "translations",
"targetLanguages": [
"EN-US",
"ES",
"DE"
],
"outputFormats": [
"srt",
"vtt",
"json"
],
"profile": "social",
"enableQc": true,
"qcCorrectionMode": "check-and-correct",
"qcAfterTranslation": true,
"renderSubtitles": false
}

Example output summary

{
"status": "success",
"sourceFilename": "video.mp4",
"languageCode": "fr",
"mediaDurationSeconds": 111.67,
"billableMinutes": 2,
"successfulLanguages": [
"EN-US",
"ES",
"DE"
],
"nonCompliantLanguages": [],
"failedLanguages": [],
"translations": [
{
"languageCode": "EN-US",
"status": "success",
"technicalStatus": "compliant",
"linguisticStatus": "machine-translated-unreviewed"
},
{
"languageCode": "ES",
"status": "success",
"technicalStatus": "compliant",
"linguisticStatus": "machine-translated-unreviewed"
},
{
"languageCode": "DE",
"status": "success",
"technicalStatus": "compliant",
"linguisticStatus": "machine-translated-unreviewed"
}
]
}

Pricing

This Actor uses pay-per-event pricing.

EventPriceWhen it applies
Actor start$0.05Once for a valid, non-empty run
Transcribed minute$0.03Per started media minute sent for transcription
Subtitle QC minute$0.03Per started subtitle minute processed with QC
Translated minute$0.03Per started minute and successful target language
Rendered video minute$0.03Per started minute and successful rendered language

Pricing example

For a 10-minute video translated into one language with the default QC settings and no rendered video:

  • Actor start: $0.05
  • Transcription: $0.30
  • Translation into one language: $0.30
  • QC of the source and translated subtitles: $0.60
  • Estimated total: $1.25

Rendering one 10-minute captioned video adds $0.30.

The final cost depends on media duration, number of target languages, QC settings, and number of rendered videos. The Apify Console displays the maximum permitted run cost before execution.

A failed translation is not charged as a successful translated-language event, and a failed render is not charged as a successful rendered-video event.

Limits

LimitValue
Media size500 MB
Default media duration60 minutes
Absolute media duration180 minutes
Subtitle file size8 MB
Available target languages10 validated languages
Target languages per run5 maximum
Batch inputs50
Parallel inputs5
Subtitle lines2 maximum
Rendered MP42 GB per output

Inputs above the configured limits are rejected before paid provider processing whenever possible.

Privacy and external processing

Media is downloaded into temporary storage inside the run container and removed when the run ends.

When transcription is requested, audio is sent to the configured transcription provider. When translation is requested, subtitle text is sent to the configured translation provider. Video rendering runs locally inside the Actor container.

Sensitive credentials, signed URLs, and full transcripts are not intentionally written to logs.

Important translation notice

Translations are machine-generated and marked:

machine-translated-unreviewed

Technical QC verifies timing, line length, reading speed, gaps, overlaps, and export validity. It does not replace a native-language review.

Human review is particularly important for legal, medical, safety-critical, marketing, and culturally sensitive content.

Which Actor should I use?

Each Actor covers a different stage of the media and subtitle workflow, so you only pay for the processing you need.

This Actor can render a complete video with subtitles, but it does not select highlights or cut a long video into several short clips. Use the AI Viral Clip Generator for that workflow.

Troubleshooting

MessageWhat to do
Social-platform page URLs are not supportedUpload the media or provide a direct media-file URL
No readable subtitle cue was foundCheck that the file is valid SRT or WebVTT
Media has no audio streamUse an existing external or embedded subtitle source
No embedded text subtitle trackSelect another text track or provide SRT/VTT
Translation failed for one languageDownload the successful languages and retry only the failed target
Translation is technically non-compliantReview the generated file and adjust the profile or timing limits
Rendering requires a video inputPair the subtitles with a real video file
Mask zone exceeds the frameReduce the mask top percentage or height
This private Apify upload is not accessible to the current runUpload the file again with the corresponding Upload new file button, save the Task, then retry
Run ends with "Input needs changes"Read the error message in the Dataset or OUTPUT, fix that input, then retry. Nothing was billed
Run ends as Failed with "No input could be processed"A technical error occurred; retry later or open an issue with the run ID
  1. Export SRT or VTT first.
  2. Review timing and machine translation.
  3. Correct terminology when needed.
  4. Render the final MP4 only after reviewing the subtitle files.