Subtitles are the transcribed speech in your video, including narration, dialogues, and monologues.
Closed captions or just captions are transcribed speech showing what is said in your video and explaining any audio context, such as background music, comments about moods, and emotions behind the spoken words.
By using timed text tracks for your videos’ subtitles and closed captions, you can engage wider audiences, such as deaf and hard-of-hearing people or non-native speakers.
Your videos may need text accompaniment in the following cases:
Gcore Player supports timed text tracks for videos: subtitles and closed captions, as in the example:
We support SRT and WebVTT formats for timed text tracks.
SRT (SubRip file format) is a simple text file saved in the SubRip file format with the .srt extension.
Example:
1
00:00:00,009 --> 00:00:03,689
Come on team, we mustn't dilly dally when there's so much nature to see!
2
00:00:04,129 --> 00:00:08,169
I was thinking, we should call our class project, Fungi in a Forest!
WebVTT (Web Video Text Tracks) is a text file with the .vtt extension. It is based on the SRT but expanded without backward compatibility. A WebVTT can contain captions, descriptions, chapters, and metadata cues such as caption alignment.
Note: We recommend using WebVTT. It is supported by most devices, players, and browsers.
Example:
WEBVTT
00:00:00.009 --> 00:00:03.689
Come on team, we mustn't dilly dally when there's so much nature to see!
00:00:04.129 --> 00:00:08.169
I was thinking, we should call our class project, Fungi in a Forest!
Note: Gcore will provide AI-generated subtitles soon. More information will be available soon when the service goes into beta testing.
For now, automatically generated text tracks can only be subtitles (not closed captions.) Additional ambiance accompaniment is unavailable, since the subtitles use the voice from the video.
The quality of automatic subtitle generation depends on the quality of the audio and the ability to parse the pronunciation of words automatically. The accuracy threshold for automated captions is around a 15% word error rate, which can fluctuate.
By default, subtitles will be created in the video’s original language. After that, the subtitle can be automatically translated into other languages.
Many third-party tools will allow you to generate subtitles on your side and then attach them as a file. Free services include Veed and Kapwing.
Note: External services may have use limitations; we are not responsible for them.
Here are some helpful guides on how to download subtitles from popular external platforms:
1. Go to the Video Hosting section and open the video where you want to add subtitles or captions.
2. Click Add subtitles. You can add several files.
3. Select the subtitle language for each file from the dropdown list.
4. Click Save.
Note: It takes about 15 minutes for the changes to take effect. Then you will see an icon to the left of the time indicator to switch on subtitles, and by clicking on it, you can select the subtitle language.
Explore our API documentation which describes working with subtitles and captions. Here are some methods for the most helpful actions.
The API method lets you add subtitles attached to a video.
Note: Specify the language using a three-letter language code according to ISO-639-2 (bibliographic code).
Example of the request:
curl -L 'https://api.gcore.com/streaming/videos/2474732/subtitles' \
-H 'Authorization: APIKey 1234$0d1659...' \
-H 'Content-Type: application/json' \
-d '{
"name": "German (AI-generated)",
"language": "ger",
"vtt": "WEBVTT\n\n1\n00:00:00.031 --> 00:00:03.711\nKomm, Team, wir dürfen nicht zögern,\nwenn es so viel Natur zu sehen gibt!\n\n2\n00:00:04.111 --> 00:00:08.171\nIch dachte, wir sollten unser Klassenergebnis\n"Pilze im Wald" nennen!"
}'
In response, you will get all original data and the “id” field of a new entity of subtitle. Example of the response:
{
"id": 5850,
"name": "German (AI-generated)",
"language": "ger",
"vtt": "WEBVTT\n\n1\n00:00:00.031 --> 00:00:03.711\nKomm, Team, wir dürfen nicht zögern,\nwenn es so viel Natur zu sehen gibt!\n\n2\n00:00:04.111 --> 00:00:08.171\nIch dachte, wir sollten unser Klassenergebnis\n"Pilze im Wald" nennen!"
}'
The API method lets you attach subtitles or captions to a video.
Example of the request:
curl -L 'https://api.gcore.com/streaming/videos/2474732/subtitles' \
-H 'Authorization: APIKey 1234$0d1659...'
Example of the response:
[
{
"id": 5823,
"name": "English (AI-generated)",
"language": "eng",
"vtt": "WEBVTT\n\n1\n00:00:00.009 --> 00:00:03.689\nCome on team, we mustn't dilly dally when there's so much nature to see!\n\n2\n00:00:04.129 --> 00:00:08.169\nI was thinking, we should call our class project, Fungi in a Forest!"
},
{
"id": 5850,
"name": "German (AI-generated)",
"language": "ger",
"vtt": "WEBVTT\n\n1\n00:00:00.031 --> 00:00:03.711\nKomm, Team, wir dürfen nicht zögern,\nwenn es so viel Natur zu sehen gibt!\n\n2\n00:00:04.111 --> 00:00:08.171\nIch dachte, wir sollten unser Klassenergebnis\n"Pilze im Wald" nennen!"
}
]
The API method lets you modify any field of the subtitle or caption entity: to update vtt subtitles or just update the entity's name.
Example of the request:
curl -L -X PATCH 'https://api.gcore.com/streaming/videos/2474732/subtitles/5850' \
-H 'Authorization: APIKey 1234$0d1659...' \
-H 'Content-Type: application/json' \
-d '{
"name": "German (AI-generated)"
}'
The API method allows you to delete the subtitle or caption entity.
Example of the request:
curl -L -X DELETE 'https://api.gcore.com/streaming/videos/2474732/subtitles/5850' \
-H 'Authorization: APIKey 1234$0d1659...'
Captions are integrated into Gcore's Player. Just click the icon located to the left of the volume indicator in the bottom panel of the Player to get captions.
If you have a custom player, you must get subtitles or captions from the API response or the HLS manifest (.m3u8 file.) Use this API method to get the list of subtitles for the video.
Captions are integrated into the HLS manifest. This means they can be automatically played on many native and custom players.
Make sure there are cues in the WebVTT format.
Example of the request:
curl 'https://demo-public.gvideo.io/videos/2675_QtN3sYHVPy3KF2n/master.m3u8'
Example of the response:
#EXTM3U
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs0",NAME="English",LANGUAGE="en",AUTOSELECT=YES,DEFAULT=YES,URI="index-f5.m3u8"
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs0",NAME="Español",LANGUAGE="es",AUTOSELECT=NO,DEFAULT=NO,URI="index-f6.m3u8"
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs0",NAME="Français",LANGUAGE="fr",AUTOSELECT=NO,DEFAULT=NO,URI="index-f7.m3u8"
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs0",NAME="Deutsch",LANGUAGE="de",AUTOSELECT=NO,DEFAULT=NO,URI="index-f8.m3u8"
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1928000,RESOLUTION=1720x720,FRAME-RATE=24.000,CODECS="avc1.640020,mp4a.40.2",VIDEO-RANGE=SDR,SUBTITLES="subs0"
index-svod720n-v1-a1.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=928000,RESOLUTION=1144x480,FRAME-RATE=24.000,CODECS="avc1.4d401f,mp4a.40.2",VIDEO-RANGE=SDR,SUBTITLES="subs0"
index-svod480n-v1-a1.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=514000,RESOLUTION=860x360,FRAME-RATE=24.000,CODECS="avc1.42c01e,mp4a.40.2",VIDEO-RANGE=SDR,SUBTITLES="subs0"
index-svod360n-v1-a1.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=264000,RESOLUTION=572x240,FRAME-RATE=24.000,CODECS="avc1.42c015,mp4a.40.2",VIDEO-RANGE=SDR,SUBTITLES="subs0"
index-svod240n-v1-a1.m3u8
Example of iOS player playback:
Example of Android Exoplayer playback:
Example of Android Exoplayer playback:
Was this article helpful?
Explore the Streaming Platform by Gcore