bpiyush commited on
Commit
cdac373
1 Parent(s): 8d9c770

Improves the yt download reliablity

Browse files
app.py CHANGED
@@ -127,7 +127,7 @@ Tips to get better results:
127
  </div>
128
  </div>
129
  """
130
-
131
 
132
  def download_from_youtube(
133
  video_id,
@@ -188,6 +188,11 @@ def configure_input():
188
  )
189
  video_input = gr.Video(label="Upload Video", height=520)
190
  youtube_link = gr.Textbox(label="YouTube Link", value=None)
 
 
 
 
 
191
  return [video_input, youtube_link]
192
 
193
 
@@ -267,8 +272,9 @@ def process_input(video, youtube_link):
267
  "YouTube Link cannot be empty if no video is provided."
268
 
269
  video_id = get_video_id_from_url(youtube_link)
270
- video_path = download_from_youtube(
271
- video_id, save_dir="/tmp/", convert_to_mp4=False,
 
272
  )
273
 
274
  # Get predictions
 
127
  </div>
128
  </div>
129
  """
130
+ from download_youtube import download_youtube_video_ytdlp
131
 
132
  def download_from_youtube(
133
  video_id,
 
188
  )
189
  video_input = gr.Video(label="Upload Video", height=520)
190
  youtube_link = gr.Textbox(label="YouTube Link", value=None)
191
+ gr.Markdown(
192
+ "Note: Often, YouTube download can fail because the video may not be public or YouTube asks for Sign in."\
193
+ "We recommend downloading the video in other ways on your machine and uploading it here."\
194
+ " Alternatively, you can clone the repository and run the demo locally which can allow for Sign-in.",
195
+ )
196
  return [video_input, youtube_link]
197
 
198
 
 
272
  "YouTube Link cannot be empty if no video is provided."
273
 
274
  video_id = get_video_id_from_url(youtube_link)
275
+ print("Video ID:", video_id)
276
+ video_path = download_youtube_video_ytdlp(
277
+ video_id, save_dir="/tmp/",
278
  )
279
 
280
  # Get predictions
