docstr: Concatenates multiple videos together on both channels, if present.
  If any of the input files does not have an audio stream, then audio will not be processed.
  
  @param video_path: the path to the video to be augmented
  
  @param output_path: the path in which the resulting video will be stored.
  
  @returns: a list of strings containing the CLI FFMPEG command for
      the augmentation
docstr_tok: ["Concatenates","multiple","videos","together","on","both","channels",",","if","present",".","If","any","of","the","input","files","does","not","have","an","audio","stream",",","then","audio","will","not","be","processed",".","@","param","video_path",":","the","path","to","the","video","to","be","augmented","@","param","output_path",":","the","path","in","which","the","resulting","video","will","be","stored",".","@","returns",":","a","list","of","strings","containing","the","CLI","FFMPEG","command","for","the","augmentation"]
code: def get_command(self, video_path: str, output_path: str) -> List[str]:
      """
      Concatenates multiple videos together on both channels, if present.
      If any of the input files does not have an audio stream, then audio will not be processed.
  
      @param video_path: the path to the video to be augmented
  
      @param output_path: the path in which the resulting video will be stored.
  
      @returns: a list of strings containing the CLI FFMPEG command for
          the augmentation
      """
      inputs = [["-i", video] for video in self.video_paths]
      flat_inputs = [
          element for sublist in inputs for element in sublist
      ]
      filters = []
  
      process_audio = all(has_audio_stream(v) for v in self.video_paths)
      if not process_audio:
          log.warn("Audio processing will be skipped.")
  
      video_streams = []
      audio_streams = []
      for i in range(len(self.video_paths)):
          filters.append(
              f"[{i}:v]scale={self.width}:{self.height}[{i}v],[{i}v]"
              f"setsar=ratio={self.sample_aspect_ratio}[{i}vf]"
          )
          video_streams.append(f"[{i}vf]")
          audio_streams.append(f"[{i}:a]")
  
      filters += self._create_transition_filters(
          video_streams, audio_streams, process_audio
      )
  
      result = [
          "-y",
          *flat_inputs,
          "-filter_complex",
          ";".join(filters),
          "-map",
          "[v]",
      ]
  
      if process_audio:
          result += ["-map", "[a]"]
  
      result += [
          "-vsync",
          "2",
          *self.output_fmt(output_path),
      ]
  
      return result
  
file_path: AugLy/augly/video/augmenters/ffmpeg/concat.py
imports: import logging
  from dataclasses import dataclass
  from enum import Enum
  from math import ceil
  from typing import List, Optional
  from augly.utils import pathmgr
  from augly.video.augmenters.ffmpeg.base_augmenter import BaseVidgearFFMPEGAugmenter
  from augly.video.helpers import get_video_info, has_audio_stream
  from dataclasses_json import dataclass_json
label_desc: Use image node_id 4 for calling the VideoAugmenterByConcat obj's underlying member method code with example usage: obj.get_command(video_path, output_path) and returns: result