<ol>
<li>Use Paint or GIMP to type a letter, save it as img-001.png</li>
<li>do the next letter and img-002.png</li>
<li>ffmpeg -framerate 60 -i img-%03d.png output.mp4</li>
<li>adjust the input frame rate</li>
</ol>

CC BY-SA 4.0
2020-10-10T12:59:41.923Z
2020-10-10T12:59:41.923Z
xer-rex
<p>Typewriter effect on ffmpeg using an .ass file, I generated this gif using the following line:</p>
<pre><code>ffmpeg -f lavfi -i color=size=640x480:rate=30:color=black -vf &quot;subtitles=typewriter.ass&quot; -t 8 ffmpeg_typewriter.gif
</code></pre>
<p><a href="https://i.sstatic.net/nOwgW.gif" rel="nofollow noreferrer"><img src="https://i.sstatic.net/nOwgW.gif" alt="enter image description here" /></a></p>
<p>I used the Eagisub program to get the parameters used in karaoke !! I created two styles (style1 and style2) both with different fonts, background etc. The shadow colors, background colors were chosen transparent because they appear however transparent, and the time of <strong>{\Kn}</strong> defines the character display time or time of the word or phrase, just change the <strong>n</strong> as long as you want !!! Too simple !! follow the file generated on Eagisub that can be easily edited by hand !! That's it thanks !!</p>
<pre><code>    [Script Info]
; Script generated by Aegisub 3.2.2
; http://www.aegisub.org/
Title: Default Aegisub file
ScriptType: v4.00+

