def create_mp4(video, audio, save_path=None): audio = AudioFileClip(audio) if audio is not None else None fps = video.shape[0] / audio.duration imageio.mimsave("backend_files/mute.mp4", video) video = VideoFileClip("backend_files/mute.mp4", audio=False) video.set_audio(audio) if save_path is not None: video.write_videofile(save_path, fps=fps) # , codec='mpeg4') return video
def form(): ## Dealing with form data from the last round, if applicable try: classname=request.form['classname'] if request.form['button'] == 'Apply Label': write_classname = classname else: write_classname = request.form['button'] audio_file_id=request.form['audio_file_id'] start_time=request.form['start_time'] output_csv_path='/home/audio_labeler/output_table.csv' with open(output_csv_path,'a') as fo: label_duration = 1 fo.write(audio_file_id + ',' + \ str(float(start_time)) + ',' + \ str(float(label_duration)) + ',' + \ '''"''' + write_classname + '''"\n''') shutil.copy(output_csv_path,'/home/audio_labeler/static/output/output_table.csv') except: classname='' try: os.remove('/home/audio_labeler/static/' + request.form['temp_wav_filename']) except: pass default_buttons=["Background Speaker","Music","Silence","Multiple Speakers","Not Sure", "Noise",""] try: if write_classname not in default_buttons: label_count_dict[write_classname] += 1 except: try: if write_classname not in default_buttons: label_count_dict[write_classname] = 1 except: pass label_counts = map(list, label_count_dict.items()) label_counts = sorted(label_counts, key=itemgetter(1))[::-1] ## Launching new round #audio_filename=random.choice([item for item in os.listdir('/home/audio_labeler/clips') if item[-4:].lower() in ('.mp3','.wav','.mp4')]) media_path = random.choice(media_paths) audio_file_id = media_path.split('/')[-1][:-4] duration = media_duration(media_path) start_time = int((random.random()*(duration-5.0))) snd = AudioFileClip.AudioFileClip(media_path) temp_wav_filename = str(random.random())[2:] + '.wav' snd.subclip(start_time,start_time + 5).write_audiofile('/home/audio_labeler/static/' + temp_wav_filename) response = render_template('form_audio.html', audio_file_id=audio_file_id, \ start_time=start_time, classname=classname, temp_wav_filename=temp_wav_filename, \ media_path=media_path, label_counts=label_counts[:15]) return response
def subclip(media_path, start_time, end_time, out_dir=''): if out_dir == '': out_dir = os.path.dirname(media_path) audio_filename = media_path.split('/')[-1] basename = audio_filename[:-4] start_time = round(float(start_time), 3) end_time = round(float(end_time), 3) snd = AudioFileClip.AudioFileClip(media_path) out_filename = basename + '__' + str(start_time) + '_' + str( end_time) + '.wav' snd.subclip(start_time, end_time).write_audiofile(os.path.join(out_dir, out_filename)) return os.path.join(out_dir, out_filename)
def subclip_list(media_path, range_pairs, out_dir=''): if out_dir == '': out_dir = os.path.dirname(media_path) snd = AudioFileClip.AudioFileClip(media_path) file_duration = duration(media_path) for pair in range_pairs: start = pair[0] duration_secs = pair[1] if (float(start) >= 0.0) & (float(duration_secs) > 0.0): if start + duration_secs > file_duration: duration_secs = file_duration - start basename = media_path.split('/')[-1][:-4] out_filename = basename + '__' + str(round(start, 4)) + '_' + str( round(duration_secs, 4)) + '.wav' snd.subclip(float(start), float(start) + float(duration_secs)).write_audiofile( os.path.join(out_dir, out_filename))
def read_flute(self): sigs = [] i = 1 if (self.flute): print('start flute feature extraction') os.chdir(os.getcwd() + '\\flute') for path in os.listdir(): if (i % 100 == 0): print("flute : ", i, "/", np.size(os.listdir())) # y, sr = lr.load(path) signal = sig() audio = mpe.AudioFileClip(path) signal.y = np.mean(audio.to_soundarray(buffersize=200), 1) signal.sr = audio.fps # sampling rate feat = feature_extraction.features(signal.y, signal.sr) feat_vec = feat.get_feature_vectors() self.X.append(feat_vec.tolist()) self.Y.append(2) #2 for flute sigs.append(signal) i = i + 1 os.chdir("..") return sigs
def main(argv): try: model_path = sys.argv[1] resolution_secs = float(sys.argv[2]) dir_path = sys.argv[3] except getopt.GetoptError: print "sida_batch_classify.py <pkl model pathname> <directory pathname>" sys.exit(2) print('>> Model: ' + model_path) print('>> Directory: ' + dir_path) classifier = joblib.load(model_path) model_basename = os.path.basename(model_path).replace('.pkl','') media_pathnames = attk.find_media_paths(dir_path) random.shuffle(media_pathnames) for media_pathname in media_pathnames: media_basename = '.'.join(os.path.basename(media_pathname).split('.')[:-1]) csv_path = os.path.join(dir_path, media_basename + '__' + model_basename+'_'+str(resolution_secs)+'.csv') if not os.path.isfile(csv_path): tic = timeit.default_timer() print(' >> Classifying '+ media_pathname.split('/')[-1]) if media_pathname[-4:].lower() == '.wav': wav_pathname = media_pathname using_temp_wav = False else: wav_pathname = attk.temp_wav_path(media_pathname) using_temp_wav = True snd = AudioFileClip.AudioFileClip(wav_pathname) classifier_output = [] for i in range(int(attk.duration(wav_pathname)/resolution_secs)): try: snd.subclip(i * resolution_secs , (i * resolution_secs) + resolution_secs).write_audiofile('/tmp/temp_sida_clip.wav') classifier_output.append(classify_clip(classifier, '/tmp/temp_sida_clip.wav')) except Exception as e: classifier_output.append(0.0) print(e) with open(csv_path, 'w') as fo: i = 0 for value in classifier_output: start = round(i * resolution_secs, 4) duration = round(resolution_secs, 4) fo.write(str(start) + ',' + str(duration) + ',' + str(value) + '\n') i += 1 if using_temp_wav == True: os.remove(wav_pathname) print(" >> Completed in " + str(round(timeit.default_timer() - tic, 4))) + " seconds\n"