小白:把文字写到视频上?还不简单,你要什么颜色,我有彩色笔。
花满楼:我是说,在视频帧上加入文字,不是让你在屏幕上画个大叉!
在视频帧上加入文字,可选择的办法有几个,比如可以找一找“编辑视频加广告”、或视频大师之类的工具,也可以写程序来实现(比如提取出所有帧,再对图片处理,再整合所有图片)。
本文介绍如何通过ffmpeg来做到在视频上加文字。
小白:ffmpeg?是你之前介绍的整车体验,还是要自己写程序?
花满楼:这次是整车体验,也就是使用ffmpeg命令来实现。
本文使用FFmpeg的drawtext滤镜来实现添加字幕。
小白:什么是滤镜?
花满楼:可以理解为视频的编辑功能,是FFmpeg强大的功能之一。
(1)支持滤镜filter
先要保证ffmpeg程序支持filter。否则在使用drawtext时,会看到这样的提示:
这时,查看FFmpeg编译配置后生成的头文件config.h,可以看:
#define CONFIG_DRAWTEXT_FILTER 0
是还没有打开drawtext滤镜的表现。
先安装yasm:
brew install yasm
小白:yasm是什么?
花满楼:汇编编译器。可以参考我之前介绍的“组成FFmpeg,为我所用”那篇文章,里面是编译FFmpeg的内容。
然后,配置FFmpeg(drawtext依赖于libfreetype):
./configure --enable-libfreetype --enable-avfilter
这时,在配置输出中,可以看到:
而此时,config.h中是这样:
#define CONFIG_DRAWTEXT_FILTER 1
编译出ffmpeg工具即可:
make
查一下ffmpeg工具,有没有支持到drawtext滤镜:
./ffmpeg -filters
可以看到,已经有这一项:
(2)使用drawtext滤镜
以一个视频为例,在没有加字幕前,这个视频是这样的:
使用ffmpeg命令,这样加上字幕:
左右滚动的字幕:
./ffmpeg -i ~/Desktop/l.mp4 -vf drawtext="fontfile=/Library/Fonts/YaHei.Consolas.1.11b.ttf:fontcolor=white:fontsize=18:shadowy=0:\x='if(gte(t,1), (main_w-mod(t*100,main_w)), NAN)':y=(main_h-line_h-30):text='关注编程牛人,迅速变编程大牛。'" out.mp4
固定位置的字幕:
./ffmpeg -i ~/Desktop/l.mp4 -vf drawtext="fontfile=/Library/Fonts/YaHei.Consolas.1.11b.ttf:fontcolor=yellow:fontsize=18:shadowy=0:x=(w-tw)/2:y=(main_h-line_h-20):text='关注编程牛人,迅速变编程大牛。'" out.mp4
看一下滚动字幕的情况吧:
小白:你不准备讲解下参数吗?
花满楼:参数以:号来分割,具体含义不在这里介绍了,可以加群询问。
小白:…
领取专属 10元无门槛券
私享最新 技术干货