Spaces:
Runtime error
Runtime error
| import json | |
| import subprocess | |
| import yt_dlp | |
| from shortGPT.editing_utils.handle_videos import getYoutubeVideoLink | |
| def get_duration_yt_dlp(url): | |
| ydl_opts = { | |
| "quiet": True, | |
| "no_warnings": True, | |
| "no_color": True, | |
| "no_call_home": True, | |
| "no_check_certificate": True | |
| } | |
| try: | |
| with yt_dlp.YoutubeDL(ydl_opts) as ydl: | |
| dictMeta = ydl.extract_info(url, download=False, ) | |
| return dictMeta['duration'], "" | |
| except Exception as e: | |
| return None, f"Failed getting duration from the following video/audio url/path using yt_dlp. {e.args[0]}" | |
| def get_duration_ffprobe(signed_url): | |
| try: | |
| cmd = [ | |
| "ffprobe", | |
| "-v", | |
| "quiet", | |
| "-print_format", | |
| "json", | |
| "-show_format", | |
| "-i", | |
| signed_url | |
| ] | |
| output = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) | |
| if output.returncode != 0: | |
| return None, f"Error executing command using ffprobe. {output.stderr.strip()}" | |
| metadata = json.loads(output.stdout) | |
| duration = float(metadata["format"]["duration"]) | |
| return duration, "" | |
| except Exception as e: | |
| print("Failed getting the duration of the asked ressource", e.args[0]) | |
| return None, "" | |
| def get_asset_duration(url, isVideo=True): | |
| if ("youtube.com" in url): | |
| if not isVideo: | |
| url, _ = getYoutubeAudioLink(url) | |
| else: | |
| url, _ = getYoutubeVideoLink(url) | |
| # Trying two different method to get the duration of the video / audio | |
| duration, err_ffprobe = get_duration_ffprobe(url) | |
| if duration is not None: | |
| return url, duration | |
| duration, err_yt_dlp = get_duration_yt_dlp(url) | |
| if duration is not None: | |
| return url, duration | |
| print(err_yt_dlp) | |
| print(err_ffprobe) | |
| print(f"The url/path {url} does not point to a video/ audio. Impossible to extract its duration") | |
| return url, None | |
| def getYoutubeAudioLink(url): | |
| ydl_opts = { | |
| "quiet": True, | |
| "no_warnings": True, | |
| "no_color": True, | |
| "no_call_home": True, | |
| "no_check_certificate": True, | |
| "format": "bestaudio/best" | |
| } | |
| try: | |
| with yt_dlp.YoutubeDL(ydl_opts) as ydl: | |
| dictMeta = ydl.extract_info( | |
| url, | |
| download=False) | |
| return dictMeta['url'], dictMeta['duration'] | |
| except Exception as e: | |
| print("Failed getting audio link from the following video/url", e.args[0]) | |
| return None | |