Facebook SRT file names: the caption format Meta accepts on video ads, and every language code

Meta only uploads a SubRip caption file named like filename.en_US.srt. The naming rule, the format checks, all 138 codes, and English-only auto-captions.

Meta accepts SubRip (.srt) caption files on video ads, and the file name decides whether the upload works. It has to read filename.[language code]_[country code].srt, as in ice_cream_ad.en_US.srt, and Meta says "Your captions won't upload if the file name is written incorrectly or doesn't use the correct language and country code." The codes are case sensitive: language in lower case, country in upper case. Meta's ads page lists 138 codes. Its automated captions are "only available in English and can only be used on Facebook and Instagram."

Uploaded captions attach to the video, not the ad. Meta's captions page says: "If you use the same video in multiple ads, the captions appear in every ad that uses that video. If you change the captions in one ad, the same changes appear in all the ads."

What should a Facebook SRT file name look like?

Three parts, joined by a dot and an underscore:

PartExampleRule
File nameice_cream_adMeta's example uses the video's name
Language codeenLower case
Country codeUSUpper case, after an underscore

Facebook's naming convention page adds a rule the ads page leaves out: "Language and country codes are case sensitive. Language needs to be in lower case and country needs to be in upper case."

Read against that rule and Meta's code list, these names fail:

File nameWhat's wrongName that matches the list
ad.en-US.srtA hyphen where Meta's format has an underscoread.en_US.srt
ad.en_us.srtCountry code in lower casead.en_US.srt
ad.EN_US.srtLanguage code in upper casead.en_US.srt
ad.en.srtNo country codead.en_US.srt or ad.en_GB.srt
ad.es_419.srtes_419 isn't on the list; Meta's general Spanish is es_LAad.es_LA.srt
ad.en_CA.srtCanada isn't listed for English. The English codes are en_US, en_GB and en_IN, plus English (Pirate) and English (Upside Down)ad.en_US.srt

Several codes aren't what you'd guess. Arabic has one code, ar_AR. German has only de_DE. Filipino is tl_PH, and tl_ST is Klingon. The list also carries English (Pirate) en_PI, English (Upside Down) en_UD and Leet Speak fb_LT.

Does Meta accept SRT files?

Yes, for video ads and for videos posted on Facebook. The ads page says: "You can upload a SubRip (.srt) file with the captions you've created for your video. You can create SRT files with most types of video editing software." SubRip is the only caption file format either page names.

In Ads Manager the upload sits inside the video editor:

  1. Start creating the ad, and upload or create your video in the Ad creative section.
  2. After the video loads, click Edit video, then Captions.
  3. In Video captions, click Upload captions, then Select file.
  4. Pick the SRT file and click Save.

"After your ad begins to run, your video captions show to everyone who views the video."

Does Instagram support SRT files?

Meta's ads page puts no placement limit on uploaded captions: they're uploaded in Ads Manager and belong to the video. The one platform limit on that page is on automated captions, which "can only be used on Facebook and Instagram." Meta's Instagram Reels ad specs list "Video Captions: Optional, but recommended."

Meta doesn't describe uploading an SRT file to an organic Instagram post.

How do you check an SRT caption file before you upload it?

Meta's ads page gives the naming rule and nothing on the file's contents. Facebook's page on problems adding captions to a reel does, and it points at the file first: "the SubRip (.srt) caption file you're trying to upload may be formatted incorrectly."

Its rules:

  • "Each block should include a number, a start and end time for the subtitle, and the subtitle text."
  • "Blocks should be separated by a single line, and there shouldn't be any spaces or lines after the last block in the file."
  • "Each subtitle has a unique sequence number. Start with 1 and continue to the last subtitle in the file."
  • "The times include every digit in the format hh:mm:ss,fff. Be sure to add leading zeros (example: 01:09:05,050) as necessary and include only two colons and one comma."
  • "The text file is encoded UTF-8. If it's not encoded in UTF-8, try opening the file in any text editor and saving it again under a new file name."

In SubRip, two blocks look like this:

1
00:00:00,500 --> 00:00:02,800
Cold brew in four minutes.

2
00:00:03,000 --> 00:00:05,200
No grinder, no filter.

A time written with a period, 00:00:00.500, breaks the rule: Meta's format asks for exactly one comma. So does a blank line or a trailing space after the last block.

That page is written for reels on Facebook ("All videos on Facebook are now Reels" since September 2025, it says). The ads page gives no separate format rules.

Can Meta generate captions in other languages?

No. "Automated captions are only available in English and can only be used on Facebook and Instagram." For any other language, you upload an SRT file.

The rest of the automated route, from the same page:

  • "It may take several minutes for captions to generate."
  • If "your video doesn't have sound or if our system can't detect sound from the video, you'll only have the option to manually add captions."
  • You review them before saving, and can edit the text, change how long each caption stays on screen, add one or delete one.
  • Under Options you can delete, share or download the captions file. A share link "expires after 72 hours."

Uploaded captions or captions burned into the video?

Uploaded and automated captions are "added to the video and not the ad", in Meta's words, and stay separate from the picture. Burned-in captions are part of the picture. Meta's caption pages don't cover them; its placement specs do.

Uploaded SRT or automated captionsCaptions burned into the video
Where they liveOn the video in Meta's system, shared by every ad that uses itIn the pixels of the file
Who sees them in an ad"everyone who views the video" once the ad runsEveryone, everywhere the file plays
EditingChange once and "the same changes appear in all the ads"Re-export the video
LanguageOne file per language and country codeOne language per video file

On organic Page videos the behavior differs from ads. The Page captions page says "People who watch your Page's video with sound turned off will automatically see captions. People who watch your video with sound turned on will need to turn on captions to see them", and the caption language follows each viewer's preferred language.

