  from ._base import Output, logger
  
  
  class Writer(Output):
      """ Video output writer using imageio """
      def __init__(self, output_folder, total_count, frame_ranges, source_video, **kwargs):
          super().__init__(output_folder, **kwargs)
          logger.debug("total_count: %s, frame_ranges: %s, source_video: '%s'",
                       total_count, frame_ranges, source_video)
          self.source_video = source_video
          self.frame_ranges = frame_ranges
 
</s> remove         self.source_video = source_video
        self.frame_ranges = frame_ranges
        self.frame_order = self.set_frame_order(total_count)
        self.output_dimensions = None  # Fix dims of 1st frame in case of different sized images
        self.writer = None  # Need to know dimensions of first frame, so set writer then

    @property
    def video_file(self):
        """ Return full path to video output """
        filename = os.path.basename(self.source_video)
        filename = os.path.splitext(filename)[0]
        filename = "{}_converted.{}".format(filename, self.config["container"])
        retval = os.path.join(self.output_folder, filename)
        logger.debug(retval)
        return retval
 </s> add         self._source_video: str = source_video
        self._output_filename: str = self._get_output_filename()
        self._frame_ranges: Optional[List[int]] = frame_ranges
        self._frame_order: List[int] = self._set_frame_order(total_count)
        self._output_dimensions: Optional[str] = None  # Fix dims on 1st received frame
        # Need to know dimensions of first frame, so set writer then
        self._writer: Optional[imageio.plugins.ffmpeg.FfmpegFormat.Writer] = None </s> remove     """ Parent class for scaling adjustments """
    def __init__(self, output_folder, configfile=None):
 </s> add     """ Parent class for writer plugins.

    Parameters
    ----------
    output_folder: str
        The full path to the output folder where the converted media should be saved
    configfile: str, optional
        The full path to a custom configuration ini file. If ``None`` is passed
        then the file is loaded from the default location. Default: ``None``.
    """
    def __init__(self, output_folder: str, configfile: Optional[str] = None) -> None: </s> remove         self.config = get_config(".".join(self.__module__.split(".")[-2:]), configfile=configfile)
 </s> add         self.config: dict = get_config(".".join(self.__module__.split(".")[-2:]),
                                       configfile=configfile)
    """ Video output writer using imageio-ffmpeg.

    Parameters
    ----------
    output_folder: str
        The folder to save the output video to
    total_count: int
        The total number of frames to be converted
    frame_ranges: list or ``None``
        List of integers for any explicit frame ranges to be converted or ``None`` if all frames
        are to be converted
    source_video: str
        The full path to the source video for obtaining fps and audio
    kwargs: dict
        Any additional standard :class:`plugins.convert.writer._base.Output` key word arguments.
    """
    def __init__(self,
                 output_folder: str,
                 total_count: int,
                 frame_ranges: Optional[List[int]],
                 source_video: str,
                 **kwargs) -> None:
  from ._base import Output, logger
  
  
  class Writer(Output):
    """ Video output writer using imageio-ffmpeg.

    Parameters
    ----------
    output_folder: str
        The folder to save the output video to
    total_count: int
        The total number of frames to be converted
    frame_ranges: list or ``None``
        List of integers for any explicit frame ranges to be converted or ``None`` if all frames
        are to be converted
    source_video: str
        The full path to the source video for obtaining fps and audio
    kwargs: dict
        Any additional standard :class:`plugins.convert.writer._base.Output` key word arguments.
    """
    def __init__(self,
                 output_folder: str,
                 total_count: int,
                 frame_ranges: Optional[List[int]],
                 source_video: str,
                 **kwargs) -> None:
    """ Video output writer using imageio-ffmpeg.

    Parameters
    ----------
    output_folder: str
        The folder to save the output video to
    total_count: int
        The total number of frames to be converted
    frame_ranges: list or ``None``
        List of integers for any explicit frame ranges to be converted or ``None`` if all frames
        are to be converted
    source_video: str
        The full path to the source video for obtaining fps and audio
    kwargs: dict
        Any additional standard :class:`plugins.convert.writer._base.Output` key word arguments.
    """
    def __init__(self,
                 output_folder: str,
                 total_count: int,
                 frame_ranges: Optional[List[int]],
                 source_video: str,
                 **kwargs) -> None:
          super().__init__(output_folder, **kwargs)
          logger.debug("total_count: %s, frame_ranges: %s, source_video: '%s'",
                       total_count, frame_ranges, source_video)
          self.source_video = source_video
          self.frame_ranges = frame_ranges
keep keep keep keep replace replace keep keep keep keep keep
 ffmpeg writer: Create new filename if output pre-exists 
plugins/convert/writer/ffmpeg.py