这篇把上次挖的坑填上

ffmpeg正式篇的上一篇(传送门)说了,这一篇要让水印旋转起来,但是后面有事情一直没有时间搞,今天,它来了............

如果想实现旋转的功能,需要使用ffmpeg过滤器的链式功能,即:先把作为水印的图片旋转,再覆盖到视频上

第一步,实现旋转功能,具体的命令如下:

ffmpeg -i buck.mp4 -i s1.jpg -lavfi "[1:v]rotate=PI/6:c=none[out];[0:v][out]overlay=10:10" out.mp4 -y

而实际出来的效果如下:



可以看到,旋转功能已经实现了,但是却有两个问题:

  • 由于图片是长方形的,旋转后图片丢失了部分
  • 图片移走的部分是绿色的,完全无法直视

第二步:解决上面的两个问题,具体命令如下:

ffmpeg -i buck.mp4 -i s1.jpg -lavfi "[1:v]format=rgba,rotate='PI/6:c=0x00000000:ow=hypot(iw,ih):oh=ow'[out];[0:v][out]overlay=10:10" out.mp4 -y



思路是:

  • 调整水印宽高,根据勾股定律计算图片对角长度(hypot),将这个值设置为水印的宽高,这样,图片无论如何旋转,都不会超过设定的宽高,也就不会出现图片部分丢失的情况了
  • 将图片显示的像素格式转换为rgba格式,如果做过前端的小伙伴会很熟悉的,最后的a表示透明度,如此一来,c=0x00000000的作用就是将图片旋转后的背景变为白色且完全透明,这样就不会遮挡视频了

第三步:让旋转停不下来,具体命令如下:

ffmpeg -i buck.mp4 -loop 1 -i s1.jpg -lavfi "[1:v]format=rgba,rotate='PI/2*t:c=0x00000000:ow=hypot(iw,ih):oh=ow'[out];[0:v][out]overlay=10:10" -shortest out.mp4 -y



细心的小伙伴会发现,这次水印图片前面添加了-loop 1参数,具体为什么要添加相信看过第四篇(传送门)的小伙伴想必已经知道了,这里再重复一遍:因为水印图片默认在播放一次后就停下来,保留最后一帧,所以要让水印图片保持循环才行

小作业:让水印位置也随着时间动起来?

有问题请留言沟通,欢迎转载,转载请注明出处

欢迎点击个人博客地址:暖宝宝官方认证铲屎官

最新文章

  1. 本周进步要点20161023(含李笑来第二场live笔记要点)
  2. monkeyrunner 自动化测试 图片对比的实现
  3. objective-c(协议)
  4. Python文件操作题
  5. 关于jquery on方法进行事件绑定触发次数指数叠加的问题
  6. 【BZOJ】【2661】【Beijing WC2012】连连看
  7. HDU 5353 Average 糖果分配(模拟,图)
  8. Linux 锁
  9. 微软Azure 存储管理器的简单介绍
  10. Android中Chronometer 计时器和震动服务控件
  11. curl抓取信息
  12. MongoDB 副本集管理
  13. pc蛋蛋app开发定制
  14. 微信小程序与webview交互实现支付
  15. npm修改淘宝原
  16. Spring Cloud微服务笔记(三)服务治理:Spring Cloud Eureka快速入门
  17. Testing - 软件测试知识梳理 - 测试方法
  18. Java中CAS详解
  19. HDU 3455
  20. mac下svn无法上传.a文件的问题

热门文章

  1. Cookie 政策
  2. git 强制提交 & 覆盖 origin/master
  3. 「NGK每日快讯」2021.1.4日NGK第62期官方快讯!
  4. CodeMirror动态修改代码(关键: editor.getDoc().setValue(data); editor.refresh();)
  5. JDK环境解析,安装和目的
  6. 哪些原因会导致JAVA进程退出?
  7. C# 类中操作主窗体控件
  8. ElementUI使用总结
  9. C++ folly库解读(二) small_vector —— 小数据集下的std::vector替代方案
  10. HDOJ-1213(简单并查集)