added file conversion

This commit is contained in:
Vidya Koesmahargyo
2020-11-30 18:09:05 -05:00
parent c190d6f86b
commit 63bf1d0aa7

View File

@@ -57,7 +57,7 @@ def process_raw_video_file(args, s_config, r_config):
else: else:
logger.info('Enter correct video(*.mp4) file path.') logger.info('Enter correct video(*.mp4) file path.')
except Exception as e: except Exception as e:
logger.error('Failed to process mp4 file.') logger.error('Failed to process mp4 file.')
pf.remove_file(video_file[0]) pf.remove_file(video_file[0])
@@ -76,15 +76,15 @@ def process_raw_audio_file(args, s_config, r_config):
if len(audio_file)>0: if len(audio_file)>0:
logger.info('Calculating raw variables...') logger.info('Calculating raw variables...')
out_path = os.path.join(args.output_path, 'raw_variables') out_path = os.path.join(args.output_path, 'raw_variables')
pf.process_acoustic(audio_file[0], out_path, args.dbm_group, r_config) pf.process_acoustic(audio_file[0], out_path, args.dbm_group, r_config)
else: else:
logger.info('Enter correct audio(*.wav) file path.') logger.info('Enter correct audio(*.wav) file path.')
except Exception as e: except Exception as e:
logger.error('Failed to process wav file.') logger.error('Failed to process wav file.')
def process_raw_video_dir(args, s_config, r_config): def process_raw_video_dir(args, s_config, r_config):
""" """
Processing video file Processing video file
@@ -94,17 +94,19 @@ def process_raw_video_dir(args, s_config, r_config):
r_config: raw feature config object r_config: raw feature config object
""" """
if args.output_path != None: if args.output_path != None:
vid_loc = glob.glob(args.input_path + '/*.mp4') vid_loc = glob.glob(args.input_path + '/*.mp4') + glob.glob(args.input_path + '/*.mov')
if len(vid_loc) == 0: if len(vid_loc) == 0:
logger.info('Directory does not have any MP4 files.') logger.info('Directory does not have any MP4 files.')
return return
logger.info('Calculating raw variables...') logger.info('Calculating raw variables...')
for vid_file in vid_loc: for vid_file in vid_loc:
try: try:
fname, file_ext = os.path.splitext(vid_file)
common_video(vid_file, args, r_config) if file_ext == '.mov':
convert_file(vid_file)
common_video(fname+'.mp4', args, r_config)
except Exception as e: except Exception as e:
logger.error('Failed to process mp4 file.') logger.error('Failed to process mp4 file.')
pf.remove_file(vid_file) pf.remove_file(vid_file)
@@ -118,21 +120,39 @@ def process_raw_audio_dir(args, s_config, r_config):
r_config: raw feature config object r_config: raw feature config object
""" """
if args.output_path != None: if args.output_path != None:
audio_loc = glob.glob(args.input_path + '/*.wav') audio_loc = glob.glob(args.input_path + '/*.wav') + glob.glob(args.input_path + '/*.mp3')
if len(audio_loc) == 0: if len(audio_loc) == 0:
logger.info('Directory does not have any WAV files.') logger.info('Directory does not have any WAV files.')
return return
logger.info('Calculating raw variables...') logger.info('Calculating raw variables...')
for audio in audio_loc: for audio in audio_loc:
try: try:
fname, file_ext = os.path.splitext(audio)
if file_ext == '.mp3':
convert_file(audio)
out_path = os.path.join(args.output_path, 'raw_variables') out_path = os.path.join(args.output_path, 'raw_variables')
pf.process_acoustic(audio, out_path, args.dbm_group, r_config) pf.process_acoustic(fname+'.wav', out_path, args.dbm_group, r_config)
except Exception as e: except Exception as e:
logger.error('Failed to process wav file.') logger.error('Failed to process wav file.')
def convert_file(input_filepath):
_, file_ext = os.path.splitext(os.path.basename(input_filepath))
fname, _ = splitext(input_filepath)
if file_ext == '.mp3':
output_filepath = fname + '.wav'
logger.info('Converting audio from {} to wav'.format(input_filepath))
call = ['ffmpeg', '-i', input_filepath, output_filepath]
if file_ext == '.mov':
output_filepath = fname + '.mp4'
logger.info('Converting video from {} to mp4'.format(input_filepath))
call = ['ffmpeg', '-i', input_filepath, output_filepath]
subprocess.check_output(call)
def process_derive(args, r_config, d_config, input_type): def process_derive(args, r_config, d_config, input_type):
""" """
Processing dbm derived variables Processing dbm derived variables
@@ -141,43 +161,49 @@ def process_derive(args, r_config, d_config, input_type):
input_file = glob.glob(args.input_path) input_file = glob.glob(args.input_path)
else: else:
input_file = glob.glob(args.input_path + '/*') input_file = glob.glob(args.input_path + '/*')
out_raw_path = os.path.join(args.output_path, 'raw_variables') out_raw_path = os.path.join(args.output_path, 'raw_variables')
out_derive_path = os.path.join(args.output_path, 'derived_variables') out_derive_path = os.path.join(args.output_path, 'derived_variables')
logger.info('Calculating derived variables...') logger.info('Calculating derived variables...')
feature_df = der.run_derive(input_file, out_raw_path, out_derive_path, r_config, d_config) feature_df = der.run_derive(input_file, out_raw_path, out_derive_path, r_config, d_config)
if __name__=="__main__": if __name__=="__main__":
start_time = time.time() start_time = time.time()
parser = argparse.ArgumentParser(description="Process video/audio......") parser = argparse.ArgumentParser(description="Process video/audio......")
parser.add_argument("--input_path", help="path to the input files", required=True) parser.add_argument("--input_path", help="path to the input files", required=True)
parser.add_argument("--output_path", help="path to the raw and derived variable output", required=True) parser.add_argument("--output_path", help="path to the raw and derived variable output", required=True)
parser.add_argument("--dbm_group", help="list of feature groups", nargs='+') parser.add_argument("--dbm_group", help="list of feature groups", nargs='+')
args = parser.parse_args() args = parser.parse_args()
s_config = config_reader.ConfigReader() s_config = config_reader.ConfigReader()
r_config = config_raw_feature.ConfigRawReader() r_config = config_raw_feature.ConfigRawReader()
d_config = config_derive_feature.ConfigDeriveReader() d_config = config_derive_feature.ConfigDeriveReader()
_, file_ext = os.path.splitext(os.path.basename(args.input_path)) _, file_ext = os.path.splitext(os.path.basename(args.input_path))
if file_ext: if file_ext:
#add check for mov and mp3 here
input_type = 'file' input_type = 'file'
if file_ext.lower() == '.mp4':
if file_ext.lower() in ['.mp4','mov']:
if file_ext.lower() == '.mov':
convert_file(args.input_path)
process_raw_video_file(args, s_config, r_config) process_raw_video_file(args, s_config, r_config)
elif file_ext.lower() == '.wav': elif file_ext.lower() in ['.wav','.mp3']:
if file_ext.lower() == '.mp3':
convert_file(args.input_path)
process_raw_audio_file(args, s_config, r_config) process_raw_audio_file(args, s_config, r_config)
else: else:
logger.error('No WAV or MP4 files detected in input path') logger.error('No WAV/MP3 or MOV/MP4 files detected in input path')
else: else:
input_type = 'dir' input_type = 'dir'
process_raw_video_dir(args, s_config, r_config) process_raw_video_dir(args, s_config, r_config)
process_raw_audio_dir(args, s_config, r_config) process_raw_audio_dir(args, s_config, r_config)
process_derive(args, r_config, d_config, input_type) process_derive(args, r_config, d_config, input_type)
exec_time = time.time() - start_time exec_time = time.time() - start_time
logger.info('Done! Processing time: {} seconds'.format(exec_time)) logger.info('Done! Processing time: {} seconds'.format(exec_time))