download_youtube.py ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Util functions to download videos from youtube."""
2
+ from pytube import YouTube
3
+ import yt_dlp
4
+ from glob import glob
5
+ import os
6
+
7
+
8
+ def download_youtube_video_pytube(video_id, save_path="."):
9
+ url = f"https://www.youtube.com/watch?v={video_id}"
10
+ try:
11
+ # Create a YouTube object
12
+ yt = YouTube(url)
13
+
14
+ # Select the highest resolution stream
15
+ stream = yt.streams.get_highest_resolution()
16
+
17
+ # Download the video
18
+ stream.download(output_path=save_path)
19
+ print(f"Downloaded: {yt.title}")
20
+ except Exception as e:
21
+ print(f"An error occurred: {e}")
22
+
23
+
24
+ def download_youtube_video_ytdlp(video_id, save_dir="/tmp/"):
25
+ try:
26
+ # Construct the URL using the video ID
27
+ url = f"https://www.youtube.com/watch?v={video_id}"
28
+
29
+ # yt-dlp options
30
+ ydl_opts = {
31
+ 'format': 'best', # Download the best video quality
32
+ 'outtmpl': f'{save_dir}/{video_id}.%(ext)s', # Save using video ID as the filename
33
+ 'noprogress': True, # Suppress progress bar
34
+ }
35
+
36
+ # Download the video
37
+ with yt_dlp.YoutubeDL(ydl_opts) as ydl:
38
+ ydl.download([url])
39
+
40
+ print(f"Downloaded video with ID: {video_id} to {save_dir}")
41
+ saved_path = glob(f"{save_dir}/{video_id}.*")[0]
42
+ assert os.path.exists(saved_path), f"File not found: {saved_path}"
43
+ return saved_path
44
+ except Exception as e:
45
+ print(f"An error occurred for video ID {video_id}: {e}")
46
+
47
+
48
+ if __name__ == "__main__":
49
+ # Example usage
50
+ # video_id = "FwZfVEuCnI4"
51
+ video_id = "PCHIWN-Wi3M"
52
+ # download_youtube_video(video_id)
53
+ download_youtube_video_ytdlp(video_id)
shared/utils/__pycache__/__init__.cpython-39.pyc CHANGED
Binary files a/shared/utils/__pycache__/__init__.cpython-39.pyc and b/shared/utils/__pycache__/__init__.cpython-39.pyc differ
 
shared/utils/__pycache__/audio.cpython-39.pyc CHANGED
Binary files a/shared/utils/__pycache__/audio.cpython-39.pyc and b/shared/utils/__pycache__/audio.cpython-39.pyc differ
 
shared/utils/__pycache__/av.cpython-39.pyc CHANGED
Binary files a/shared/utils/__pycache__/av.cpython-39.pyc and b/shared/utils/__pycache__/av.cpython-39.pyc differ
 
shared/utils/__pycache__/image.cpython-39.pyc CHANGED
Binary files a/shared/utils/__pycache__/image.cpython-39.pyc and b/shared/utils/__pycache__/image.cpython-39.pyc differ
 
shared/utils/__pycache__/io.cpython-39.pyc CHANGED
Binary files a/shared/utils/__pycache__/io.cpython-39.pyc and b/shared/utils/__pycache__/io.cpython-39.pyc differ
 
shared/utils/__pycache__/keypoint_matching.cpython-39.pyc CHANGED
Binary files a/shared/utils/__pycache__/keypoint_matching.cpython-39.pyc and b/shared/utils/__pycache__/keypoint_matching.cpython-39.pyc differ
 
shared/utils/__pycache__/log.cpython-39.pyc CHANGED
Binary files a/shared/utils/__pycache__/log.cpython-39.pyc and b/shared/utils/__pycache__/log.cpython-39.pyc differ
 
shared/utils/__pycache__/metrics.cpython-39.pyc CHANGED
Binary files a/shared/utils/__pycache__/metrics.cpython-39.pyc and b/shared/utils/__pycache__/metrics.cpython-39.pyc differ
 
shared/utils/__pycache__/misc.cpython-39.pyc CHANGED
Binary files a/shared/utils/__pycache__/misc.cpython-39.pyc and b/shared/utils/__pycache__/misc.cpython-39.pyc differ
 
shared/utils/__pycache__/pandas_utils.cpython-39.pyc CHANGED
Binary files a/shared/utils/__pycache__/pandas_utils.cpython-39.pyc and b/shared/utils/__pycache__/pandas_utils.cpython-39.pyc differ
 
shared/utils/__pycache__/paths.cpython-39.pyc CHANGED
Binary files a/shared/utils/__pycache__/paths.cpython-39.pyc and b/shared/utils/__pycache__/paths.cpython-39.pyc differ
 
shared/utils/__pycache__/physics.cpython-39.pyc CHANGED
Binary files a/shared/utils/__pycache__/physics.cpython-39.pyc and b/shared/utils/__pycache__/physics.cpython-39.pyc differ
 
shared/utils/__pycache__/visualize.cpython-39.pyc CHANGED
Binary files a/shared/utils/__pycache__/visualize.cpython-39.pyc and b/shared/utils/__pycache__/visualize.cpython-39.pyc differ
 
sound_of_water/audio_pitch/__pycache__/model.cpython-39.pyc CHANGED
Binary files a/sound_of_water/audio_pitch/__pycache__/model.cpython-39.pyc and b/sound_of_water/audio_pitch/__pycache__/model.cpython-39.pyc differ
 
sound_of_water/data/__pycache__/audio_loader.cpython-39.pyc CHANGED
Binary files a/sound_of_water/data/__pycache__/audio_loader.cpython-39.pyc and b/sound_of_water/data/__pycache__/audio_loader.cpython-39.pyc differ
 
sound_of_water/data/__pycache__/audio_transforms.cpython-39.pyc CHANGED
Binary files a/sound_of_water/data/__pycache__/audio_transforms.cpython-39.pyc and b/sound_of_water/data/__pycache__/audio_transforms.cpython-39.pyc differ
 
sound_of_water/data/__pycache__/csv_loader.cpython-39.pyc CHANGED
Binary files a/sound_of_water/data/__pycache__/csv_loader.cpython-39.pyc and b/sound_of_water/data/__pycache__/csv_loader.cpython-39.pyc differ