docs: def avi(self, path, filtered=True, override=False):
          """Exports filtered event images to an avi file
  
          Parameters
          ----------
          path: str
              Path to a .tsv file. The ending .tsv is added automatically.
          filtered: bool
              If set to `True`, only the filtered data (index in ds._filter)
              are used.
          override: bool
              If set to `True`, an existing file ``path`` will be overridden.
              If set to `False`, raises `OSError` if ``path`` exists.
  
          Notes
          -----
          Raises OSError if current dataset does not contain image data
          """
          path = pathlib.Path(path)
          ds = self.rtdc_ds
          # Make sure that path ends with .avi
          if path.suffix != ".avi":
              path = path.with_name(path.name + ".avi")
          # Check if file already exist
          if not override and path.exists():
              raise OSError("File already exists: {}\n".format(
                  str(path).encode("ascii", "ignore")) +
                  "Please use the `override=True` option.")
          # Start exporting
          if "image" in ds:
              # Open video for writing
              vout = imageio.get_writer(uri=path,
                                        format="FFMPEG",
                                        fps=25,
                                        codec="rawvideo",
                                        pixelformat="yuv420p",
                                        macro_block_size=None,
                                        ffmpeg_log_level="error")
              # write the filtered frames to avi file
              for evid in np.arange(len(ds)):
                  # skip frames that were filtered out
                  if filtered and not ds._filter[evid]:
                      continue
                  try:
                      image = ds["image"][evid]
                  except BaseException:
                      warnings.warn("Could not read image {}!".format(evid),
                                    NoImageWarning)
                      continue
                  else:
                      if np.isnan(image[0, 0]):
                          # This is a nan-valued image
                          image = np.zeros_like(image, dtype=np.uint8)
                  # Convert image to RGB
                  image = image.reshape(image.shape[0], image.shape[1], 1)
                  image = np.repeat(image, 3, axis=2)
                  vout.append_data(image)
          else:
              msg = "No image data to export: dataset {} !".format(ds.title)
              raise OSError(msg)