[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: style1,Ubuntu Mono,100,&amp;H00FFFFFF,&amp;HFF0000FF,&amp;HFF000000,&amp;H00000000,0,0,0,0,100,100,0,0,1,0,0,4,10,10,10,1
Style: style2,DejaVu Sans Mono,37,&amp;H00FFFFFF,&amp;HFF0000FF,&amp;HFF000000,&amp;H00000000,0,0,0,0,100,100,0,0,1,0,0,4,10,10,10,1

[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:01.10,0:00:12.00,style1,,0,0,0,,{\pos(109,187.5)}{\k25}H{\k25}e{\k25}l{\k25}l{\k10}o{\k15}!{\k15}\NI{\k15}'{\k15}m{\k15} D{\k15}i{\k15}v{\k15}e{\k15}r{\k15}s{\k15}a{\k15}l{\k15}i{\k15}z{\k15}a{\k15}n{\k15}d{\k15}o{\k15}!{\k15}!
Dialogue: 0,0:00:05.50,0:00:09.40,style2,,0,0,0,,{\k15\pos(108,374)}Editing{\k15} a {\k15}.ass {\k15}with {\k15}Aegisub {\k15}to\N {\k15}generate {\k15}the {\k15}typewriter {\k15}effect.
</code></pre>

CC BY-SA 4.0
2023-05-17T11:54:36.453Z
Some info about the ass tags: https://www.nikse.dk/subtitleedit/formats/assa-override-tags
And same code but for creating mp4 :
`ffmpeg -f lavfi -i color=c=black:s=640x480:d=8 -vf "subtitles=typewriter.ass" -video_track_timescale 24000 ffmpeg_typewriter.mp4
`
Dorian Grv
CC BY-SA 4.0
2021-03-28T18:22:26.913Z
2021-03-31T19:01:10.803Z
2021-03-31T19:01:10.803Z
Thiago Condé
<p>After improving for my case what <a href="https://video.stackexchange.com/users/34364/thiago-cond%c3%a9">Thiago</a> said.</p>
<p>I arrived to this:</p>
<h1>First the ffmpeg code</h1>
<p>For mp4:</p>
<pre class="lang-sh prettyprint-override"><code>ffmpeg -f lavfi -i color=c=black:s=640x480:d=8 -vf &quot;subtitles=typewriter.ass&quot; -video_track_timescale 24000 output.mp4
</code></pre>
<h1>ASS file</h1>
<p>Then let's create a minimal ASS:
<a href="https://aegi.vmoe.info/docs/3.0/ASS_Tags/." rel="nofollow noreferrer">All Tags info are here</a></p>
<pre><code>[Script Info]
; Comment with &quot;;&quot;
ScriptType: v4.00+

[V4+ Styles]
Format: Name,  Fontname,  Fontsize,  PrimaryColour,  SecondaryColour,  OutlineColour,  BackColour,  Bold,  Italic,  Underline,  StrikeOut,  ScaleX,  ScaleY,  Spacing,  Angle,  BorderStyle,  Outline,  Shadow,  Alignment,  MarginL,  MarginR,  MarginV,  Encoding
Style: style1,  Arial,  30,  &amp;H00FFFFFF, &amp;HFF0000FF, &amp;HFF000000, &amp;H00000000, 0, 0, 0, 0, 100, 100, 0, 0, 1, 0, 0, 7, 20, 20, 20, 1


[Events]
Format: Layer,  Start,  End,  Style,  Name,  MarginL,  MarginR,  MarginV,  Effect,  Text
Dialogue: 0, 0:00:00.5, 0:00:12.00, style1, , 0, 0, 0, , Your text is here
</code></pre>
<p>Let's the text only as a typewriter style. I will let you play with the tags for your purpose.</p>
<p>Here is the simpler command I do to create the <code>\k</code> (karaoke) balise for each letter.
I use a random sequence between 10 and 25 centisecondes with an increment of 5 cs for each character.
You can run in in <code>bash</code> (check <a href="https://learn.microsoft.com/en-us/windows/wsl/install" rel="nofollow noreferrer">WSL for Windows</a>)</p>
<pre class="lang-sh prettyprint-override"><code>echo &quot;Let's try to create a type writer text rapidly&quot; | sed 's/./&amp;\n/g' | while read p; do r=$(seq 10 5 25| shuf | head -1); echo {\\k$r}$p; done | tr -d '\n' | sed 's/}{/} {/g'
</code></pre>
<p>which will output e.g.: <code>{\k10}L{\k15}e{\k25}t{\k25}'{\k25}s{\k25} {\k15}t{\k10}r{\k10}y{\k25} {\k15}t{\k15}o{\k15} {\k25}c{\k25}r{\k10}e{\k15}a{\k20}t{\k15}e{\k15} {\k10}a{\k25} {\k10}t{\k10}y{\k20}p{\k20}e{\k10} {\k25}w{\k20}r{\k25}i{\k15}t{\k15}e{\k25}r{\k15} {\k15}t{\k15}e{\k15}x{\k10}t{\k15} {\k25}r{\k20}a{\k10}p{\k15}i{\k25}d{\k15}l{\k25}y{\k20}</code></p>
<p>You just have to put it in your file :)</p>
<p><a href="https://i.sstatic.net/52OZF.gif" rel="nofollow noreferrer"><img src="https://i.sstatic.net/52OZF.gif" alt="Gif to show the result" /></a></p>

CC BY-SA 4.0
2023-05-17T12:42:36.670Z
2023-05-17T12:42:36.670Z
Dorian Grv
<p>How can I show letters one at the time using FFMpeg, I'm talking about something like this:</p>
<p><a href="https://i.sstatic.net/kdal8.gif" rel="nofollow noreferrer"><img src="https://i.sstatic.net/kdal8.gif" alt="enter image description here" /></a></p>
<p>Thank you.</p>

<ffmpeg>
ffmpeg: Make letters appear one at the time, like a typewriter
Davide Vitiello
# ffmpeg: Make letters appear one at the time, like a typewriter

(Asked by: username_0 on 2020-10-09)

How can I show letters one at the time using FFMpeg, I'm talking about something like this:

[![enter image description here](https://i.sstatic.net/kdal8.gif)](https://i.sstatic.net/kdal8.gif)

Thank you.

**Tags:** ffmpeg


---

## 3 answers

### Answer by username_1 on 2020-10-10. Score: 0 | Accepted answer

1. Use Paint or GIMP to type a letter, save it as img-001.png
2. do the next letter and img-002.png
3. ffmpeg -framerate 60 -i img-%03d.png output.mp4
4. adjust the input frame rate


---

### Answer by username_2 on 2021-03-28. Score: 3

Typewriter effect on ffmpeg using an .ass file, I generated this gif using the following line:
ffmpeg -f lavfi -i color=size=640x480:rate=30:color=black -vf "subtitles=typewriter.ass" -t 8 ffmpeg_typewriter.gif


I used the Eagisub program to get the parameters used in karaoke !! I created two styles (style1 and style2) both with different fonts, background etc. The shadow colors, background colors were chosen transparent because they appear however transparent, and the time of {\Kn} defines the character display time or time of the word or phrase, just change the n as long as you want !!! Too simple !! follow the file generated on Eagisub that can be easily edited by hand !! That's it thanks !!
    [Script Info]
; Script generated by Aegisub 3.2.2
; http://www.aegisub.org/
Title: Default Aegisub file
ScriptType: v4.00+

[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: style1,Ubuntu Mono,100,&H00FFFFFF,&HFF0000FF,&HFF000000,&H00000000,0,0,0,0,100,100,0,0,1,0,0,4,10,10,10,1
Style: style2,DejaVu Sans Mono,37,&H00FFFFFF,&HFF0000FF,&HFF000000,&H00000000,0,0,0,0,100,100,0,0,1,0,0,4,10,10,10,1

[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:01.10,0:00:12.00,style1,,0,0,0,,{\pos(109,187.5)}{\k25}H{\k25}e{\k25}l{\k25}l{\k10}o{\k15}!{\k15}\NI{\k15}'{\k15}m{\k15} D{\k15}i{\k15}v{\k15}e{\k15}r{\k15}s{\k15}a{\k15}l{\k15}i{\k15}z{\k15}a{\k15}n{\k15}d{\k15}o{\k15}!{\k15}!
Dialogue: 0,0:00:05.50,0:00:09.40,style2,,0,0,0,,{\k15\pos(108,374)}Editing{\k15} a {\k15}.ass {\k15}with {\k15}Aegisub {\k15}to\N {\k15}generate {\k15}the {\k15}typewriter {\k15}effect.

> **Comments:**
> **username_3**: Some info about the ass tags: https://www.nikse.dk/subtitleedit/formats/assa-override-tags And same code but for creating mp4 : `ffmpeg -f lavfi -i color=c=black:s=640x480:d=8 -vf "subtitles=typewriter.ass" -video_track_timescale 24000 ffmpeg_typewriter.mp4 `  

---

### Answer by username_3 on 2023-05-17. Score: 1

After improving for my case what Thiago said.
I arrived to this:
First the ffmpeg code
For mp4:
ffmpeg -f lavfi -i color=c=black:s=640x480:d=8 -vf "subtitles=typewriter.ass" -video_track_timescale 24000 output.mp4

ASS file
Then let's create a minimal ASS:
All Tags info are here
[Script Info]
; Comment with ";"
ScriptType: v4.00+

[V4+ Styles]
Format: Name,  Fontname,  Fontsize,  PrimaryColour,  SecondaryColour,  OutlineColour,  BackColour,  Bold,  Italic,  Underline,  StrikeOut,  ScaleX,  ScaleY,  Spacing,  Angle,  BorderStyle,  Outline,  Shadow,  Alignment,  MarginL,  MarginR,  MarginV,  Encoding
Style: style1,  Arial,  30,  &H00FFFFFF, &HFF0000FF, &HFF000000, &H00000000, 0, 0, 0, 0, 100, 100, 0, 0, 1, 0, 0, 7, 20, 20, 20, 1


[Events]
Format: Layer,  Start,  End,  Style,  Name,  MarginL,  MarginR,  MarginV,  Effect,  Text
Dialogue: 0, 0:00:00.5, 0:00:12.00, style1, , 0, 0, 0, , Your text is here

Let's the text only as a typewriter style. I will let you play with the tags for your purpose.
Here is the simpler command I do to create the \k (karaoke) balise for each letter.
I use a random sequence between 10 and 25 centisecondes with an increment of 5 cs for each character.
You can run in in bash (check WSL for Windows)
echo "Let's try to create a type writer text rapidly" | sed 's/./&\n/g' | while read p; do r=$(seq 10 5 25| shuf | head -1); echo {\\k$r}$p; done | tr -d '\n' | sed 's/}{/} {/g'

which will output e.g.: {\k10}L{\k15}e{\k25}t{\k25}'{\k25}s{\k25} {\k15}t{\k10}r{\k10}y{\k25} {\k15}t{\k15}o{\k15} {\k25}c{\k25}r{\k10}e{\k15}a{\k20}t{\k15}e{\k15} {\k10}a{\k25} {\k10}t{\k10}y{\k20}p{\k20}e{\k10} {\k25}w{\k20}r{\k25}i{\k15}t{\k15}e{\k25}r{\k15} {\k15}t{\k15}e{\k15}x{\k10}t{\k15} {\k25}r{\k20}a{\k10}p{\k15}i{\k25}d{\k15}l{\k25}y{\k20}
You just have to put it in your file :)


---

