Addaly is in open beta. Things will change, and AI answers can be wrong — check anything that matters.

Editing Video

Cuts, sound, colour and export — taught on DaVinci Resolve, which costs nothing.

Lesson 55 of 779 min

When your editor cannot render the script

The problem nobody warns you about

You type a Hindi or Tamil or Bengali caption into your video editor's title tool and it comes out wrong. Not a missing-font box — worse than that. The letters are present and in the wrong shape: conjuncts broken apart, vowel marks sitting after the consonant instead of before it, the matra detached and floating.

This is not a font problem and installing a different font usually does not fix it. It is a text shaping problem, and it affects a very large share of this readership.

What text shaping is

In Latin script, rendering text is roughly a matter of drawing one glyph per character, left to right. Complex scripts do not work that way.

In Devanagari, Bengali, Tamil, Telugu, Kannada, Malayalam, Gurmukhi, Odia, Sinhala — and in Arabic, Thai and others — the shape a character takes depends on its neighbours, and characters reorder visually. The vowel sign i is typed after its consonant and drawn before it. Two consonants combine into a single conjunct glyph. A consonant takes a different form when it carries a vowel sign.

Doing this correctly requires a shaping engine — HarfBuzz is the standard free one — which reads the font's OpenType tables and applies its substitution and positioning rules.

Some video software does not use one, or uses an old or partial implementation. In that case the characters are drawn in typed order with no substitution, which produces exactly the breakage described.

Testing whether your tool shapes correctly

A quick test string per script. Type it, and compare against the same string rendered in your web browser, which does shape correctly.

  • Devanagari: क्षत्रिय — two conjuncts. If you see the halant (the small stroke) visible between letters rather than the letters joined, shaping failed.
  • Devanagari vowel reorder: कि — the i sign must appear to the left of the क. If it is on the right, the engine is not reordering.
  • Tamil: ஸ்ரீ
  • Bengali: ক্ষ
  • Arabic: مرحبا — letters must join. Isolated forms mean no shaping.

Test once per tool and write down the answer. It is a property of the software, not of the project.

Routes that work

1. Render the text elsewhere and import it as an image. The most reliable route and it works in every editor.

Set the text in Inkscape, GIMP, LibreOffice or a browser — all of which shape correctly — export a PNG with transparency at four times the size you need, and place it on the timeline. For a caption track this is laborious; for titles and supers it is fine.

2. Burn subtitles with FFmpeg using libass. The subtitles filter uses libass, which uses HarfBuzz and shapes correctly.

bash
ffmpeg -i film.mp4 -vf "subtitles=hindi.srt:force_style=\
'FontName=Noto Sans Devanagari,FontSize=30,BorderStyle=3,MarginV=100'" \
-c:a copy out.mp4

This is the best free route for a full caption track in a complex script, and the output is correct.

3. Render the graphic in a browser. HTML and CSS shape correctly, and a headless browser screenshot gives you a PNG per cue.

4. Ship a sidecar file and let the player shape it. An .srt or .vtt uploaded to a platform is rendered by the platform's own text engine, which handles complex scripts correctly. This is the simplest answer of all, and it is why a sidecar file is not merely an accessibility nicety for these languages — it is often the only route that renders properly.

Routes that shape a complex script correctly, most reliable firstA sidecar file, shaped by the platformThe player's own text engine does the work. Simplestroute of allFFmpeg's subtitles filterlibass uses HarfBuzz, so a whole caption track burnsin correctlyText rendered in a browserHTML and CSS shape correctly; screenshot onetransparent PNG per cueA PNG set in Inkscape or GIMPWorks in every editor. Fine for supers, laboriousfor a caption trackThe editor's own title toolTest it first. If the vowel sign in कि sits on theright, it is not shapingTest once per tool and write the answer down: this is a property of the software, not of the project.Noto covers the scripts, is free for commercial use and has complete shaping tables.
Routes that shape a complex scriptcorrectly, most reliable firstA sidecar file, shaped by the platformThe player's own text engine does the work.Simplest route of allFFmpeg's subtitles filterlibass uses HarfBuzz, so a whole caption trackburns in correctlyText rendered in a browserHTML and CSS shape correctly; screenshot onetransparent PNG per cueA PNG set in Inkscape or GIMPWorks in every editor. Fine for supers,laborious for a caption trackThe editor's own title toolTest it first. If the vowel sign in कि sits onthe right, it is not shapingTest once per tool and write the answer down: thisis a property of the software, not of the project.Noto covers the scripts, is free for commercial useand has complete shaping tables.

Fonts

Use the Noto family. Google's Noto project covers essentially every script in Unicode, is licensed under the SIL Open Font License, is free for commercial use, and its shaping tables are complete and well tested.

Noto Sans Devanagari, Noto Sans Tamil, Noto Sans Bengali, Noto Serif Devanagari, and so on. There are also good free alternatives — Mukta, Hind, Rozha One, Baloo, Yantramanav — most on Google Fonts under the OFL.

Two practical notes. Indic scripts need more vertical space than Latin: vowel marks sit above and below the baseline, so a line height that is comfortable for English clips the matras. Increase line spacing by 20–30%. And a mixed-script caption — Hindi with an English technical term in it, which is how people actually speak — needs a font pairing that looks intentional, or a font family that covers both, which Noto Sans does.

Reading speed

The 17-characters-per-second guideline was derived for Latin script. For Devanagari and other abugidas, a character carries more information — a single syllable cluster where Latin needs two or three letters — so a straight character count understates the reading time available.

There is no settled figure. The honest practice is to test with a reader of the language rather than trusting a number, and to err toward longer cue durations.

Right-to-left

Urdu, Arabic and Hebrew add direction to shaping. A caption containing an English word inside an Urdu sentence is bidirectional text, and getting it right depends on the renderer implementing the Unicode bidirectional algorithm. Most video editors do not. Sidecar files and libass are again the reliable routes.

Today

Type कि into your editor's title tool. If the vowel sign is on the right of the consonant, you have just learnt something important about your software.

The one thing to keep

Indic and Arabic scripts need a shaping engine to reorder and combine glyphs, and many video editors do not have one — so test with a conjunct and a reordering vowel, and use libass through FFmpeg or a sidecar file rather than the title tool.

Before you move on

A Hindi title typed into a video editor shows the vowel sign for 'i' to the right of its consonant instead of the left. The editor installs three different Devanagari fonts and the problem persists. What is happening?

Pick the one you would defend. Nobody sees your answer.

No ads. No data sale. No public scores on people. Ever.

© 2026 Addaly