Subtitle Format Conversion with Bitmovin Encoding API
Quick guide explaining how to convert subtitle files between formats programmatically using Bitmovin's Encoding API
Overview
If your encoding workflow handles ingestion of separate subtitle input files, you can convert them to a different subtitle format by generating an output file with a different subtitle type. This conversion can be achieved programmatically via the Bitmovin Encoding API.
Step-by-Step Example: TTML → WebVTT
The following example demonstrates how to convert a TTML input file into WebVTT format and generate .vtt output files.
Step 1 — Define the FileInputStream
Read the subtitle input file by creating a FileInputStream object and setting its type to TTML.
FileInputStream fileInputStream = new FileInputStream();
fileInputStream.setFileType(FileInputStreamType.TTML); // Allowed: TTML, SRT, WEBVTT
fileInputStream.setInputId(s3Input.getId());
fileInputStream.setInputPath("sampleTTML.xml");
fileInputStream = bitmovinApi.encoding.encodings.inputStreams.file.create(encoding.getId(), fileInputStream);Step 2 — Create a WebVTT Configuration
Define the target subtitle format by creating a WebVttConfiguration.
WebVttConfiguration webVttConfiguration = new WebVttConfiguration();
webVttConfiguration.setName("WebVTT_sample");
webVttConfiguration = bitmovinApi.encoding.configurations.subtitles.webvtt.create(webVttConfiguration);Step 3 — Create a Stream
Link the input stream and the WebVTT configuration together using a Stream object.
Stream stream = new Stream();
stream.setCodecConfigId(webVttConfiguration.getId()); // Apply WebVTT configuration
StreamInput stream_streamInput = new StreamInput();
stream_streamInput.setInputStreamId(fileInputStream.getId()); // Reference the TTML input
stream_streamInput.setSelectionMode(StreamSelectionMode.AUTO);
stream.setInputStreams(List.of(stream_streamInput));
stream = bitmovinApi.encoding.encodings.streams.create(encoding.getId(), stream);Step 4 — Mux to a .vtt File
.vtt FileUse a TextMuxing to write the converted subtitles to your desired output location.
TextMuxing textMuxing = new TextMuxing();
textMuxing.setFilename("subtitle.vtt");
EncodingOutput textMuxing_encodingOutput = new EncodingOutput();
AclEntry textMuxing_encodingOutput_aclEntry = new AclEntry();
textMuxing_encodingOutput_aclEntry.setPermission(AclPermission.PUBLIC_READ); // or PRIVATE
textMuxing_encodingOutput.setAcl(List.of(textMuxing_encodingOutput_aclEntry));
textMuxing_encodingOutput.setOutputId(s3Output.getId());
textMuxing_encodingOutput.setOutputPath("yourOutputPath/subtitles/webvtt/");
textMuxing.setOutputs(List.of(textMuxing_encodingOutput));
textMuxing.setStreamConditionsMode(StreamConditionsMode.DROP_MUXING);
MuxingStream textMuxing_muxingStream = new MuxingStream();
textMuxing_muxingStream.setStreamId(stream.getId());
textMuxing.setStreams(List.of(textMuxing_muxingStream));
textMuxing = bitmovinApi.encoding.encodings.muxings.text.create(encoding.getId(), textMuxing);Supported Input Formats
The FileInputStream object currently supports the following subtitle input formats:
| Format | FileInputStreamType value |
|---|---|
| TTML | FileInputStreamType.TTML |
| SRT | FileInputStreamType.SRT |
| WebVTT | FileInputStreamType.WEBVTT |
⚠️ Limitations
- Input formats: Only
TTML,SRT, andWEBVTTare supported as input viaFileInputStream. - Conversion combinations: Not all format-to-format conversions are supported. Refer to the supported combinations overview for details.
Need help? If your specific use case isn't working as expected, reach out to the Bitmovin Support team.
Updated 11 days ago