code: def stacker(feats, stack_order):
      """
      Concatenating consecutive audio (100 fps) frames
      To match with video frame rate (25 fps),
      the 4 audio frames are concatenated in spectral dimension.
      T' = T / 4, F' = F * 4
      Args:
      feats - numpy.ndarray of shape [T, F]
      stack_order - int (number of neighboring frames to concatenate
      Returns:
      feats - numpy.ndarray of shape [T', F']
      """
      feat_dim = feats.shape[1]
      if len(feats) % stack_order != 0:
          res = stack_order - len(feats) % stack_order
          res = np.zeros([res, feat_dim]).astype(feats.dtype)
          feats = np.concatenate([feats, res], axis=0)
      feats = feats.reshape((-1, stack_order, feat_dim)).reshape(
          -1, stack_order * feat_dim
      )
      return feats
  
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 3 for calling a global function with example usage: stacker(feats, stack_order) and returns: feats