Amr-h commited on
Commit
d38e095
·
1 Parent(s): 472cb12

make loom

Browse files
Files changed (1) hide show
  1. audio_extractor.py +9 -46
audio_extractor.py CHANGED
@@ -179,32 +179,12 @@ class RobustAudioExtractor:
179
  shutil.rmtree(temp_dir, ignore_errors=True)
180
  raise Exception(f"Failed to download direct media: {str(e)}")
181
 
182
- def _extract_from_loom(self, url, start_time):
183
- """Extract audio from Loom with multiple strategies"""
184
- strategies = [
185
- self._loom_strategy_basic,
186
- self._loom_strategy_embed,
187
- self._loom_strategy_api,
188
- ]
189
-
190
- for i, strategy in enumerate(strategies):
191
- try:
192
- print(f"Trying Loom strategy {i+1}...")
193
- result = strategy(url, start_time)
194
- if result:
195
- return result
196
- time.sleep(1) # Brief delay between strategies
197
- except Exception as e:
198
- print(f"Loom strategy {i+1} failed: {str(e)}")
199
- continue
200
-
201
- raise Exception("Failed to extract audio from Loom URL with all strategies")
202
 
203
- def _loom_strategy_basic(self, url, start_time):
204
- """Basic Loom extraction using yt-dlp"""
205
  temp_dir = tempfile.mkdtemp()
206
  ydl_opts = {
207
- 'format': 'bestaudio[abr<=128]/best[height<=720]',
208
  'postprocessors': [{
209
  'key': 'FFmpegExtractAudio',
210
  'preferredcodec': 'wav',
@@ -214,33 +194,16 @@ class RobustAudioExtractor:
214
  'quiet': True,
215
  'no_warnings': True,
216
  'noplaylist': True,
217
- 'http_headers': {
218
- 'User-Agent': random.choice(self.user_agents)
219
- }
220
  }
221
 
222
- with suppress_stdout_stderr():
223
- with yt_dlp.YoutubeDL(ydl_opts) as ydl:
224
- ydl.download([url])
225
 
226
- return self._find_audio_file(temp_dir, start_time)
 
 
227
 
228
- def _loom_strategy_embed(self, url, start_time):
229
- """Try Loom embed URL format"""
230
- # Extract video ID from Loom URL
231
- import re
232
- loom_id_match = re.search(r'loom\.com/share/([a-zA-Z0-9]+)', url)
233
- if loom_id_match:
234
- video_id = loom_id_match.group(1)
235
- embed_url = f"https://www.loom.com/embed/{video_id}"
236
- return self._loom_strategy_basic(embed_url, start_time)
237
- return None
238
-
239
- def _loom_strategy_api(self, url, start_time):
240
- """Try to get direct video URL from Loom"""
241
- # This is a placeholder for a more sophisticated approach
242
- # You might need to inspect Loom's network requests to find direct video URLs
243
- return None
244
 
245
  def _extract_with_ytdlp_robust(self, url, start_time):
246
  """Robust yt-dlp extraction with multiple strategies"""
 
179
  shutil.rmtree(temp_dir, ignore_errors=True)
180
  raise Exception(f"Failed to download direct media: {str(e)}")
181
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
182
 
183
+ def extract_audio_from_loom(url):
184
+ """Simple Loom audio extractor using yt-dlp"""
185
  temp_dir = tempfile.mkdtemp()
186
  ydl_opts = {
187
+ 'format': 'bestaudio/best',
188
  'postprocessors': [{
189
  'key': 'FFmpegExtractAudio',
190
  'preferredcodec': 'wav',
 
194
  'quiet': True,
195
  'no_warnings': True,
196
  'noplaylist': True,
 
 
 
197
  }
198
 
199
+ with yt_dlp.YoutubeDL(ydl_opts) as ydl:
200
+ ydl.download([url])
 
201
 
202
+ for f in os.listdir(temp_dir):
203
+ if f.endswith('.wav'):
204
+ return os.path.join(temp_dir, f)
205
 
206
+ raise Exception("Audio file not found in output.")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
207
 
208
  def _extract_with_ytdlp_robust(self, url, start_time):
209
  """Robust yt-dlp extraction with multiple strategies"""