I would like to create a video consisting of some text. The video will only be 0.5 seconds long. The background should just be some colour, I am able to create such video from a photo, but cant find anywhere how this could be done without a photo, just using text to create such video.
Can you help me ? Thanks in advance
This can be done using the drawtext or subtitles filters.
drawtext is simpler, but subtitles has much better styling and timing options. subtitles can automatically wrap the text while drawtext cannot.
Using the color filter for the background and the drawtext filter for the text. Example for a 320x240, 10 second, 25 fps, blue background. Text is size 30, colored white, and centered.
ffmpeg -f lavfi -i color=size=320x240:duration=10:rate=25:color=blue -vf "drawtext=fontfile=/path/to/font.ttf:fontsize=30:fontcolor=white:x=(w-text_w)/2:y=(h-text_h)/2:text='Stack Overflow'" output.mp4
duration=10
will make a 10 second duration output.Same as above, but video will automatically match audio duration by removing duration=10
and adding -shortest
:
ffmpeg -f lavfi -i color=size=320x240:rate=25:color=blue -i audio.m4a -vf "drawtext=fontfile=/path/to/font.ttf:fontsize=30:fontcolor=white:x=(w-text_w)/2:y=(h-text_h)/2:text='Stack Overflow'" -c:a copy -shortest output.mp4
Another example with a white box behind the text at 25% opacity with 5 pixel padding:
ffmpeg -f lavfi -i color=c=red:s=320x240:d=10 -vf "drawtext=fontfile=/path/to/font.ttf:fontsize=30:box=1:boxborderw=5:[email protected]:fontcolor=white:x=(w-text_w)/2:y=(h-text_h)/2:text='Stack Overflow'" output.mp4
It's easier to center the two lines with multiple drawtext instances (left image). Right image is from the external file and line break examples.
There are 3 methods. You can chain together two drawtext filters, or reference an external text file with the textfile
option, or add the line break in the command.
Alternatively, see the example below using the subtitles filter. This filter will automatically wrap long text.
drawtext
instancesffmpeg -f lavfi -i color=c=green:s=320x240:d=10 -vf "drawtext=fontfile=/path/to/font.ttf:fontsize=30:fontcolor=white:x=(w-text_w)/2:y=(h-text_h-text_h)/2:text='Stack',drawtext=fontfile=/path/to/font.ttf:fontsize=30:fontcolor=white:x=(w-text_w)/2:y=(h+text_h)/2:text='Overflow'" output.mp4
The contents of the text file, text.txt
, looks like this:
Stack
Overflow
The ffmpeg
command:
ffmpeg -f lavfi -i color=c=green:s=320x240:d=0.5 -vf "drawtext=fontfile=/path/to/font.ttf:fontsize=30:fontcolor=white:x=(w-text_w)/2:y=(h-text_h)/2:textfile=text.txt" output.mp4
ffmpeg -f lavfi -i color=c=green:s=320x240:d=0.5 -vf "drawtext=fontfile=/path/to/font.ttf:fontsize=30:fontcolor=white:x=(w-text_w)/2:y=(h-text_h)/2:text='Stack
Overflow'" output.mp4
x=0:y=0
(with 10 pixel padding x=10:y=10
)x=(w-text_w)/2:y=0
(with 10 px padding x=(w-text_w)/2:y=10
)x=w-tw:y=0
(with 10 px padding: x=w-tw-10:y=10
)x=(w-text_w)/2:y=(h-text_h)/2
x=0:y=h-th
(with 10 px padding: x=10:y=h-th-10
)x=(w-text_w)/2:y=h-th
(with 10 px padding: x=(w-text_w)/2:y=h-th-10
)x=w-tw:y=h-th
(with 10 px padding: x=w-tw-10:y=h-th-10
)Using the color filter for the background and the subtitles filter for the text.
First, create SRT (SubRip) file. This example sets the duration to 10 hours. The duration doesn't really matter: it just needs to be longer than the audio file duration.
1
00:00:00,000 --> 10:00:00,000
Stack Overflow
Then run ffmpeg
:
ffmpeg -f lavfi -i color=size=256x144:rate=15:color=blue -i "Audio File.m4a" -vf "subtitles=subtitles.srt:force_style='Alignment=10,Fontsize=30'" -c:a copy -movflags +faststart -shortest output.mp4
Alternatively, use Aegisub to create ASS (Advanced SubStation Alpha) subtitles and you won't have to use force_style
. Downside is that ASS is a much more complicated format than SRT.
If you want to use force_style
refer to the Format
and Style
lines in an ASS file to get an idea of how to use more force_style
options, and also see Aegisub Manual - Ass Tags for advanced formatting.
If you want an image output instead replace output.mp4
with -frames:v 1 output.png
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With