code: def main():
      parser = get_parser()
      args = parser.parse_args()
      torch.cuda.set_device(args.gpu - 1)
      writer = file_writer_helper(
          wspecifier=args.wspecifier,
          filetype="mat",
          write_num_frames=args.write_num_frames,
          compress=False,
      )
  
      if args.model == "base":
          model = FairseqAVHubertEncoder(
              avhubert_url=base_url,
              avhubert_dir_path=args.pretrained_model_dir,
              encoder_embed_dim=768,
              encoder_layers=12,
              encoder_ffn_embed_dim=3072,
              encoder_attention_heads=12,
          )
      else:
          model = FairseqAVHubertEncoder(
              avhubert_url=large_url,
              avhubert_dir_path=args.pretrained_model_dir,
              encoder_embed_dim=1024,
              encoder_layers=24,
              encoder_ffn_embed_dim=4096,
              encoder_attention_heads=16,
          )
      model = model.cuda()
      model.eval()
      video_process = VideoProcess(
          mean_face_path="20words_mean_face.npy", convert_gray=True
      )
      file_lists = build_file_list(args.file_list)
      for kk, f in enumerate(file_lists):
          per_file(f, args, video_process, model, writer)
          if kk % 10 == 0:
              print(f"{kk}/{len(file_lists)}")
  
file_path: espnet/egs2/lrs3/avsr1/local/extract_av_feature.py
imports: import argparse
  import os
  import pickle
  import cv2
  import numpy
  import torch
  import torch.nn.functional
  from face_alignment import VideoProcess
  from python_speech_features import logfbank
  from scipy.io import wavfile
  from espnet2.asr.encoder.avhubert_encoder import FairseqAVHubertEncoder
  from espnet.utils.cli_writers import file_writer_helper
label_desc: Use image node_id 5 for calling a global function with example usage: main() without return types