多媒体开发(6):滤镜实现各种图片效果 | Video-Filters | 变色

之前讲过使用FFmpeg的drawtext滤镜(把图片或文字加到视频上),而实际上,FFmpeg的滤镜很强大,远不止加字幕或加图片的功能。滤镜是很有趣的,可以把图片变模糊、变色、缩放旋转,等等。

本文介绍FFmpeg滤镜的使用。目的是让读者感受一下FFmepg的滤镜效果,这样在实际需要某种效果时,可以考虑使用FFmpeg。

小程这里直接使用FFmpeg的命令行来使用滤镜,不涉及写代码调用FFmpeg的内容,并且这里都是对图片进行滤镜处理,读者会看到很多有趣的处理效果。

但是,由于FFmpeg滤镜的内容很多,小程这里没有一一介绍,读者如果想详细了解这部分内容的话,可以查阅官方文档:
http://www.ffmpeg.org/ffmpeg-filters.html#Video-Filters

本文有较多图片。

(0)前提

先要让ffmpeg程序支持滤镜,对于FFmpeg的安装或编译,可参考其它文章,或可以关注“广州小程”微信公众号,里面有详细的介绍。

之前介绍过,让FFmpeg支持滤镜的话,需要在配置FFmpeg时指定使用avfilter:

./configure --enable-avfilter

最终编译出来的FFmepg是支持滤镜的,比如,小程的ffmpeg程序的滤镜信息是这样的:

这个ffmpeg程序已可用于滤镜处理,比如之前加字幕、加图片的操作,用的就是这个ffmepg程序。

在进行滤镜处理之前,先给出几张漂亮的原图:


最好看的当然是第三张。

(1)模糊

参数boxblur。

./ffmpeg -i 1.jpg -vf boxblur=2 blur1.jpg

值越大越模糊,以下是值分别为2、4、8的效果:


(2)变色

有几个办法。

(a)colorbalance

调整rgb某个维度的权重实现变色。

选项有三组,分别为rs/gs/bs、rm/gm/bm、rh/gh/bh。每一个选项都指定了目标颜色(rgb中的一个),s表现偏暗,m表现偏中间,h表现偏亮(且平滑)。

选项的值范围为[-1, 1],正数表示偏向目标颜色,负数表示远离目标颜色。

比如这三个命令:

./ffmpeg -i 1.jpg -vf colorbalance=rs=1 colorbalance1-1.jpg
./ffmpeg -i 1.jpg -vf colorbalance=rm=1 colorbalance1-2.jpg
./ffmpeg -i 1.jpg -vf colorbalance=rh=1 colorbalance1-3.jpg

得到的图片是这样的:


再比如把图片变得冷色一点:

./ffmpeg -i 2.jpg -vf colorbalance=rh=-0.6 colorbalance2.jpg

效果是这样的:

(b)colorchannelmixer

对rgba四个通道进行重新计算,并分别给定权重比例。

先看命令:

./ffmpeg -i 3.jpg -vf colorchannelmixer=.3:.4:.3:0:.3:.4:.3:0:.3:.4:.3 colorchannelmixer3.jpg
./ffmpeg -i 2.jpg -vf colorchannelmixer=.393:.769:.189:0:.349:.686:.168:0:.272:.534:.131 colorchannelmixer2.jpg

每个通道的权重从0到1,先给red的计算权重,即red=redrr + bluerb + greenrg +
alpha
ra,然后分别是green跟blue的计算权重。

上面两个命令对应的效果是这样的:

(c)hue

改变色调,相当在调色板上调色。

./ffmpeg -i 2.jpg -vf hue=h=30:s=1 hue_30.jpg

s为饱和度,范围为[-10,10],默认为1。h为角度,不同角度有不同的颜色布局(类比调色板),范围为[0,360],超过360则相当于从0开始,默认为0。

以下效果为s=1(默认),h分别为30、60、90、120、160、180、210、250、280、320、360时的效果(在360时,就是原图):










再比如,只调饱和度s:

./ffmpeg -i 2.jpg -vf hue=h=0:s=-5 hue_s-5.jpg

以下效果为h=0(默认),s分别为-10、-5、0、1、5、10时的效果(在1时,就是原图):





