Eason Lu commited on
Commit
eb9b4ad
·
1 Parent(s): d5fcd7b

modify youtube creation

Browse files

Former-commit-id: b760c5b2eed40ab922ae7e161dc77be6199c1359

Files changed (2) hide show
  1. entries/run.py +2 -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.run_pipeline()
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.progress = NotImplemented
78
  self.SRT_Script = None
79
  self.result = None
80
 
81
-
82
  @staticmethod
83
  def fromYoutubeLink(youtube_url, task_id, launch_info):
84
- # convert to audio
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
- # convert to audio
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(local_dump.joinpath(f"task_{self.task_id}")), filename=f"task_{self.task_id}.mp4")
165
- logging.info(f'Video download completed to {local_dump.joinpath(f"task_{self.task_id}")}!')
 
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(local_dump.joinpath(f"task_{self.task_id}")), filename=f"task_{self.task_id}.mp3")
172
- logging.info(f'Audio download completed to {local_dump.joinpath(f"task_{self.task_id}")}!')
173
  else:
174
  logging.info("download audio failed, using ffmpeg to extract audio")
175
  subprocess.run(
176
- ['ffmpeg', '-i', local_dump.joinpath(f"task_{self.task_id}").joinpath(f"task_{self.task_id}.mp4"), '-f', 'mp3',
177
- '-ab', '192000', '-vn', local_dump.joinpath(f"task_{self.task_id}").joinpath(f"task_{self.task_id}.mp3")])
178
  logging.info("audio extraction finished")
 
 
179
 
180
  logging.info("Task Creation Complete.")
181
- logging.info("Task Creation method: Youtube Link")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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()