Burned-in captions are text inside the frame, so they fall under the same space rule as any overlay. The Reels spec says to consider "leaving at least 14% of the top, 35% of the bottom, and 6% on each side of your asset free from text, logos, or other important creative elements." A caption line near the bottom of the frame has to sit above that 35%. Drop a frame into the free safe zone checker to see whether yours clear it, and see why those figures are percentages, not pixels. Meta's wider advice on captions and sound for each placement is in what Meta recommends for video ads.

Facebook's two code lists don't match

Meta keeps two lists. The ads page's "Supported languages and country codes for captions" has 138 entries. The general Facebook naming page, for videos and Page videos, has 107. Every code on the shorter list is on the longer one, and 31 are on the ads list only, among them Amharic am_ET, Burmese my_MM, Hausa ha_NG, Lao lo_LA, Sinhala si_LK, Yoruba yo_NG and Japanese (Kansai) ja_KS.

So a caption file for an ad in one of those 31 languages matches the ads list, while the same file on an organic Facebook video uses a code the general page doesn't list. The table below marks which codes appear on both.

Every caption language code Meta lists for video ads

In the order Meta lists them, with Meta's language names.

LanguageCodeAlso on Facebook's general list
Afrikaansaf_ZAYes
Akanak_GHNo
Amharicam_ETNo
Arabicar_ARYes
Assameseas_INNo
Aymaraay_BOYes
Azerbaijaniaz_AZYes
Belarusianbe_BYYes
Bulgarianbg_BGYes
Bengalibn_INYes
Bretonbr_FRNo
Bosnianbs_BAYes
Catalanca_ESYes
Sorani Kurdishcb_IQNo
Cherokeeck_USYes
Corsicanco_FRNo
Czechcs_CZYes
Cebuanocx_PHYes
Welshcy_GBYes
Danishda_DKYes
Germande_DEYes
Greekel_GRYes
English (UK)en_GBYes
English (India)en_INYes
English (Pirate)en_PINo
English (Upside Down)en_UDNo
English (US)en_USYes
Esperantoeo_EOYes
Spanish (Chile)es_CLYes
Spanish (Colombia)es_COYes
Spanish (Spain)es_ESYes
Spanishes_LAYes
Spanish (Mexico)es_MXYes
Spanish (Venezuela)es_VEYes
Estonianet_EEYes
Basqueeu_ESYes
Persianfa_IRYes
Leet Speakfb_LTNo
Fulahff_NGNo
Finnishfi_FIYes
Faroesefo_FOYes
French (Canada)fr_CAYes
French (France)fr_FRYes
Frisianfy_NLYes
Irishga_IEYes
Galiciangl_ESYes
Guaranign_PYYes
Gujaratigu_INYes
Classical Greekgx_GRYes
Hausaha_NGNo
Hebrewhe_ILYes
Hindihi_INYes
Croatianhr_HRYes
Hungarianhu_HUYes
Armenianhy_AMYes
Indonesianid_IDYes
Igboig_NGNo
Icelandicis_ISYes
Italianit_ITYes
Japaneseja_JPYes
Japanese (Kansai)ja_KSNo
Javanesejv_IDYes
Georgianka_GEYes
Kazakhkk_KZYes
Khmerkm_KHYes
Kannadakn_INYes
Koreanko_KRYes
Kurdish (Kurmanji)ku_TRYes
Latinla_VAYes
Gandalg_UGNo
Limburgishli_NLYes
Lingalaln_CDNo
Laolo_LANo
Lithuanianlt_LTYes
Latvianlv_LVYes
Malagasymg_MGYes
Macedonianmk_MKYes
Malayalamml_INYes
Mongolianmn_MNYes
Marathimr_INYes
Malayms_MYYes
Maltesemt_MTYes
Burmesemy_MMNo
Norwegian (bokmal)nb_NOYes
Ndebelend_ZWNo
Nepaline_NPYes
Dutch (België)nl_BEYes
Dutchnl_NLYes
Norwegian (nynorsk)nn_NOYes
Chewany_MWNo
Oriyaor_INNo
Punjabipa_INYes
Polishpl_PLYes
Pashtops_AFYes
Portuguese (Brazil)pt_BRYes
Portuguese (Portugal)pt_PTYes
Quechuaqu_PEYes
Romanshrm_CHYes
Romanianro_ROYes
Russianru_RUYes
Kinyarwandarw_RWNo
Sanskritsa_INYes
Sardiniansc_ITNo
Northern Sámise_NOYes
Sinhalasi_LKNo
Slovaksk_SKYes
Sloveniansl_SIYes
Shonasn_ZHNo
Somaliso_SOYes
Albaniansq_ALYes
Serbiansr_RSYes
Swedishsv_SEYes
Swahilisw_KEYes
Syriacsy_SYYes
Silesiansz_PLNo
Tamilta_INYes
Telugute_INYes
Tajiktg_TJYes
Thaith_THYes
Turkmentk_TMNo
Filipinotl_PHYes
Klingontl_STNo
Turkishtr_TRYes
Tatartt_RUYes
Tamazighttz_MANo
Ukrainianuk_UAYes
Urduur_PKYes
Uzbekuz_UZYes
Vietnamesevi_VNYes
Wolofwo_SNNo
Xhosaxh_ZAYes
Yiddishyi_DEYes
Yorubayo_NGNo
Simplified Chinese (China)zh_CNYes
Traditional Chinese (Hong Kong)zh_HKYes
Traditional Chinese (Taiwan)zh_TWYes
Zuluzu_ZAYes
Zazakizz_TRNo

Sources


Meta changes these lists without notice, so check the code against the source before you name a batch of files.

Terrads makes video ads with the captions already on screen, with a preview of what each app's buttons cover.