当前位置: 首页 > news >正文

【音视频】ffmpeg其他常用过滤器filter实现(6-4)

最近一直在研究ffmpeg的过滤器使用,发现挺有意思的,这里列举几个个人感觉比较有用的过滤器filter,如下是代码实现,同样适用于命令行操作:

1、视频模糊:通过boxblur可以将画面进行模糊处理,第1个参数2:2是对亮度进行滤波的参数,分别表示算法处理的[半径:强度];第2个参数1:1是对色度进行滤波的参数,分别表示算法处理的[半径:强度]

string filterDesc = "boxblur=2:2:1:1";

2、视频锐化:有2组参数,默认值是"5:5:1.0:5:5:0.0",其中第1组“5:5:1.0”是对亮点做锐化算法的参数,5:5表示的是锐化算法中像素判断的子窗口大小,范围是[3,23]之间的奇数,1.0是强度参数,范围[-1.5,1.5],值越大纹理越明显,则锐化程度越高,但是值过大容易产生高亮的像素,即容易过曝;第2组“5:5:0.0”是色度做锐化算法的参数,5:5表示的是锐化算法中像素判断的子窗口大小,范围是[3,23]之间的奇数,0.0是强度参数,范围[-1.5,1.5],值越大纹理越明显,则锐化程度越高,强度参数过大容易导致色差过大。注意当强度参数为负数,则表示的是通过unsharp来实现画面的模糊

string filterDesc = "unsharp=5:5:0.9:5:5:0.1";

3、对比度(contrast)、亮度(brightness)、饱和度(saturation):用eq滤波器实现,对比度范围[-2.0,2.0],默认0;亮度范围 [-1.0,1.0],默认0、饱和度,范围[0,3.0],默认1。注意:亮度为负数可以降低画面亮度,为正数可以提升画面亮度

string filterDesc = "eq=contrast=1.05:brightness=0.02:saturation=1.4";

4、视频裁剪:参数分别为“裁剪后的宽:裁剪后的高:裁剪后的X轴位置:裁剪后的Y轴位置”,iw是原始图片宽,ih原始图片高,如果不指定x和y默认居中裁剪

string filterDesc = "crop=iw/2:ih/2:iw/4:ih/4";

5、扩充视频边:可以扩充宽的两边或高的两边或四边,如下例子是扩展宽两边,且扩充颜色是黑色

string filterDesc = "pad=w=iw*1.4:h=ih:x=iw*0.2:y=0:color=black";

6、视频旋转:使用transpose,参数为0-逆时针旋转90度且按X轴翻转,1-顺时针旋转90度,2-逆时针旋转90度,3-顺时针旋转90且按X轴翻转,旋转之后分辨率会变化,比如从横屏19201080旋转90度,变为10801920

string filterDesc = "transpose=1";

7、视频旋转2:使用rotate,可以指定任意旋转角度,旋转之后的分辨率不变,比如19201080旋转60度之后,分辨率还是19201080,超出的四角不显示

string filterDesc = "rotate=PI/3";

8、垂直翻转:按照X轴翻转

string filterDesc = "vflip";

9、水平翻转:按照Y轴翻转

string filterDesc = "hflip";

最后调用avfilter_graph_parse_ptr(filterGraph, filterDesc.c_str(), &inputs, &outputs, nullptr)将过滤器描述filterDesc传入Graphics中,相关代码可以参考《【音视频】使用movie、drawtext过滤器实现图片、文字水印(6-3)》

相关文章:

  • uniapp踩坑 tabbar页面数据刷新了但视图没有更新
  • 基于python的爱心代码游戏实现 面试最常见问题(源码+内容介绍)
  • Git Stash: 管理临时更改的利器
  • 使用jdframe进行数据处理
  • 【C++笔记】初始模版和STL简介
  • 2024年云南省职业院校技能大赛-云计算应用
  • 隧道多并发IP代理:解锁网络新体验
  • Mac下利用vscode配置latex
  • 【android10】【binder】【3.向servicemanager注册服务】
  • vue框架学习 -- 日历控件 FullCalendar 使用总结
  • 汇总3个工作必备的Python自动化代码!完整代码分享!
  • 微信小程序开发系列之-实战搭建一个简单的待办事项小程序
  • Footprint Growthly Quest 工具:赋能 Telegram 社区实现 Web3 飞速增长
  • 使用AT command 修改手机APN
  • GB/T28181规范解读和技术实现
  • [LeetCode] Wiggle Sort
  • CentOS 7 防火墙操作
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • ES学习笔记(12)--Symbol
  • java多线程
  • laravel 用artisan创建自己的模板
  • Nodejs和JavaWeb协助开发
  • PHP 的 SAPI 是个什么东西
  • rc-form之最单纯情况
  • Redux 中间件分析
  • spring cloud gateway 源码解析(4)跨域问题处理
  • Sublime Text 2/3 绑定Eclipse快捷键
  • 基于游标的分页接口实现
  • 理解在java “”i=i++;”所发生的事情
  • 码农张的Bug人生 - 初来乍到
  • 普通函数和构造函数的区别
  • 前端面试总结(at, md)
  • 异步
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • ### RabbitMQ五种工作模式:
  • #C++ 智能指针 std::unique_ptr 、std::shared_ptr 和 std::weak_ptr
  • #HarmonyOS:Web组件的使用
  • #HarmonyOS:软件安装window和mac预览Hello World
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (poj1.3.2)1791(构造法模拟)
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (转)我也是一只IT小小鸟
  • (转)项目管理杂谈-我所期望的新人
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • *Django中的Ajax 纯js的书写样式1
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET 4.0中的泛型协变和反变
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .net 调用海康SDK以及常见的坑解释
  • .net 怎么循环得到数组里的值_关于js数组
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)