一年前写过一篇文章,讲的是用FFmpeg制作图片视频流,大致的思路是:先将单张图片转成一个3秒的视频文件,再在视频的首尾分别加上淡入、淡出效果;每张图片都这么处理后,再把所有小视频文件连接、合并成一个大视频文件。图示:

这种方法比较初级!今天,咱们玩一个更高级的。想法是,怎么让相邻两张图片之间有一个交叉转场效果?就是这样的效果:

我们拿3张图片素材来演示。分四步来制作。

第一步:把图片素材分别转成3秒长度的小视频文件。执行的3条命令如下:

ffmpeg -f image2 -framerate 0.33333 -i D:\MTest\IMG01.jpg  -s 720x480 -r 15 -y D:\MTest\Vid1.mp4

ffmpeg -f image2 -framerate 0.33333 -i D:\MTest\IMG02.jpg  -s 720x480 -r 15 -y D:\MTest\Vid2.mp4

ffmpeg -f image2 -framerate 0.33333 -i D:\MTest\IMG03.jpg  -s 720x480 -r 15 -y D:\MTest\Vid3.mp4

稍微解释一下:单张图片作为输入源,帧率framerate为什么是0.33333?因为我们想把它变成3秒长度的视频,1除以3就得到了0.33333。如果以帧率的概念来理解,就说是每秒输出0.33333张图片,这是没有实际意义的——权当控制输入源时长之用吧。最终生成的MP4视频文件都将画面尺寸统一缩放为720x480,帧率都是15fps。

第二步:计算最终视频文件的时长,并加工包含第一张图片的小视频文件与之等长。为什么要有这一步?难道不是将上述小视频文件依次叠加效果后连接起来就可以了吗?你可以试试……算一下:3个3秒的视频文件连接起来是9秒,扣掉两段相邻视频的重叠部分,最终视频的时长应该是7秒。我们需要把Vid1.mp4扩展成7秒:前3秒是图片素材内容,后4秒用白色填充,看起来是这样的:

我们分两步来要完成上面的加工处理。先生成一段4秒的纯白色视频文件:

ffmpeg -t 4 -f lavfi -i color=c=white:s=720x480:r=15 -y D:\MTest\pure_white.mp4

然后将它接在Vid1.mp4后面,生成我们想要的7秒时长的Vid0_1.mp4文件:

ffmpeg -i D:\MTest\Vid1.mp4 -i D:\MTest\pure_white.mp4 -filter_complex "concat=n=2:v=1:a=0" -y D:\MTest\Vid0_1.mp4

第三步:将第一、第二个视频叠加相连。我们需要在第一个视频的最后一秒加上淡出效果,在第二个视频的第一秒加上淡入效果,这两部分是要通过overlay滤镜叠加在一起的。有点复杂,所以用到了复杂滤镜filter_complex。命令行如下:

ffmpeg -i D:\MTest\Vid0_1.mp4 -i D:\MTest\Vid2.mp4 -filter_complex [0:v]fade=t=out:st=2:d=1[v0];[1:v]colorkey=#00FFFFFF:0.01:1,fade=t=in:st=2:d=1[v1];[v0][v1]overlay=x='if(gte(t,2),0,NAN)':y=0 -y D:\MTest\Vid1_2.mp4

画一条时间线,再详细解释一下:在第一个视频流上(以[0:v]来引用),从第2秒开始加上fade out效果,持续时间1秒,这个流的输出定义为新的标签[v0]。在第二个视频流上(以[1:v]来引用),从第2秒开始加上fade in效果,持续时间1秒,这个流的输出定义为新的标签[v1]。最后,将[v0]和[v1]两个流做overlay,生成Vid1_2.mp4文件。

有个小疑问:为什么要在第二视频上额外加一个colorkey滤镜?(关于colorkey的用法可以参考以前的一篇文章。)大家不妨把这个滤镜去掉后看看效果。如果没有colorkey,第二个视频会在第2-3秒之间完全覆盖在第一个视频之上,也就是说,第一个视频的最后一秒就透不出来了。还有一个问题,我们怎么控制第二个视频在第2秒这个时间点开始做overlay呢?关键看overlay的起始坐标点(x,y)。这里很高级地用到了表达式:if(gte(t,2),0,NAN)——先来看gte(t,2),意思是当时间点大于或等于2的时候返回1,否则返回0。再来看外面一层的if(x,y,z),意思是如果x的值不为0则返回y,否则返回z。综合来看,就是在[0,2)这个区间,overlay的起始坐标是(NAN,0),这是一个无效值,所以不做叠加;而当t大于或等于2时,第二个视频就会在画面的左上角原点(0,0)开始做叠加了。

第四步:在前一步生成的视频基础上叠加第三个视频。方法与第三步类似,只是注意第三个视频开始overlay的时间点是第4秒。命令行如下:

ffmpeg -i D:\MTest\Vid1_2.mp4 -i D:\MTest\Vid3.mp4 -filter_complex [0:v]fade=t=out:st=4:d=1[v0];[1:v]colorkey=#00FFFFFF:0.01:1,fade=t=in:st=0:d=1[v1];[v0][v1]overlay=x='if(gte(t,4),0,NAN)':y=0 -y D:\MTest\Vid1_2_3.mp4

大功告成,来看看效果吧:

以前的初级方法-9s

今天的高级方法-7s

