python过滤器函数,过滤函数是什么

ffmpeg-python中文文档(三)——API参考

表示上游节点的传出边缘;可以用来创建更多的下游节点。

我们提供的服务有:网站建设、做网站、微信公众号开发、网站优化、网站认证、大城ssl等。为上千家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的大城网站制作公司

输入文件 URL (ffmpeg -i option)

在一个 ffmpeg 命令行中包含所有给定的输出

输出文件地址

不询问就覆盖输出文件(ffmpeg -y 选项)

在指定文件上运行 ffprobe 并返回输出的 JSON 表示。

构建用于调用 ffmpeg 的命令行。

构建要传递给 ffmpeg 的命令行参数。

为提供的节点图调用 ffmpeg 。

参数

为提供的节点图异步调用 ffmpeg。

参数

例子

运行和流式输入:

运行并捕获输出:

使用 numpy 逐帧处理视频:

通过重新混合颜色通道来调整视频输入帧。

连接音频和视频流,将它们一个接一个地连接在一起。

筛选器适用于同步视频和音频流的片段。所有段必须具有每种类型的相同数量的流,这也是输出时的流数。

参数

裁剪输入视频。

参数

在输入图像上绘制一个彩色框。

参数

使用 libfreetype 库从视频顶部的指定文件中绘制文本字符串或文本。

要启用此过滤器的编译,您需要使用 --enable-libfreetype . 要启用默认字体回退和字体选项,您需要使用 --enable-libfontconfig . 要启用 text_shaping 选项,您需要使用 --enable-libfribidi

参数

· box - 用于使用背景颜色在文本周围绘制一个框。该值必须是 1(启用)或 0(禁用)。框的默认值为 0。

· boxborderw – 使用 boxcolor 设置要在框周围绘制的边框宽度。boxborderw 的默认值为 0。

· boxcolor - 用于在文本周围绘制框的颜色。有关此选项的语法,请查看 ffmpeg-utils 手册中的“颜色”部分。 boxcolor 的默认值为“white”。

· line_spacing – 使用 box 设置要在框周围绘制的边框的行间距(以像素为单位)。line_spacing 的默认值为 0。

· borderw – 使用边框颜色设置要在文本周围绘制的边框宽度。边框的默认值为 0。

· bordercolor – 设置用于在文本周围绘制边框的颜色。有关此选项的语法,请查看 ffmpeg-utils 手册中的“颜色”部分。边框颜色的默认值为“黑色”。

· 扩展- 选择文本的扩展方式。可以是 none、strftime(已弃用)或 normal(默认)。有关详细信息,请参阅下面的文本扩展部分。

· basetime – 设置计数的开始时间。值以微秒为单位。仅适用于已弃用的 strftime 扩展模式。要在正常扩展模式下进行模拟,请使用 pts 函数,提供开始时间(以秒为单位)作为第二个参数。

· fix_bounds - 如果为 true,检查并修复文本坐标以避免剪切。

· fontcolor - 用于绘制字体的颜色。有关此选项的语法,请查看 ffmpeg-utils 手册中的“颜色”部分。fontcolor 的默认值为“黑色”。

· fontcolor_expr – 与文本相同的扩展字符串以获得动态字体颜色值。默认情况下,此选项具有空值并且不被处理。设置此选项时,它会覆盖 fontcolor 选项。

· font - 用于绘制文本的字体系列。默认情况下无。

· fontfile – 用于绘制文本的字体文件。必须包含路径。如果禁用了 fontconfig 支持,则此参数是必需的。

· alpha – 绘制应用 alpha 混合的文本。该值可以是介于 0.0 和 1.0 之间的数字。该表达式也接受相同的变量 x、y。默认值为 1。请参阅 fontcolor_expr。

· fontsize – 用于绘制文本的字体大小。字体大小的默认值为 16。

· text_shaping – 如果设置为 1,则在绘制文本之前尝试对文本进行整形(例如,反转从右到左文本的顺序并加入阿拉伯字符)。否则,只需按照给定的方式绘制文本。默认为 1(如果支持)。

· ft_load_flags –用于加载字体的标志。这些标志映射了 libfreetype 支持的相应标志,并且是以下值的组合:

