Vous m'avez trouvé sur Upwork ? Si vous m'avez trouvé via Upwork et souhaitez faire appel à mes services, merci de me contacter via Upwork. Les messages de clients Upwork envoyés en dehors d'Upwork ne recevront pas de réponse.
Notes de localisation🎬 Sous-titrage

Forced Narrative Subtitles: What They Are and How to Flag Them

Forced narrative (FN) subtitles show even when subtitles are off. Flag with -disposition:s:0 forced in ffmpeg or --forced-display-flag 0 in mkvmerge.

Dao Huy (Lucas)8 min read7 sections
Forced Narrative Subtitles: What They Are and How to Flag Them

💡 Forced narrative (FN) subtitles are a small, always-on track carrying only foreign-language dialogue and translated on-screen text. They display even when the viewer has subtitles turned off. Flag the track with -disposition:s:0 forced in ffmpeg or --forced-display-flag 0 in mkvmerge: both set the container flag that tells the player to show this track regardless of user subtitle preferences.

Key takeaways

  • FN is a subset of your full subtitle file: only the foreign dialogue and on-screen text a viewer without subtitles needs - not all dialogue.
  • Deliver FN as a separate file alongside the full subtitle track; streamers and players treat them independently.
  • MKV: mkvmerge -o out.mkv video.mkv --forced-display-flag 0 fn.srt
  • MP4: ffmpeg -i video.mp4 -i fn.srt -map 0 -map 1 -c:v copy -c:a copy -c:s mov_text -disposition:s:0 forced out.mp4
  • Verify with ffprobe: look for DISPOSITION:forced=1 on the subtitle stream.

What are forced narrative subtitles?

The W3C TTML2 specification defines a forced subtitle as "a subtitle (or caption) that is intended to always be displayed even if subtitles (captions) are not enabled." The Matroska specification says its FlagForced element (EBML ID 0x55AA) is for tracks containing "only translations of audio in foreign languages or on-screen text."

In practice, forced narratives solve one specific problem: a predominantly English film has a few scenes in French, a character receives a text message in Korean, or a street sign in a foreign city needs translation. The viewer who turned subtitles off still needs those moments to follow the story. The full subtitle file - all dialogue captioned for accessibility - is a different deliverable, with different flagging. I always treat these as two separate files from the start of a project.

The FN file should contain only what a non-subtitle viewer genuinely needs. Include: dialogue spoken in a language different from the film's main audio; plot-relevant on-screen text (signs, letters, text messages, newspaper headlines). Exclude: all dialogue in the main language (that belongs in the full subtitle or SDH track). A typical English film with one foreign-language scene might need only 15 to 40 FN events. If you have hundreds of events, you are building a full subtitle file, not an FN.

How do I build the FN file from a text subtitle source?

For text-based sources (SRT, VTT, ASS), there is no "forced" flag inside the file itself - it lives in the container track metadata. So building the FN file means isolating the FN events into their own file, then flagging the track when you mux it in.

My workflow in Subtitle Edit: open the full subtitle file, go through it and identify every FN event, mark those lines (I use a note column), copy those cues into a new blank file, verify the timings, and save it as fn.srt alongside the full full.srt.

If your source is a DVD or Blu-ray VobSub or PGS image subtitle that already has FN events encoded with the forced flag, Subtitle Edit's command-line converter (SeConv) can extract just those events:

# Extract only forced-flagged events from an image subtitle source
seconv.exe "input.sub" SubRip --forced-only --output-folder "out/"
  • --forced-only: skip any event that does not have its forced flag set in the source image subtitle.
  • This only works for image-based sources (VobSub, PGS/HDMV) that already carry the flag - it has no effect on a plain SRT input where all events are equivalent.
  • The output is an SRT containing only the forced events, ready to flag and mux.

How do I flag the FN track as forced in MKV and MP4?

For MKV, use mkvmerge from MKVToolNix. The --forced-display-flag option sets the Matroska FlagForced element (EBML ID 0x55AA) on the track:

mkvmerge \
  -o output.mkv \
  video.mkv \
  --language 0:eng --track-name 0:"English" \
  --default-track-flag 0 \
  full.srt \
  --language 0:eng --track-name 0:"English [Forced]" \
  --forced-display-flag 0 \
  --default-track-flag 0:0 \
  fn.srt
  • --forced-display-flag 0: sets FlagForced=1 on track ID 0 of the following input (fn.srt).
  • --default-track-flag 0 on the full subtitle: marks it as the default for viewers who have subtitles on.
  • --default-track-flag 0:0 on the FN subtitle: explicitly clears the default flag on the FN track. Players auto-select it because of the forced flag; you do not want it also set as default.
  • --language 0:eng: ISO 639-1 code; mkvmerge also accepts ISO 639-2 three-letter codes like vie for Vietnamese.