FFmpeg滤镜:制作图片视频流(续)相关推荐

  1. css背景图片高斯模糊_CSS3 filter(滤镜) 制作图片高斯模糊无需JS

    本帖最后由 fengrui99 于 2019-7-8 11:20 编辑 这是一个寂寞的工作日,因为没有女盆友所以很寂寞,因为很寂寞所以来写教程.希望再看教程的你也是单身!啊,知道你是单身枫瑞贼开心!爽 ...

  2. html做图片模糊效果,CSS3 filter(滤镜) 制作图片高斯模糊无需JS

    CSS3 filter(滤镜) 制作图片高斯模糊无需JS 这是一个寂寞的工作日,因为没有女盆友所以很寂寞,因为很寂寞所以来写教程.希望再看教程的你也是单身!啊,知道你是单身枫瑞贼开心!爽的一B!!!起 ...

  3. ps实例二:使用高斯滤镜制作图片阴影效果?

    实例二:使用高斯滤镜制作图片阴影效果 1.ctrl+单击图层,选中图片选区: 2.在该图层下面,新建一图层: 3.填充灰色:alt+delete(如果快捷键不行,就用油漆桶填充也行) 4.ctrl+D ...

  4. FFmpeg滤镜:制作图片视频流(续2)

    前几日登录CSDN,发现有100多条私信.哎哟喂,确实很久没来这里了-其中有一条是这样的: 点开链接看了新娘,哦,不,看了示例视频,其实就是一个Zoom-out效果.既然有人诚心诚意地发问,那我就大发 ...

  5. FFmpeg滤镜:制作图片视频流

    iPhone相册有个"为你推荐"功能,它会挑选一些照片形成一个主题,点击后可以像视频一样播放.那么,怎样才能把多张照片转成一个视频文件呢? 使用FFmpeg可以这么来做: ffmp ...

  6. ffmpeg delogo滤镜去除图片水印

    之前本人写过ffmpeg movie滤镜添加图片水印,ffmpeg 非movie滤镜添加图片水印 今天用delogo滤镜去掉图片水印,ffmpeg命令行如下: ffmpeg -i in-compute ...

  7. PS置换滤镜制作逼真水面倒影的风景图片

    PS置换滤镜制作逼真水面倒影的风景图片 用PS置换滤镜制作水面倒影的风景图片大致有三个大的步骤:首先需要用滤镜及变形工具做出水纹效果,并单独保持为PSD文件.然后给素材图片制作倒影,不规则的图片需要分 ...

  8. 视频特效-使用ffmpeg滤镜

    视频特效-使用ffmpeg滤镜 前言 ffmpeg的滤镜分为简单滤镜和复杂滤镜. 复杂滤镜存在多个输入和多个输出如图: 在命令行中可以通过 -filter_complex 或 -lavfi 来使用. ...

  9. ffplay使用ffmpeg滤镜实现倍速播放

    第一章 自定义播放器接口 第二章 倍速播放(本章) ______第一节 sonic实现倍速播放 ______第二节 soundtouch实现倍速播放 ______第三节 ffmpeg滤镜实现倍速播放( ...

最新文章

  1. 这谁顶得住?mybatis十八连环问!
  2. LeetCode 53. Maximum Subarray--动态规划--C++,Python解法
  3. 从创建进程到进入 main 函数,发生了什么?
  4. CentOS 7如何设置Linux开机自动获取IP地址
  5. 学习在 ArcEngine 中使用 Geoprocessing
  6. .net Core 相关问题
  7. ArcGIS实验教程——实验二十一:DEM分析
  8. mysql虚拟列表_「前端进阶」高性能渲染十万条数据(虚拟列表)
  9. 对抗神经机器翻译:GAN+NMT 模型,中国研究者显著提升机翻质量
  10. 选下拉框的的值对应上传相应的图片_vue.js如何拿到多种类型表单值提交到后台,包含上传图片、单选、复选、文本框、下拉列表框...
  11. oc语言学习之基础知识点介绍(三):类方法、封装以及继承的介绍
  12. 分布式系统关注点(6)——「负载均衡」到底该如何实施?
  13. PHP之JWT接口鉴权(二) 自定义错误异常
  14. 一个手机用c网可以打开网站切换到g网就打不开_推荐一些设计师常用网站!!!...
  15. EndnoteX8教程学习(一)
  16. Teclast X80h安装linux,安装android-x86教程。(没法再贴吧发表,只有百度网盘在线阅读...
  17. python中拼音怎么用_Python 中拼音库 PyPinyin 的用法【华为云技术分享】
  18. win7系统用笔记本做wifi热点
  19. oracle中去掉回车、Tab、制表、空格等特殊符号
  20. 英国Foresight太阳能基金卖股集资 投资200MW光伏项目

热门文章

  1. 一键代理浏览器_支持IPv6的防关联指纹浏览器 VMLogin 支持模拟电脑名称、支持修改MAC地址、支持模拟真人输入、支持自定义经纬度...
  2. 十进制与8421码、5421码、2421码、余3码之间的转换
  3. 吊打tomcat的高性能web服务器undertow
  4. 解决MacBook浏览器打开北京工作居住证系统问题
  5. [读书笔记] 用户增长方法论
  6. 如何在保持营养均衡的同时不长肉
  7. Excel2016 无法粘贴图片
  8. [分享]深思--求索人的心智 就是求索长青基业[分享]深思--求索人的心智 就是求索长青基业...
  9. 机器学习工程师 - Udacity 项目:实现一个狗品种识别算法App
  10. 微信小游戏Banner广告