ContentRoofLab

LabNote 03Speech

Sixty seconds is a different length in every language

Ask for a 60-second video and you should get a 60-second video, in any of the eleven languages ContentRoof speaks. We counted words. That was the mistake.

Abstract

Writing about 2.4 words per second gave videos anywhere from 44 to 105 seconds when 60 were asked for. Words are the wrong unit: the voices spend between 0.074 s (French) and 0.13 s (Arabic) per written letter, so a minute holds 811 letters of French but 462 of Arabic. We now estimate a script's length from its letters with each language's measured rate and fit the script before it is recorded: 43–62 s. The same work measured how clearly our offline voices read, and found Arabic at a 10.1% character error rate; a voice cloned from the same speaker reads it at 0.0%.

43–62 sasked for 60 s, across eleven languages (was 44–105 s)
1.75×more letters of French than of Arabic fit in a minute
10.1% → 0.0%Arabic character errors, offline voice and its cloned twin
A frame of an Arabic explainer about volcanoes
A frame of a Spanish explainer about the colour of the sky
A frame of an Arabic explainer about dreams
Specimens. Arabic and Spanish videos made by ContentRoof. The same minute holds very different amounts of text in each.

The unit was wrong

Our writer used to aim for about 2.4 words per second. In English that is roughly right. Across eleven languages, videos asked to be 60 seconds came out anywhere from 44 to 105 seconds.

A word is not a unit of time. German packs whole phrases into one word; Arabic attaches "and", "by" and "the" to the word that follows. Every voice also has its own pace. What does come out steady, for one voice in one language, is the time it spends per written letter.

Seconds per letter

We recorded about fifty scripts across the languages with each default voice and measured seconds of finished video per letter of narration, spaces left out.

Figure 1How much text fits in sixty seconds

French8110.074 s a letterPortuguese7590.079 s a letterGerman7500.08 s a letterPolish7500.08 s a letterRussian7500.08 s a letterSpanish7140.084 s a letterItalian6670.09 s a letterUrdu6320.095 s a letterEnglish6120.098 s a letterHindi5170.116 s a letterArabic4620.13 s a letter
French8110.074 s a letterPortuguese7590.079 s a letterGerman7500.08 s a letterPolish7500.08 s a letterRussian7500.08 s a letterSpanish7140.084 s a letterItalian6670.09 s a letterUrdu6320.095 s a letterEnglish6120.098 s a letterHindi5170.116 s a letterArabic4620.13 s a letter
Letters of narration (spaces left out) in 60 seconds of finished video with each language's default voice: 60 divided by the measured seconds per letter. Same minute, very different scripts.
Data
Letters per minute
French811
Portuguese759
German750
Polish750
Russian750
Spanish714
Italian667
Urdu632
English612
Hindi517
Arabic462

The spread is large. A minute holds 811 letters of French but 462 of Arabic, 1.75 times as many. A writer that targets words, or even characters, without the language's own rate will miss in opposite directions in different languages.

Now the script is estimated before it is recorded: letters times the language's rate. If the estimate is more than 10% over, the narration is shortened, cutting the least important sentences. If it is under 80% of the target, it is lengthened, but only with details from the research notes the script was written from, never new facts. For a translated video the English draft is fitted first, then the translation again in its own language.

Figure 2Videos asked to be 60 seconds long

30 s45 s60 s75 s90 s105 sasked for: 60 sCounting words (2.4 asecond)44105Letters × each language'srate, then fitted4362
30 s45 s60 s75 s90 s105 sasked for: 60 sCounting words (2.4 a second)44105Letters × each language's rate, then fitted4362
The shortest and longest finished video in each round of tests, all asked for 60 seconds, in the eleven languages.
Data
FromTo
Counting words (2.4 a second)44 s105 s
Letters × each language's rate, then fitted43 s62 s

Asked for 60 seconds, videos now come out between 43 and 62 seconds in all eleven languages.

Reading numbers the way each language says them

Length was not the only thing the voices got wrong. The speech engine under our offline voices reads numbers by rule, and the rules were not always the language's own:

Language Written Was read as Now read as
German 1899 eintausend achthundert neunundneunzig achtzehnhundert neunundneunzig, as Germans say years
German 51,500 (English style) einundfünfzig Komma fünf null null written 51.500 and read as fifty-one thousand five hundred
Urdu 1929 a number in the thousands انیس سو انتیس, "nineteen twenty-nine"
Urdu 0.44 garbled صفر اعشاریہ چار چار

The screen keeps the digits; only what the voice says is spelled out.

Clearer voices

To check clarity we had a speech recogniser transcribe each voice reading the same sentences and counted the character errors. Our offline Arabic voice scored 10.1%: one character in ten misheard. Arabic is the second language of our users.

Figure 3How clearly each voice reads

Arabic · our offline voice10.1%Arabic · open model, its built-in voice2.4%Arabic · cloned twin of the offline voice0.0%Urdu · our offline voice2.9%Urdu · an online neural voice2.0%Urdu · cloned twin1.2%German · our offline voice1.1%German · open model, its built-in voice5.1%German · cloned twin1.1%
Arabic · our offline voice10.1%Arabic · open model, its built-in voice2.4%Arabic · cloned twin of the offline voice0.0%Urdu · our offline voice2.9%Urdu · an online neural voice2.0%Urdu · cloned twin1.2%German · our offline voice1.1%German · open model, its built-in voice5.1%German · cloned twin1.1%
Character error rate when a speech recogniser (Whisper large-v3-turbo) transcribes each voice reading the same test sentences: lower is clearer. Blue: the cloned twin of our offline voice, recorded from a short clip of the same speaker.
Data
Character errors
Arabic · our offline voice10.1%
Arabic · open model, its built-in voice2.4%
Arabic · cloned twin of the offline voice0.0%
Urdu · our offline voice2.9%
Urdu · an online neural voice2.0%
Urdu · cloned twin1.2%
German · our offline voice1.1%
German · open model, its built-in voice5.1%
German · cloned twin1.1%

An open multilingual voice model can clone a voice from a few seconds of audio. Given a short clip of our own Arabic voice, it read the test sentences with no character errors at all, in the same voice. Urdu went from 2.9% to 1.2%, German stayed at 1.1% with a more natural delivery.

The cloned voices are slow on a CPU, so for now they wait for graphics cards before they can be used in every video.

Method

Rates
Seconds of finished video per letter of narration, per language and default voice, measured over about 50 recordings.
Lengths
Scripts asked for 60 s in the eleven languages, written, recorded and measured end to end.
Voices
The same three test sentences per language, transcribed by Whisper large-v3-turbo and scored by character error rate against the script, on a 4-core CPU.
Twins
An open multilingual voice model, given a few seconds of our offline voice to clone.

Limits

  • The length tests are a modest number of scripts per language: enough to see the spread close, not to draw a distribution.
  • Character error rate measures clarity, not how human a voice sounds. Naturalness was judged by listening.
  • The cloned voices take about 5–10 s of CPU per second of speech. On our 8-core server one Urdu export would hold the queue for over an hour, so they are off in production until they run on a GPU; Urdu, Arabic and German videos currently use online neural voices.
  • Three test sentences per language is a small sample for error rates near zero.

Make a 60-second video in your language →