(d)lut/lutyuv/lutrgb

./ffmpeg -i 2.jpg -vf lutyuv="y=maxval+minval-val:u=maxval+minval-val:v=maxval+minval-val" lutyuv1.jpg
./ffmpeg -i 2.jpg -vf lutyuv="y=negval:u=negval:v=negval" lutyuv2.jpg
lutyuv用于yuv颜色空间。这两个命令的效果是一样的,都是反转,得到底片的效果:

./ffmpeg -i 2.jpg -vf lutyuv=y=negval lutyuv2.jpg
把亮度(y)反转,效果如下:

./ffmpeg -i 2.jpg -vf lutyuv="u=128:v=128" lutyuv3.jpg
把色度移除(uv),得到黑白图:

./ffmpeg -i 2.jpg -vf lutyuv="y=2*val" lutyuv4.jpg
提升亮度,效果如下:

./ffmpeg -i 2.jpg -vf lutyuv=‘u=1.2val:v=1.1val‘ lutyuv5.jpg
调整uv的值,效果如下:

(e)negate

反转,得到底片的效果,参数值为0或1,为1时表示把alpha通道也反转,默认为0。

./ffmpeg -i 3.jpg -vf negate=0 negate1.jpg

效果如下:

(f)swapuv

uv互换。

./ffmpeg -i 2.jpg -vf swapuv swapuv1.jpg

效果如下:

(3)裁剪

参数crop,支持裁剪多大、在哪个位置开始,也支持带变量的更复杂的裁剪。

./ffmpeg -i 1.jpg -vf crop=200:300:100:100 crop1.jpg
./ffmpeg -i 1.jpg -vf crop=w=200:h=300:x=100:y=100 crop2.jpg
这两个命令是一样的,都是在(100,100)的位置,裁剪200*300的大小,效果如下:

./ffmpeg -i 1.jpg -vf crop=400:500 crop2.jpg
这个命令是从中间开始,裁剪400*500的尺寸。

(4)去logo

参数delogo,在指定的区域作模糊处理,达到消除logo的效果。

./ffmpeg -i 2.jpg -vf delogo=x=0:y=0:w=50:h=50:band=5:show=1 delogo2.jpg
band为模糊的强度,show为1时显示模糊的区域框,省略show或值为0时不显示区域框。

效果如下:

(5)加边框

参数drawbox。

./ffmpeg -i 2.jpg -vf drawbox drawbox1.jpg
在边界画一个实心的黑框,效果如下:

./ffmpeg -i 2.jpg -vf drawbox=10:10:200:100:red@0.5 drawbox2.jpg
./ffmpeg -i 2.jpg -vf drawbox=x=10:y=10:w=200:h=100:color=red@0.5 drawbox2.jpg
这两个命令是一样的,0.5为边框的透明度(0到1),效果如下:

./ffmpeg -i 2.jpg -vf drawbox=x=10:y=10:w=300:h=230:color=pink@0.5:t=10 drawbox3.jpg
t为边框厚度,效果如下:

(6)画网格

参数drawgrid。

./ffmpeg -i 2.jpg -vf drawgrid=w=iw/3:h=ih/3:t=2:c=white@0.5 drawgrid1.jpg
画一个3*3的白色的厚度为2,透明度为0.5的网络,效果如下:

./ffmpeg -i 2.jpg -vf drawgrid=w=400:h=100:t=2:c=red@0.5 drawgrid2.jpg
画每个单元为400*100的网格,效果如下:

(7)添加字幕

参数为drawtext,这个小程之前已经详细介绍过了。

(8)画边缘

参数edgedetect。

./ffmpeg -i 2.jpg -vf edgedetect=low=0.1:high=0.4 edge2-1.jpg
./ffmpeg -i 2.jpg -vf edgedetect=low=0.5:high=0.8 edge2-2.jpg
low小于等于high,且值的范围为[0,1],是检测算法使用的阈值。

以上两个命令的效果是这样的:

再比如:

./ffmpeg -i 1.jpg -vf edgedetect=low=0.1:high=0.2 edge1-1.jpg
效果是这样的:

(9)eq效果

