code: def _watch_progress(handler):
      
      with _tmpdir_scope() as tmpdir:
          socket_filename = os.path.join(tmpdir, 'sock')
          sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
          with contextlib.closing(sock):
              sock.bind(socket_filename)
              sock.listen(1)
              child = gevent.spawn(_do_watch_progress, socket_filename, sock, handler)
              try:
                  yield socket_filename
              except:
                  gevent.kill(child)
                  raise
docs: Context manager for creating a unix-domain socket and listen for
      ffmpeg progress events.
  
      The socket filename is yielded from the context manager and the
      socket is closed when the context manager is exited.
  
      Args:
          handler: a function to be called when progress events are
              received; receives a ``key`` argument and ``value``
              argument. (The example ``show_progress`` below uses tqdm)
  
      Yields:
          socket_filename: the name of the socket file.