Spaces:
Sleeping
Sleeping
Eason Lu
commited on
Commit
·
eb9b4ad
1
Parent(s):
d5fcd7b
modify youtube creation
Browse filesFormer-commit-id: b760c5b2eed40ab922ae7e161dc77be6199c1359
- entries/run.py +2 -2
- src/task.py +31 -13
entries/run.py
CHANGED
@@ -50,7 +50,7 @@ if __name__ == "__main__":
|
|
50 |
'w', encoding='utf-8')])
|
51 |
|
52 |
# TODO: write task info into log
|
53 |
-
|
54 |
# Task create
|
55 |
if args.link is not None:
|
56 |
try:
|
@@ -60,7 +60,7 @@ if __name__ == "__main__":
|
|
60 |
raise RuntimeError("failed to create task from youtube link")
|
61 |
|
62 |
# add task to the status queue
|
63 |
-
task.
|
64 |
|
65 |
|
66 |
|
|
|
50 |
'w', encoding='utf-8')])
|
51 |
|
52 |
# TODO: write task info into log
|
53 |
+
|
54 |
# Task create
|
55 |
if args.link is not None:
|
56 |
try:
|
|
|
60 |
raise RuntimeError("failed to create task from youtube link")
|
61 |
|
62 |
# add task to the status queue
|
63 |
+
task.run()
|
64 |
|
65 |
|
66 |
|
src/task.py
CHANGED
@@ -74,26 +74,25 @@ class Task:
|
|
74 |
self.gpu_status = 0
|
75 |
self.output_type = launch_info["output_type"]
|
76 |
self.task_id = task_id
|
77 |
-
self.
|
78 |
self.SRT_Script = None
|
79 |
self.result = None
|
80 |
|
81 |
-
|
82 |
@staticmethod
|
83 |
def fromYoutubeLink(youtube_url, task_id, launch_info):
|
84 |
-
#
|
85 |
logging.info("Task Creation method: Youtube Link")
|
86 |
local_dump = Path(launch_info['local_dump']) # should get from launch config
|
87 |
return YoutubeTask(task_id, local_dump.joinpath(f"task_{task_id}"), launch_info, youtube_url)
|
88 |
|
89 |
@staticmethod
|
90 |
def fromAudioFile():
|
91 |
-
#
|
92 |
return Task(...)
|
93 |
|
94 |
@staticmethod
|
95 |
def fromVideoFile():
|
96 |
-
#
|
97 |
return Task(...)
|
98 |
|
99 |
# Module 1 ASR: audio --> SRT_script
|
@@ -157,27 +156,46 @@ class YoutubeTask(Task):
|
|
157 |
|
158 |
def run(self):
|
159 |
yt = YouTube(self.youtube_url)
|
160 |
-
local_dump = self.task_local_dir
|
161 |
video = yt.streams.filter(progressive=True, file_extension='mp4').order_by('resolution').desc().first()
|
162 |
|
163 |
if video:
|
164 |
-
video.download(str(
|
165 |
-
logging.info(f'Video
|
|
|
166 |
else:
|
167 |
raise FileNotFoundError(f"Video stream not found for link {self.youtube_url}")
|
168 |
|
169 |
audio = yt.streams.filter(only_audio=True).first()
|
170 |
if audio:
|
171 |
-
audio.download(str(
|
172 |
-
logging.info(f'Audio download completed to {
|
173 |
else:
|
174 |
logging.info("download audio failed, using ffmpeg to extract audio")
|
175 |
subprocess.run(
|
176 |
-
['ffmpeg', '-i',
|
177 |
-
'-ab', '192000', '-vn',
|
178 |
logging.info("audio extraction finished")
|
|
|
|
|
179 |
|
180 |
logging.info("Task Creation Complete.")
|
181 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
182 |
|
183 |
super().run_pipeline()
|
|
|
74 |
self.gpu_status = 0
|
75 |
self.output_type = launch_info["output_type"]
|
76 |
self.task_id = task_id
|
77 |
+
self.audio_path = None
|
78 |
self.SRT_Script = None
|
79 |
self.result = None
|
80 |
|
|
|
81 |
@staticmethod
|
82 |
def fromYoutubeLink(youtube_url, task_id, launch_info):
|
83 |
+
# get audio path
|
84 |
logging.info("Task Creation method: Youtube Link")
|
85 |
local_dump = Path(launch_info['local_dump']) # should get from launch config
|
86 |
return YoutubeTask(task_id, local_dump.joinpath(f"task_{task_id}"), launch_info, youtube_url)
|
87 |
|
88 |
@staticmethod
|
89 |
def fromAudioFile():
|
90 |
+
# get audio path
|
91 |
return Task(...)
|
92 |
|
93 |
@staticmethod
|
94 |
def fromVideoFile():
|
95 |
+
# get audio path
|
96 |
return Task(...)
|
97 |
|
98 |
# Module 1 ASR: audio --> SRT_script
|
|
|
156 |
|
157 |
def run(self):
|
158 |
yt = YouTube(self.youtube_url)
|
|
|
159 |
video = yt.streams.filter(progressive=True, file_extension='mp4').order_by('resolution').desc().first()
|
160 |
|
161 |
if video:
|
162 |
+
video.download(str(self.task_local_dir), filename=f"task_{self.task_id}.mp4")
|
163 |
+
logging.info(f'Video Name: {video.default_filename}')
|
164 |
+
logging.info(f'Video download completed to {self.task_local_dir}!')
|
165 |
else:
|
166 |
raise FileNotFoundError(f"Video stream not found for link {self.youtube_url}")
|
167 |
|
168 |
audio = yt.streams.filter(only_audio=True).first()
|
169 |
if audio:
|
170 |
+
audio.download(str(self.task_local_dir), filename=f"task_{self.task_id}.mp3")
|
171 |
+
logging.info(f'Audio download completed to {self.task_local_dir}!')
|
172 |
else:
|
173 |
logging.info("download audio failed, using ffmpeg to extract audio")
|
174 |
subprocess.run(
|
175 |
+
['ffmpeg', '-i', self.task_local_dir.joinpath(f"task_{self.task_id}.mp4"), '-f', 'mp3',
|
176 |
+
'-ab', '192000', '-vn', self.task_local_dir.joinpath(f"task_{self.task_id}.mp3")])
|
177 |
logging.info("audio extraction finished")
|
178 |
+
|
179 |
+
self.audio_path = self.task_local_dir.joinpath(f"task_{self.task_id}.mp3")
|
180 |
|
181 |
logging.info("Task Creation Complete.")
|
182 |
+
|
183 |
+
super().run_pipeline()
|
184 |
+
|
185 |
+
class AudioTask(Task):
|
186 |
+
def __init__(self, task_id, task_local_dir, launch_info, audio_path):
|
187 |
+
super().__init__(task_id, task_local_dir, launch_info)
|
188 |
+
self.audio_path = audio_path
|
189 |
+
|
190 |
+
def run(self):
|
191 |
+
super().run_pipeline()
|
192 |
+
|
193 |
+
class VideoTask(Task):
|
194 |
+
def __init__(self, task_id, task_local_dir, launch_info, video_path):
|
195 |
+
super().__init__(task_id, task_local_dir, launch_info)
|
196 |
+
self.audio_path = video_path
|
197 |
+
|
198 |
+
def run(self):
|
199 |
+
|
200 |
|
201 |
super().run_pipeline()
|