默认值为“默认”。有关更多信息,请参阅 FT_LOAD_* libfreetype 标志的文档。

· shadowcolor – 用于在已绘制文本后面绘制阴影的颜色。有关此选项的语法,请查看 ffmpeg-utils 手册中的“颜色”部分。shadowcolor 的默认值为“黑色”。

· shadowx – 文本阴影位置相对于文本位置的 x 偏移量。它可以是正值或负值。默认值为“0”。

· shadowy – 文本阴影位置相对于文本位置的 y 偏移量。它可以是正值或负值。默认值为“0”。

· start_number – n/frame_num 变量的起始帧号。默认值为“0”。

· tabsize - 用于呈现选项卡的空格数大小。默认值为 4。

· timecode – 以“hh:mm:ss[:;.]ff”格式设置初始时间码表示。它可以带或不带文本参数使用。必须指定 timecode_rate 选项。

· rate – 设置时间码帧率(仅限时间码)。

· timecode_rate – 的别名rate。

· r – 的别名rate。

· tc24hmax – 如果设置为 1,时间码选项的输出将在 24 小时左右回绕。默认值为 0(禁用)。

· text -- 要绘制的文本字符串。文本必须是 UTF-8 编码字符序列。如果没有使用参数 textfile 指定文件,则此参数是必需的。

· textfile – 包含要绘制的文本的文本文件。文本必须是 UTF-8 编码字符序列。如果没有使用参数 text 指定文本字符串,则此参数是必需的。如果同时指定了 text 和 textfile,则会引发错误。

· reload – 如果设置为 1,文本文件将在每一帧之前重新加载。一定要自动更新它,否则它可能会被部分读取,甚至失败。

· x – 指定将在视频帧内绘制文本的偏移量的表达式。它相对于输出图像的左边框。默认值为“0”。

· y - 指定将在视频帧内绘制文本的偏移量的表达式。它相对于输出图像的上边框。默认值为“0”。有关接受的常量和函数的列表,请参见下文。

表达式常量:

x 和 y 的参数是包含以下常量和函数的表达式:

· dar:输入显示纵横比,同 (w / h) * sar

· hsub:水平色度子样本值。例如,对于像素格式“yuv422p”,hsub 为 2,vsub 为 1。

· vsub:垂直色度子样本值。例如,对于像素格式“yuv422p”,hsub 为 2,vsub 为 1。

· line_h:每个文本行的高度

· lh:别名为line_h.

· main_h:输入高度

· h: 的别名main_h。

· H: 的别名main_h。

· main_w:输入宽度

· w: 的别名main_w。

· W: 的别名main_w。

· ascent:对于所有渲染的字形,从基线到用于放置字形轮廓点的最高/上网格坐标的最大距离。这是一个正值,因为网格的 Y 轴向上。

· max_glyph_a: 的别名ascent。

· 下降:对于所有渲染的字形,从基线到用于放置字形轮廓点的最低网格坐标的最大距离。由于网格的方向,这是一个负值,Y 轴向上。

· max_glyph_d: 的别名descent。

· max_glyph_h:最大字形高度,即渲染文本中包含的所有字形的最大高度,相当于上升-下降。

· max_glyph_w:最大字形宽度,即渲染文本中包含的所有字形的最大宽度。

· n:输入帧数,从0开始

· rand(min, max):返回一个包含在 min 和 max 之间的随机数

· sar:输入样本纵横比。

· t:时间戳,以秒为单位,如果输入时间戳未知,则为 NAN

· text_h:渲染文本的高度

· th: 的别名text_h。

· text_w:渲染文本的宽度

· tw: 的别名text_w。

· x:绘制文本的 x 偏移坐标。

· y:绘制文本的 y 偏移坐标。

这些参数允许 x 和 y 表达式相互引用,因此您可以例如指定 y=x/dar.

应用自定义过滤器。

filter通常由更高级别的过滤器函数使用,例如 hflip ,但如果缺少过滤器实现 ffmpeg-python ,您可以 filter 直接调用以 ffmpeg-python 将过滤器名称和参数逐字传递给 ffmpeg 。

参数

函数名称后缀_是为了避免与标准 pythonfilter 函数混淆。

例子

替代名称 filter ,以免与内置的 pythonfilter 运算符冲突。

