把文字写到视频上

花满楼原创


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

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

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

本文介绍如何通过ffmpeg来做到在视频上加文字。

小白:ffmpeg?是你之前介绍的整车体验,还是要自己写程序?

花满楼:这次是整车体验,也就是使用ffmpeg命令来实现。

本文使用FFmpeg的drawtext滤镜来实现添加字幕。

小白:什么是滤镜?

花满楼:可以理解为视频的编辑功能,是FFmpeg强大的功能之一。

(1)支持滤镜filter

先要保证ffmpeg程序支持filter。否则在使用drawtext时,会看到这样的提示:
找不到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

这时,在配置输出中,可以看到:
配置增加了drawtext

而此时,config.h中是这样:

#define CONFIG_DRAWTEXT_FILTER 1

编译出ffmpeg工具即可:
make

查一下ffmpeg工具,有没有支持到drawtext滤镜:

./ffmpeg -filters

可以看到,已经有这一项:
是否支持了drawtext

(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

看一下滚动字幕的情况吧:
加上字幕的演示效果

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

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

小白:…

posted on 2017-12-15 18:06 奇哥-十年程序 阅读() 评论() 编辑 收藏

版权声明:本文为freeself原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:http://www.cnblogs.com/freeself/p/8044364.html