96 lines
2.6 KiB
Python
96 lines
2.6 KiB
Python
import sounddevice
|
|
|
|
import os
|
|
import time
|
|
import folder_paths
|
|
from scipy.io import wavfile
|
|
from scipy.io.wavfile import write
|
|
import subprocess
|
|
import sounddevice
|
|
|
|
|
|
audio_path = os.path.join(folder_paths.get_input_directory(),"audio")
|
|
|
|
|
|
|
|
output_dir = os.path.join(folder_paths.get_output_directory(),"n-suite")
|
|
YELLOW = '\33[33m'
|
|
END = '\33[0m'
|
|
|
|
os.makedirs(output_dir,exist_ok=True)
|
|
os.makedirs(os.path.join(output_dir,"videos"),exist_ok=True)
|
|
|
|
class SaveAudio:
|
|
def __init__(self):
|
|
|
|
self.type = "output"
|
|
|
|
|
|
@classmethod
|
|
def INPUT_TYPES(s):
|
|
|
|
try:
|
|
shutil.rmtree(frames_output_dir)
|
|
os.mkdir(frames_output_dir)
|
|
except:
|
|
pass
|
|
|
|
|
|
#print(f"Temporary folder {frames_output_dir} has been emptied.")
|
|
return {"required":
|
|
{"audio": ("AUDIO", ),
|
|
"METADATA": ("STRING", {"default": ""} ),
|
|
"start_time": ([str(i) for i in range(10000)],),
|
|
"end_time": ([str(i) for i in range(10000)],),
|
|
},
|
|
"hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"},
|
|
}
|
|
|
|
|
|
RETURN_NAMES = ()
|
|
RETURN_TYPES = ()
|
|
FUNCTION = "save_video"
|
|
|
|
OUTPUT_NODE = True
|
|
|
|
CATEGORY = "DeepFuze"
|
|
|
|
def save_video(self, audio,METADATA,start_time,end_time,prompt=None, extra_pnginfo=None):
|
|
file_path = os.path.join(audio_path,str(time.time()).replace(".","")+".wav")
|
|
outfile = os.path.join(audio_path,str(time.time()).replace(".","_")+".wav")
|
|
write(file_path,audio.sample_rate,audio.audio_data)
|
|
Fs, data = wavfile.read(file_path)
|
|
n = data.size
|
|
t = n / Fs
|
|
print(t)
|
|
if t < int(end_time):
|
|
end_time = t
|
|
if int(end_time) > 0:
|
|
subprocess.run(['ffmpeg','-i',file_path,'-ss',start_time,'-to',end_time,outfile])
|
|
file_path = outfile
|
|
file_path_ = file_path.replace(".wav",".mp4")
|
|
print(file_path)
|
|
file_path_ = os.path.join(output_dir,"videos",file_path_.split('/')[-1])
|
|
os.system(f"ffmpeg -i {file_path} {file_path_}")
|
|
return {"ui": {"text": [file_path_.split("/")[-1]],}}
|
|
|
|
|
|
class PlayBackAudio:
|
|
|
|
@classmethod
|
|
def INPUT_TYPES(self):
|
|
return {
|
|
"required":{
|
|
"audio": ("AUDIO",)
|
|
}
|
|
}
|
|
OUTPUT_NODE = True
|
|
RETURN_NAMES = ()
|
|
RETURN_TYPES = ()
|
|
CATEGORY = "DeepFuze"
|
|
FUNCTION = "play_audio"
|
|
|
|
def play_audio(self,audio):
|
|
sounddevice.play(audio.audio_data,audio.sample_rate)
|
|
return ()
|