应用具有一个或多个输出的自定义过滤器。

这 filter 与过滤器可以产生多个输出相同。

要引用输出流,请使用 .stream 运算符或括号简写:

例子

水平翻转输入视频。

修改输入的色调和/或饱和度。

参数

将一个视频叠加在另一个视频之上。

参数

更改输入帧的 PTS(表示时间戳)。

FFmpeg里有两种时间戳:DTS(Decoding Time Stamp)和PTS(Presentation Time Stamp)。 顾名思义,前者是解码的时间,后者是显示的时间。

参数

修剪输入,使输出包含输入的一个连续子部分。

参数

垂直翻转输入视频。

应用缩放和平移效果。

参数

Python中的eval()、filter()、float()函数有什么用?

Python解释器内置了许多函数,这意味着我们无需定义,始终可以它们。下面按照函数的字母顺序,讨论一些常用的内建函数。

eval()

eval()函数解析传给它的表达式,并在程序中运行Python表达式(代码)。举个例子:

x = 1

eval("x + 1")  # 注意:"x + 1"是字符串

2

eval("4  9")

True

eval("'py' * 3")

'pypypy'

eval("10 ** 2")

100

eval()函数不仅仅能运行简单表达式,还能调用函数,使用方法等等:

eval("abs(-11)")        # 计算-11的绝对值

11

eval('"hello".upper()')   # 把字符串'hello'全变成大写字母

'HELLO'

import os

eval('os.getcwd()')       # 获取当前的工作目录

'/home/thepythonguru'

但是需要注意的是eval()仅适用于表达式,尝试传递语句会导致语法错误:

eval('a = 1')                    # 赋值语句

Traceback (most recent call last):

File "", line 1, in

File "", line 1

a = 1

^

SyntaxError: invalid syntax

eval('import re')             # 导入语句

Traceback (most recent call last):

File "", line 1, in

File "", line 1

import re

^

SyntaxError: invalid syntax

此外,使用eval()语句应该十分小心,永远不要将不受信任的源直接传递给eval()。 因为恶意用户很容易对您的系统造成破坏。 例如:

eval(input())  # eval()将执行用户输入的代码

用户输入以下代码就能从系统中删除所有文件:

os.system("RM -RF /")

# 上面输入相当于执行:

eval('os.system("RM -RF /")')

filter()

"filter"的意思是“过滤”,filter()函数需要两个参数:一个函数对象和一个可迭代对象。函数对象需要返回一个布尔值,并为可迭代的每个元素调用。 filter()函数仅返回那些通过函数对象返回值为true的元素。解释有一些抽象,看一个例子:

a = [1, 2, 3, 4, 5, 6]

filter(lambda x : x % 2 == 0, a)        # 过滤出所有偶数,结果返回一个filter对象

filter object at 0x1036dc048

list(filter(lambda x : x % 2 == 0, a))  # 可以使用list()函数使fileter对象变成列表,方便查看结果

[2, 4, 6]

下面是另外一个例子:

dict_a = [{'name': 'python', 'points': 10}, {'name': 'java', 'points': 8}]

filter(lambda x : x['name'] == 'python', dict_a)  # 过滤出列表中键'name'为值'python'的字典

filter object at 0x1036de128

tuple(filter(lambda x : x['name'] == 'python', dict_a))  # 使用tuple()函数使结果变成字典

({'name': 'python', 'points': 10},)

float()

float()的参数是一个数字或者字符串,它返回一个浮点数。如果参数是字符串,则字符串中应该包含一个数字,并可以在数字前加入一个 '-' 符号,代表负数。参数也可以是表示NaN(非数字)或正无穷大的字符串。如果没有任何参数的话,将返回0.0。

float('+1.23')         # 1.23

1.23

float('   -12345\n')   # -12345

-12345.0

float('1e-003')        # 0.001

0.001

float('+1E6')          # 10的6次幂

1000000.0

float('-Infinity')     # 无穷小

-inf

float('-inf') + 100     # 负无穷小加100仍等于负无穷小

-inf

float('inf')           # 无穷大

inf

float('NaN')           # NaN,代表非数字

nan

关于Python的基础问题可以看下这个网页的视频教程,网页链接,希望我的回答能帮到你。

