text: #!/usr/bin/env python3
  import argparse
  import functools
  import pandas
  
  from deepspeech_training.util.helpers import secs_to_hours
  from pathlib import Path
  
  
  def read_csvs(csv_files):
      # Relative paths are relative to CSV location
      def absolutify(csv, path):
          path = Path(path)
          if path.is_absolute():
              return str(path)
          return str(csv.parent / path)
  
      sets = []
      for csv in csv_files:
          file = pandas.read_csv(csv, encoding='utf-8', na_filter=False)
          file['wav_filename'] = file['wav_filename'].apply(functools.partial(absolutify, csv))
          sets.append(file)
  
      # Concat all sets, drop any extra columns, re-index the final result as 0..N
      return pandas.concat(sets, join='inner', ignore_index=True)
  
  
  def main():
      parser = argparse.ArgumentParser()
  
      parser.add_argument("-csv", "--csv-files", help="Str. Filenames as a comma separated list", required=True)
      parser.add_argument("--sample-rate", type=int, default=16000, required=False, help="Audio sample rate")
      parser.add_argument("--channels", type=int, default=1, required=False, help="Audio channels")
      parser.add_argument("--bits-per-sample", type=int, default=16, required=False, help="Audio bits per sample")
      args = parser.parse_args()
      in_files = [Path(i).absolute() for i in args.csv_files.split(",")]
  
      csv_dataframe = read_csvs(in_files)
      total_bytes = csv_dataframe['wav_filesize'].sum()
      total_files = len(csv_dataframe)
      total_seconds = ((csv_dataframe['wav_filesize'] - 44) / args.sample_rate / args.channels / (args.bits_per_sample // 8)).sum()
  
      print('Total bytes:', total_bytes)
      print('Total files:', total_files)
      print('Total time:', secs_to_hours(total_seconds))
  
  if __name__ == '__main__':
      main()
  