参数为eq,可以调整亮度、饱和度、对比度等。

./ffmpeg -i 2.jpg -vf eq=brightness=0.2 eq1.jpg
brightness为亮度,值范围为[-1,1],效果是这样的:

./ffmpeg -i 2.jpg -vf eq=contrast=1.5 eq2.jpg
contrast是对比度,值范围为[-2, 2],效果如下:

./ffmpeg -i 2.jpg -vf eq=saturation=0.1 eq3.jpg
saturation是饱和度,值范围为[0,3],默认是1,效果如下:

./ffmpeg -i 2.jpg -vf eq=gamma_r=0.2 eq4.jpg
调整gamma系数,范围为[0.1,10],默认是1,效果如下:

(10)缩放

参数scale。

./ffmpeg -i 3.jpg -vf scale=200:200 scale1.jpg
缩放为200*200,效果如下:

(11)等比放大

参数hqx。

./ffmpeg -i 2.jpg -vf hqx=4 hqx1.jpg
效果是尺寸等比放大4倍。

(12)横向倒置

参数hflip。

./ffmpeg -i 2.jpg -vf "hflip" hflip1.jpg
水平方向作镜像,效果是这样的:

(13)纵向倒置

参数vflip。

./ffmpeg -i 2.jpg -vf "vflip" vflip2.jpg
纵向作镜像,效果是这样的:

(14)加噪音

参数noise。

./ffmpeg -i 3.jpg -vf noise=alls=100:allf=t+u noise1.jpg
alls表示所有像素成分的强度,范围为[0,100],默认为0;allf表示所有像素成分的噪音类型,t为临时噪音,u为统一噪音。效果如下:

./ffmpeg -i 3.jpg -vf noise=alls=100:allf=a noise2.jpg
a表示平滑的平均噪音,效果如下:

./ffmpeg -i 3.jpg -vf noise=alls=100:allf=p noise3.jpg
p表示随机噪音,效果如下:

(15)加水印

参数overlay。

之前介绍在视频上加logo(图片或gif图)时讲解过。

(16)加底板

参数pad。

./ffmpeg -i 2.jpg -vf pad=500:500:40:40:violet pad1.jpg
./ffmpeg -i 2.jpg -vf pad=width=500:height=500:x=40:y=40:color=violet pad2.jpg
以上两个命令是一样的效果,增加一个500*500的底面板,(x,y)是原图摆放的位置:

(17)旋转

参数rotate。

./ffmpeg -i 1.jpg -vf rotate=PI/6 rotate1.jpg
效果如下:

(18)光晕

参数vignette。

./ffmpeg -i 2.jpg -vf vignette=PI/4 vignette1.jpg
效果如下:

FFmpeg的部分滤镜效果就介绍到这里,读者如果想详细了解,可以查看FFmpeg的滤镜文档:
<http://www.ffmpeg.org/ffmpeg-filters.html#Video-Filters&gt;



总结一下,介绍了如何使用FFmpeg命令行来调用滤镜处理,并且给出了处理的效果。这里只是小部分滤镜介绍,希望能让读者对滤镜有个感知,如果实际要使用到,则可以详细查看相应的文档说明。



原文地址:https://blog.51cto.com/13136504/2364944

时间: 2024-08-24 12:05:56

多媒体开发(6):滤镜实现各种图片效果 | Video-Filters | 变色的相关文章

第23章 CSS边框图片效果

本章学习日后开发使用参考一下内容 https://www.qianduan.net/css3border-image-bian-kuang-tu-xiang-xiang-jie/ 或W3C 或者百度 未排版的PDF转WORD(不想排版了) 第 23章 CSS3边框图片效果学习要点:1.属性初探2.属性解释3.简写和版本 本章主要探讨 HTML5中 CSS3中边框图片背景的效果,通过这个新属性让边框更加的丰富多彩.一.属性解释CSS3提供了一个新的属性集合,用这几个属性可以嵌入图片形式的边框.这样

IOS开发系列--无限循环的图片浏览器

