本文的示例将实现:把多个子视频根据配置参数在空间上合并成一个视频,并可以对每一路的视频和音频加入特效。示例包含了
1、如何利用avfilter编程实现视频合并以及加入各类不同滤镜的功能
具有较强的综合性。
最终效果如下:
对四路视频进行了合并实现了分屏效果,并且给第一路视频加了边缘检测效果,给最后一路视频加了反相效果。
在ffmpeg超详细综合教程(二)——为直播流添加滤镜 一文中讲述了如何利用avfilter为单路视频添加特效,其中还提到了如何通过事先写好固定的filter指令来把输入视频切分为四路再实现田字格的拼接效果,但以上这些都局限于单路视频的输入情况,本文将在此基础上进行扩展,真正实现多路视频输入的处理,并且可以更自由地添加特效、进行缩放等。
首先定义两个结构体,InputFile用于描述每一路输入视频,包含了文件名、位置索引、要添加的视频特效和音频特效。GlobalContext则描述了输出视频的宽、高、码率,其中的grid_num表示视频合并的几何方式,即采用田字格方式的话则grid_num=4,采用九宫格方式的话则grid_num=9。其中的video_num表示输入视频数,可以小于g