python filter过滤器疑问

过滤器第二个参数可以是生成器也可以是列表,只要是iterable就可以,生成器也是一个iterable。

next()得到的是iterable的一个结果值。

过滤器返回的是一个map,map本身也是一个iterable,可以使用next()或者for去迭代它。

filter()在迭代的时候逐个返回值,与生成器类似,都是在每次调取值时才算出一个来。

Python中几个有趣的语法糖

当然是函数式那一套黑魔法啦,且听我细细道来。 lambda表达式也就是匿名函数。用法:lambda 参数列表 : 返回值例: +1函数 f=lambda x:x+1 max函数(条件语句的写法如下) f_max=lambda x,y:x if xy else y 上述定义的函数与用def定义的函数没有区别,而且左边的f=在某些情况下并不是必要的。 filter,map,reduce filter函数接受两个参数,第一个是过滤函数,第二个是可遍历的对象,用于选择出所有满足过滤条件的元素,不同版本的filter的返回值稍有区别,我用的是python3.5,filter返回的是经过过滤的可遍历对象。例:去除小写字母 s=filter(lambda x:not str(x).islower(),"asdasfAsfBsdfC") for ch in s: print(ch) map函数接受的参数类型与filter类似,它用于把函数作用于可遍历对象的每一个元素。类似于数学中映射的概念。例:求y=2x+1(偷偷用了一下range函数生成定义域) s=map(lambda x:2*x+1,range(6)) for x in s: print(x) reduce函数对每个元素作累计操作,它接受的第一个参数必须是有两个参数的函数。例:求和 from functools import reduce s=reduce(lambda x,y:x+y,range(1,6)) print(s) 求乘积(第三个可选参数表示累计变量的初值) from functools import reduce s=reduce(lambda x,y:x*y,range(1,6),1) print(s) 柯里化(curry)函数如果一个函数需要2个参数,而你只传入一个参数,那么你就可以得到一个柯里化的函数,这是函数式编程语言的重要特性之一,遗憾的是,python并不能在语法层面支持柯里化调用,但它在库中提供了接口。例: *3函数 f_mul=lambda x,y:x*y from functools import partial mul3=partial(f_mul,3) print(mul3(1)) print(mul3(6)) 打包与解包有点类似于函数式中的模式匹配,略牵强。 t=(1,2,3) x,y,z=t 列表生成式这个也有点牵强,不知道严格意义上讲属不属于函数式风格。例:生成奇数序列 l=[2*x+1 for x in range(10)] for i in l: print(i) 最后来一个彩蛋(以前某答主提到的用调分函数来美颜的算法,忘了出处了,侵删) from PIL import Image from math import sqrt im = Image.open("a.jpg") ret= im.convert(mode="RGB") ret = ret.point(lambda x:sqrt(x)*sqrt(255)) ret.save("b.jpg")

Python 数据处理(三十九)—— groupby(过滤)

filter 方法可以返回原始对象的子集.

例如,我们想提取分组内的和大于 3 的所有分组的元素

filter 的参数必须是一个函数,函数参数是每个分组,并且返回 True 或 False

例如,提取元素个数大于 2 的分组

另外,我们也可以过滤掉不满足条件的组,而是返回一个类似索引对象。在这个对象中,没有通过的分组的元素被 NaN 填充

对于具有多列的 DataFrames ,过滤器应明确指定一列作为过滤条件

在进行聚合或转换时,你可能想对每个分组调用一个实例方法,例如

但是,如果需要传递额外的参数时,它会变得很冗长。我们可以直接使用分派到组对象上的方法

实际上这生成了一个函数包装器,在调用时,它接受所有传递的参数,并在每个分组上进行调用。

然后,这个结果可以和 agg 和 transform 结合在一起使用

在上面的例子中,我们按照年份分组,然后对每个分组中使用 fillna 补缺失值

nlargest 和 nsmallest 可以在 Series 类型的 groupby 上使用

对分组数据的某些操作可能并不适合聚合或转换。或者说,你可能只是想让 GroupBy 来推断如何合并结果

我们可以使用 apply 函数,例如

改变返回结果的维度

在 Series 上使用 apply 类似

对于之前的示例数据