--UIKit之UIScrollView 概述 UIKit框架中有大量的控件供开发者使用,在iOS开发中不仅可以直接使用这些控件还可以在这些控件的基础上进行扩展打造自己的控件.在这个系列中如果每个控件都介绍一遍确实没有必要,所谓授人以鱼不如授人以渔,这里会尽可能让大家明白其中的原理,找一些典型的控件进行说明,这样一来大家就可以触类旁通.今天我们主要来看一下UIScrollView的内容: UIView UIScrollView 实战--图片浏览器 UIView 在熟悉UIScrollView之前

Windows Phone - 多媒体开发

这里有一些比较好的wp源码下载:http://code.662p.com/list/14_1.html 前言在上篇文章讲述了如何新建一个Silverlight for Windows Phone的应用程序,这篇文章讲述如何在WindowsPhone上进行多媒体应用的开发.同时介绍当前Windows Phone Beta版本所支持媒体文件格式,以及讲述WindowsPhone多媒体开发的一些限制性和注意点.MediaElement控件的使用使用Silverlight开发一般的多媒体应用,使用Med

iOS开发之滤镜的使用技巧(CoreImage)

一.滤镜的内容和效果是比较多并且复杂的 ,学习滤镜需要技巧 如下: 两个输出语句解决滤镜的属性选择问题: 1.查询效果分类中包含什么效果按住command 点击CIFilter 进入接口文件 找到第128行-148行全部都是 效果分类 2.选择其中某一个分类拷贝NSLog -> [CIFilter filterNamesInCategory:刚才拷贝的分类]; -> 打印出来的 是这个分类包含的所有效果 -> 拷贝选择其中的某一个效果 3.查询使用的效果中可以设置什么属性(KVC) at

Drupal开发时如何使用远端图片减轻工作量

如果你有遇到过较大规模的 Drupal 项目,但可能已经发现了当 files 目录过于巨大对开发所带来的巨大挑战.如何让开发服务器(或者你的个人电脑)与这些文件保持同步是件非常痛苦的事情,但如果不这样做,往往又会因为无法使用用户上传的文件或附件,使网站开发过程中的很多重要的问题无法被发现. 要解决这个问题有非常多的办法,但要么非常慢,要么非常复杂.例如使用Drush命令或者使用脚本程序将网站的文件下载后再上传到本地开发环境,甚至有人会考虑使用FTP执行这样的操作(请千万不要这样做).尽管这些办法

史上最全的iOS多媒体开发博客

这篇博客是史上最全的iOS多媒体开发博客,包括视频.音频.图片等多套API,如果要实现多媒体的功能,点进去找找有用的东西吧:http://www.cnblogs.com/kenshincui/p/4186022.html#autoid-0-0-0..

jQuery框架开发一个最简单的幻灯效果

在线演示 在这个课程中,我们将介绍如何使用jQuery来开发一个最简单的图片幻灯效果. 立刻观看互动课程:jQuery框架开发一个最简单的幻灯效果 阅读原文:jQuery框架开发一个最简单的幻灯效果 jQuery框架开发一个最简单的幻灯效果

前端开发不容错过的jQuery图片滑块插件(转)

作为前端开发者,我们会碰到很到各种各样的jQuery插件.今天要分享的几款jQuery图片滑块插件,也就是jQuery焦点图插件,基本上会在每个网站都有应用,可以下载看看,也许你可以用到. 1.jQuery多图并列焦点图插件 这是一款比较特别的jQuery焦点图插件,它允许你自己定义当前画面的图片数量,在这个演示中,我们定义了3张图片一起显示.和其他jQuery焦点图一样,这款焦点图插件的图片下方也有一排小按钮,可以任意切换图片.另外,每张图片也都有文字描述. 在线演示  /  源码下载 2.j

Android多媒体开发介绍(转)

Android多媒体开发介绍 转自:http://blog.csdn.net/reiliu/article/details/9060557 一.       多媒体架构 基于第三方PacketVideo公司的OpenCORE来实现,支持所有通用的音频/视频/静态图像格式,包括:MPEG4.H.264.MP3.AAC.AMR.JPG.PNG.GIF等.从功能上分为两部分,一是音/视频的回放(PlayBack),二是音视频的纪录(Recorder). CODEC(编解码器)使用OpenMAX 1L