code: def process_df(
      self,
      df,
      frames_per_clip=16,
      column_map={},
      num_workers=1,
      _precomputed_metadata=None,
      **kwargs,
  ):
      self.labels = df[column_map.get("labels", "labels")].tolist()
      self.idx_to_class = sorted(
          list(
              set([item for sublist in self.labels for item in sublist])
          )
      )
      self.classes = self.idx_to_class
      self.class_to_idx = {
          self.classes[i]: i for i in range(len(self.classes))
      }
      self.text_list = df[column_map.get("text", "text")].tolist()
      self.ids_list = df[column_map.get("id", "id")].tolist()
  
      video_list = df[column_map.get("video", "video")].tolist()
      self.video_clips = CharadesVideoClips(
          video_list,
          clip_length_in_frames=frames_per_clip,
          _precomputed_metadata=_precomputed_metadata,
          num_workers=num_workers,
      )
  
imports: import os
  import PIL
  import torch
  from mmf.common.sample import Sample
  from mmf.datasets.base_dataset import BaseDataset
  from mmf.datasets.builders.charades._utils import CharadesVideoClips, img2gif, make_charades_df
  from mmf.utils.distributed import byte_tensor_to_object, object_to_byte_tensor
  from mmf.utils.file_io import PathManager
label_desc: Use image node_id 5 for calling the CharadesDataset obj's underlying member method code with example usage: obj.process_df(df, frames_per_clip, column_map, num_workers, _precomputed_metadata) without return types