假设,我们想按 A 分组并计算组内的标准差,但是 B 列的数据我们并不关心。

如果我们的函数不能应用于某些列,则会隐式的删除这些列,所以

直接计算标准差并不会报错

可以使用分类变量进行分组,分组的顺序会按照分类变量的顺序

可以使用 pd.Grouper 控制分组,对于如下数据

可以按照一定的频率对特定列进行分组,就像重抽样一样

可以分别对列或索引进行分组

类似于 Series 和 DataFrame ,可以使用 head 和 tail 获取分组前后几行

在 Series 或 DataFrame 中可以使用 nth() 来获取第 n 个元素,也可以用于获取每个分组的某一行

如果你要选择非空项,可以使用关键字参数 dropna ,如果是 DataFrame ,需要指定为 any 或 all (类似于 DataFrame.dropna(how='any|all') )

与其他方法一样,使用 as_index=False 分组名将不会作为索引

你也可以传入一个整数列表,一次性选取多行

使用 cumcount 方法,可以查看每行在分组中出现的顺序

可以使用 ngroup() 查看分组的顺序,该顺序与 cumcount 的顺序相反。

注意 :该顺序与迭代时的分组顺序一样,并不是第一次观测到的顺序

如何用python写布隆过滤器

下面的是网络上找到的python的布隆过滤器的实现.

#!/usr/local/bin/python2.7

#coding=gbk

'''

Created on 2012-11-7

@author: palydawn

'''

import cmath

from BitVector import BitVector

class BloomFilter(object):

def __init__(self, error_rate, elementNum):

#计算所需要的bit数

self.bit_num = -1 * elementNum * cmath.log(error_rate) / (cmath.log(2.0) * cmath.log(2.0))

#四字节对齐

self.bit_num = self.align_4byte(self.bit_num.real)

#分配内存

self.bit_array = BitVector(size=self.bit_num)

#计算hash函数个数

self.hash_num = cmath.log(2) * self.bit_num / elementNum

self.hash_num = self.hash_num.real

#向上取整

self.hash_num = int(self.hash_num) + 1

#产生hash函数种子

self.hash_seeds = self.generate_hashseeds(self.hash_num)

def insert_element(self, element):

for seed in self.hash_seeds:

hash_val = self.hash_element(element, seed)

#取绝对值

hash_val = abs(hash_val)

#取模,防越界

hash_val = hash_val % self.bit_num

#设置相应的比特位

self.bit_array[hash_val] = 1

#检查元素是否存在,存在返回true,否则返回false 

def is_element_exist(self, element):

for seed in self.hash_seeds:

hash_val = self.hash_element(element, seed)

#取绝对值

hash_val = abs(hash_val)

#取模,防越界

hash_val = hash_val % self.bit_num

#查看值

if self.bit_array[hash_val] == 0:

return False

return True

#内存对齐    

def align_4byte(self, bit_num):

num = int(bit_num / 32)

num = 32 * (num + 1)

return num

#产生hash函数种子,hash_num个素数

def generate_hashseeds(self, hash_num):

count = 0

#连续两个种子的最小差值

gap = 50

#初始化hash种子为0

hash_seeds = []

for index in xrange(hash_num):

hash_seeds.append(0)

for index in xrange(10, 10000):

max_num = int(cmath.sqrt(1.0 * index).real)

flag = 1

for num in xrange(2, max_num):

if index % num == 0:

flag = 0

break

if flag == 1:

#连续两个hash种子的差值要大才行

if count  0 and (index - hash_seeds[count - 1])  gap:

continue

hash_seeds[count] = index

count = count + 1

if count == hash_num:

break

return hash_seeds

def hash_element(self, element, seed):

hash_val = 1

for ch in str(element):

chval = ord(ch)

hash_val = hash_val * seed + chval

return hash_val

'''

#测试代码

bf = BloomFilter(0.001, 1000000)

element = 'palydawn'

bf.insert_element(element)

print bf.is_element_exist('palydawn')'''

#其中使用了BitVector库,python本身的二进制操作看起来很麻烦,这个就简单多了

如果解决了您的问题请采纳!

如果未解决请继续追问


分享文章:python过滤器函数,过滤函数是什么
浏览地址:http://csdahua.cn/article/hcjsco.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流