class_docstr: Base class of all clips (VideoClips and AudioClips).
  
  Attributes
  ----------
  
  start : float
    When the clip is included in a composition, time of the
    composition at which the clip starts playing (in seconds).
  
  end : float
    When the clip is included in a composition, time of the
    composition at which the clip stops playing (in seconds).
  
  duration : float
    Duration of the clip (in seconds). Some clips are infinite, in
    this case their duration will be ``None``.
class_docstr_tok: ["Base","class","of","all","clips","(","VideoClips","and","AudioClips",")",".","Attributes","--","--","--","--","--","start",":","float","When","the","clip","is","included","in","a","composition",",","time","of","the","composition","at","which","the","clip","starts","playing","(","in","seconds",")",".","end",":","float","When","the","clip","is","included","in","a","composition",",","time","of","the","composition","at","which","the","clip","stops","playing","(","in","seconds",")",".","duration",":","float","Duration","of","the","clip","(","in","seconds",")",".","Some","clips","are","infinite",",","in","this","case","their","duration","will","be","``","None","``","."]
docstr: Returns the result of ``func(self, *args, **kwargs)``, for instance
  
  >>> new_clip = clip.fx(resize, 0.2, method="bilinear")
  
  is equivalent to
  
  >>> new_clip = resize(clip, 0.2, method="bilinear")
  
  The motivation of fx is to keep the name of the effect near its
  parameters when the effects are chained:
  
  >>> from moviepy.video.fx import multiply_volume, resize, mirrorx
  >>> clip.fx(multiply_volume, 0.5).fx(resize, 0.3).fx(mirrorx)
  >>> # Is equivalent, but clearer than
  >>> mirrorx(resize(multiply_volume(clip, 0.5), 0.3))
docstr_tok: ["Returns","the","result","of","``","func","(","self",",","*","args",",","*","*","kwargs",")","``",",","for","instance",">",">",">","new_clip","=","clip.fx","(","resize",",","0.2",",","method=","''","bilinear","''",")","is","equivalent","to",">",">",">","new_clip","=","resize","(","clip",",","0.2",",","method=","''","bilinear","''",")","The","motivation","of","fx","is","to","keep","the","name","of","the","effect","near","its","parameters","when","the","effects","are","chained",":",">",">",">","from","moviepy.video.fx","import","multiply_volume",",","resize",",","mirrorx",">",">",">","clip.fx","(","multiply_volume",",","0.5",")",".fx","(","resize",",","0.3",")",".fx","(","mirrorx",")",">",">",">","#","Is","equivalent",",","but","clearer","than",">",">",">","mirrorx","(","resize","(","multiply_volume","(","clip",",","0.5",")",",","0.3",")",")"]
code: def fx(self, func, *args, **kwargs):
      """Returns the result of ``func(self, *args, **kwargs)``, for instance
  
      >>> new_clip = clip.fx(resize, 0.2, method="bilinear")
  
      is equivalent to
  
      >>> new_clip = resize(clip, 0.2, method="bilinear")
  
      The motivation of fx is to keep the name of the effect near its
      parameters when the effects are chained:
  
      >>> from moviepy.video.fx import multiply_volume, resize, mirrorx
      >>> clip.fx(multiply_volume, 0.5).fx(resize, 0.3).fx(mirrorx)
      >>> # Is equivalent, but clearer than
      >>> mirrorx(resize(multiply_volume(clip, 0.5), 0.3))
      """
      return func(self, *args, **kwargs)
  
imports: import copy
  from functools import reduce
  from numbers import Real
  from operator import add
  import numpy
  import proglog
  from moviepy.decorators import apply_to_audio, apply_to_mask, convert_parameter_to_seconds, outplace, requires_duration, use_clip_fps_by_default
label_desc: Use image node_id 6 for calling the Clip obj's underlying member method code with example usage: obj.fx(func) and returns: func