把文字写到视频上

小白:把文字写到视频上?还不简单,你要什么颜色,我有彩色笔。

花满楼:我是说,在视频帧上加入文字,不是让你在屏幕上画个大叉!

在视频帧上加入文字,可选择的办法有几个,比如可以找一找“编辑视频加广告”、或视频大师之类的工具,也可以写程序来实现(比如提取出所有帧,再对图片处理,再整合所有图片)。

本文介绍如何通过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

看一下滚动字幕的情况吧:

小白:你不准备讲解下参数吗?

花满楼:参数以:号来分割,具体含义不在这里介绍了,可以加群询问。

小白:…

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171215G0VTAW00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券