我想制作一个由一些文字组成的视频。视频只有0.5秒长。背景应该是一些颜色,我能够从照片创建这样的视频,但无法在任何地方找到如何在没有照片的情况下完成此操作,只需使用文本来创建此类视频。
你能帮帮我吗?提前致谢答案 0 :(得分:39)
使用color
video source filter和drawtext
video filter。
ffmpeg -f lavfi -i color=c=blue: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
d=0.5
将产生0.5秒的持续时间输出。另一个示例,文本后面有一个白色框,不透明度为25%,带有5像素填充:
ffmpeg -f lavfi -i color=c=red:s=320x240:d=0.5 -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
使用多个drawtext实例(左图)使两条线居中更容易。右图来自外部文件和换行符示例。
您可以将两个drawtext
过滤器链接在一起,或使用textfile
选项引用外部文本文件,或在命令中添加换行符。
drawtext
个实例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-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
文本文件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
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
如果您想要图像输出,请将output.mp4
替换为-frames:v 1 output.png
。
使用subtitles
filter是另一种方法。