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

2022-01-13  本文已影响0人  leon12138

class ffmpeg.Stream(upstream_node,upstream_label,node_types,upstream_selector=None )

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

某些 ffmpeg滤波器会丢弃音频流,因此必须注意在最终输出中保留音频。.audio.video运算符可用于引用流的音频/视频部分,以便可以单独处理它们,然后在以后的管道中重新组合它们。这种困境是ffmpeg固有的,ffmpeg-python试图远离,而用户可以参考官方ffmpeg文档,了解为什么某些过滤器会掉落音频。

input = ffmpeg.input('in.mp4')
audio = input.audio.filter("aecho", 0.8, 0.9, 1000, 0.3)
video = input.video.hflip()
out = ffmpeg.output(audio, video, 'out.mp4')
  input = ffmpeg.input('in.mp4')
  audio = input.audio.filter("aecho", 0.8, 0.9, 1000, 0.3)
  video = input.video.hflip()
  out = ffmpeg.output(audio, video, 'out.mp4')

ffmpeg.input( filename , **kwargs )

输入文件 URL (ffmpeg -i option)

ffmpeg.merge_outputs(* streams )

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

ffmpeg.output( streams_and_filename* , kwargs )

输出文件地址

ffmpeg.overwrite_output(stream)

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

ffmpeg.probe( filename , cmd='ffprobe' , **kwargs )

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

ffmpeg.compile( stream_spec , cmd='ffmpeg' , overwrite_output=False )

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

ffmpeg.get_args( stream_spec , overwrite_output=False )

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

ffmpeg.run( stream_spec , cmd='ffmpeg' , capture_stdout=False , capture_stderr=False , input=None , quiet=False , overwrite_output=False )

为提供的节点图调用 ffmpeg

参数

ffmpeg.run_async( stream_spec , cmd='ffmpeg' , pipe_stdin=False , pipe_stdout=False , pipe_stderr=False , quiet=False , overwrite_output=False )

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

参数

例子

运行和流式输入:

process = (
  ffmpeg
  .input('pipe:', format='rawvideo', pix_fmt='rgb24', s='*{}*x*{}*'.format(width, height))
  .output(out_filename, pix_fmt='yuv420p')
  .overwrite_output()
  .run_async(pipe_stdin=**True**)
)
process.communicate(input=input_data)

运行并捕获输出:

process = (
  ffmpeg
  .input(in_filename)
  .output('pipe':, format='rawvideo', pix_fmt='rgb24')
  .run_async(pipe_stdout=**True**, pipe_stderr=**True**)
)
out, err = process.communicate()

使用 numpy 逐帧处理视频:

process1 = (
  ffmpeg
  .input(in_filename)
  .output('pipe:', format='rawvideo', pix_fmt='rgb24')
  .run_async(pipe_stdout=True)
)
process2 = (
   ffmpeg
  .input('pipe:', format='rawvideo', pix_fmt='rgb24', s='{}x{}'.format(width, height))
  .output(out_filename, pix_fmt='yuv420p')
  .overwrite_output()
  .run_async(pipe_stdin=True)
)
while True:
  in_bytes = process1.stdout.read(width * height * 3)
  if not in_bytes:
    break
  in_frame = (
    np
    .frombuffer(in_bytes, np.uint8)
    .reshape([height, width, 3])
  )
  out_frame = in_frame * 0.3
  process2.stdin.write(frame.astype(np.uint8).tobytes())
  
process2.stdin.close()
process1.wait()
process2.wait()

ffmpeg.view( stream_spec , detail=False , filename=None , pipe=False , **kwargs )

ffmpeg.colorchannelmixer(stream,args,kwargs* )

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

ffmpeg.concat( * Streams , ** kwargs )

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

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

参数

ffmpeg.crop(stream, x , y ,width,height, **kwargs )

裁剪输入视频。

参数

ffmpeg.drawbox(stream,x,y,width,height,color, thickness =None,**kwargs )

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

参数

ffmpeg.drawtext(stream, text=None , x=0 , y=0 , escape_text=True , **kwargs )

使用 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 支持的相应标志,并且是以下值的组合:

default、no_scale、no_hinting、 render、  no_bitmap、  vertical_layout、 force_autohint、crop_bitmap、pedantic、 ignore_global_advance_width、no_recurse、 ignore_transform、 monochrome、 linear_design、 no_autohint

默认值为“默认”。有关更多信息,请参阅 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.

ffmpeg.filter( stream_spec , filter_name , args* , kwargs )

应用自定义过滤器。

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

参数

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

例子

ffmpeg.input('in.mp4').filter('hflip').output('out.mp4').run()

ffmpeg.filter_( stream_spec , filter_name , args* , kwargs )

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

ffmpeg.filter_multi_output( stream_spec , filter_name , args* , kwargs )

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

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

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

例子

 split = ffmpeg.input('in.mp4').filter_multi_output('split') split0 = split.stream(0) split1 = split[1] ffmpeg.concat(split0, split1).output('out.mp4').run() 

ffmpeg.hflip(stream)

水平翻转输入视频。

ffmpeg.hue(stream,**kwargs )

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

参数

ffmpeg.overlay( main_parent_node , overlay_parent_node , eof_action='repeat' , **kwargs )

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

参数

ffmpeg.setpts(steam, expr )

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

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

参数

ffmpeg.trim(stream,**kwargs )

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

参数

ffmpeg.vflip(stream)

垂直翻转输入视频。

ffmpeg.zoompan(stream,**kwargs )

应用缩放和平移效果。

参数

上一篇下一篇

猜你喜欢

热点阅读