问题描述
我想创建一个包含一些文本的视频.视频将只有0.5秒长.背景应该只是某种颜色,我可以用照片创建这样的视频,但是在任何地方都找不到没有照片的方法,只能使用文本来创建这样的视频.
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.
你能帮我吗?预先感谢
推荐答案
drawtext vs字幕
drawtext 比较简单,但是 subtitles 具有更好的样式和计时选项. 字幕可以自动换行,而 drawtext 不能自动换行.
drawtext is simpler, but subtitles has much better styling and timing options. subtitles can automatically wrap the text while drawtext cannot.
使用颜色过滤器作为背景,并使用 drawtext 过滤文本.例如320x240、10秒,25 fps,蓝色背景.文字大小为30,颜色为白色,居中.
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
将输出10秒的持续时间. - 请参阅所支持的颜色名称列表以及如何使用十六进制代码设置颜色.
- The
duration=10
will make a 10 second duration output. - See the list of supported color names and how to use a hex code to set color.
与上述相同,但是视频将通过删除duration=10
并添加-shortest
来自动匹配音频持续时间:
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
在文本后面带有透明框
另一个示例是文本后面有一个白框,不透明度为25%,填充为5像素:
With a transparent box behind text
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:boxcolor=white@0.25:fontcolor=white:x=(w-text_w)/2:y=(h-text_h)/2:text='Stack Overflow'" output.mp4
多行
Multiple lines
共有3种方法.您可以将两个绘画文本过滤器链接在一起,或者使用textfile
选项引用外部文本文件,或者在命令中添加换行符.
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.
ffmpeg -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
方法2:外部文本文件
文本文件text.txt
的内容如下:
Stack
Overflow
ffmpeg
命令:
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
方法3:命令中的换行符
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
带音频的字幕过滤器示例
subtitles filter example with audio
Using the color filter for the background and the subtitles filter for the text.
首先,创建 SRT (SubRip)文件.本示例将持续时间设置为10小时.持续时间实际上并不重要:它只需要比音频文件的持续时间更长.
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
然后运行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
-
或者,使用 Aegisub 创建 ASS (高级SubStation Alpha)字幕,您无需使用
force_style
.缺点是ASS比SRT格式复杂得多.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.如果要使用
force_style
,请参考ASS文件中的Format
和Style
行,以了解如何使用更多的force_style
选项,另请参见 Aegisub手册-驴标签,用于高级格式化.If you want to use
force_style
refer to theFormat
andStyle
lines in an ASS file to get an idea of how to use moreforce_style
options, and also see Aegisub Manual - Ass Tags for advanced formatting.如果要输出图像,则将
output.mp4
替换为-frames:v 1 output.png
.If you want an image output instead replace
output.mp4
with-frames:v 1 output.png
.这篇关于ffmpeg创建带有文本视频的空白屏幕的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!