For MP4, ffmpeg sets the forced disposition bit. The confirmed disposition flags in ffmpeg 8.1.1 include forced (run ffmpeg -dispositions to see the full list):

ffmpeg \
  -i video.mp4 \
  -i fn.srt \
  -map 0 -map 1 \
  -c:v copy -c:a copy \
  -c:s mov_text \
  -metadata:s:s:0 language=eng \
  -metadata:s:s:0 title="English [Forced]" \
  -disposition:s:0 forced \
  out.mp4
  • -c:s mov_text: required for text subtitle tracks in MP4 (MP4 only accepts 3GPP Timed Text for text subs).
  • -disposition:s:0 forced: sets the forced flag on the first subtitle stream. Use +forced to add the flag while preserving other disposition flags already set.
  • To include both the full subtitle and the FN track in one MP4, map them in order and target by index: -disposition:s:1 forced for the second subtitle stream.

Then verify the flag landed with ffprobe:

ffprobe -v error \
  -select_streams s \
  -show_entries stream=index,codec_name,disposition \
  -of default=noprint_wrappers=1 \
  output.mkv

A correctly flagged forced narrative track shows DISPOSITION:forced=1 and DISPOSITION:default=0. If you see DISPOSITION:forced=0, the flag did not land: check that you are setting it on the right stream index. The index count includes video and audio streams, so the first subtitle in a file with one video and one audio track is at index 2 (which is s:0 in ffmpeg's stream specifier notation).

When should you do this yourself vs. get a specialist?

Building and flagging an FN file is well within what any practitioner with Subtitle Edit, ffmpeg, or mkvmerge can do. The technical steps above are straightforward once you understand what belongs in the FN and how the flag works.

Where the complexity lives: deciding which events actually qualify as forced narrative for a given project. This is an editorial judgement that depends on the original language, the story context, and what the target audience needs to follow. For a film with extensive mixed-language dialogue - think a war film with long scenes in a foreign language - defining the FN boundary takes real familiarity with the content.

Streaming platform deliveries also typically require the FN and full subtitle tracks as separate files in the submission package, with specific naming conventions. If you are delivering to a streamer for the first time, check their title delivery requirements document for the exact file naming and manifest entries they expect alongside the FN track.

If you need a Vietnamese FN subtitle track created from an English film with Vietnamese on-screen text, or a full subtitle translation with FN correctly separated and flagged, that is exactly the work I do. See the subtitle translation page for how I handle delivery packages for streamers.

FAQ

Do forced narrative subtitles replace the full subtitle file?

No. They are a separate, smaller track. The full subtitle file contains all dialogue for accessibility; the FN track contains only the foreign-language and on-screen text a viewer without subtitles needs. Both travel in the delivery package. When the viewer enables subtitles, the player shows the full subtitle track. When subtitles are off, the player shows only the FN track because of the forced flag.

What is the difference between a forced subtitle and a default subtitle?

A "default" track is the one the player pre-selects when the viewer enables subtitles. A "forced" track displays regardless of whether subtitles are on or off - it cannot be turned off via the standard subtitle toggle. These are independent flags. For the FN track: forced=1, default=0. For the full subtitle track: default=1, forced=0.

Can I include the FN events inside the full subtitle file and just mark them somehow?

Not in a way that most players will act on. The forced flag is a track-level container flag in MKV (FlagForced EBML element 0x55AA) and MP4 (tkhd atom), not a cue-level annotation. Players read it at the track level and decide whether to show the entire track. The correct approach is two separate files, two separate tracks, each with its own flag settings.

What language tag do I use for a Vietnamese forced narrative track?

Use ISO 639-2 three-letter code vie in ffmpeg (-metadata:s:s:0 language=vie) and in mkvmerge (--language 0:vie). Set the track title to something like "Vietnamese [Forced]" so the delivery QC team can identify it at a glance without opening the file.

Can SeConv extract FN events from a plain SRT file?

No. SeConv's --forced-only flag extracts events that already carry the forced flag in image-based subtitle sources (VobSub, PGS). For a text SRT file, there is no event-level forced flag - all events are equivalent. To create an FN SRT from a text source, isolate the FN events manually in Subtitle Edit, save them as a separate file, then flag the whole track as forced when you mux it into the container.

Official Sources

Dao Huy (Lucas)
Dao Huy (Lucas)
Diplômé de l'Université des langues étrangères, Université de Da Nang. Signe une attestation d'exactitude sur chaque traduction certifiée (USCIS, IRCC).

Écrit par Đào Huy (Lucas), traducteur vietnamien et spécialiste de la localisation (anglais, chinois et français vers le vietnamien). See translation services →

DevisWhatsApp