Comments (9)
add --ignore-no-formats-error
to your command
from yt-dlp.
@bashonly doesn't work. I'm still not getting any json output saying that the live stream is offline.
Twitch:
[debug] Command-line config: ['-vU', '--no-config', '--ignore-no-formats-error', '--dump-json', 'https://www.twitch.tv/vinesauce']
[debug] Encodings: locale cp1252, fs utf-8, pref cp1252, out utf-8, error utf-8, screen utf-8
[debug] yt-dlp version [email protected] from yt-dlp/yt-dlp [ff0779267] (win32_dir)
[debug] Python 3.8.10 (CPython AMD64 64bit) - Windows-10-10.0.19045-SP0 (OpenSSL 1.1.1k 25 Mar 2021)
[debug] exe versions: none
[debug] Optional libraries: Cryptodome-3.20.0, brotli-1.1.0, certifi-2024.02.02, curl_cffi-0.5.10, mutagen-1.47.0, requests-2.31.0, sqlite3-3.35.5, urllib3-2.2.1, websockets-12.0
[debug] Proxy map: {}
[debug] Request Handlers: urllib, requests, websockets, curl_cffi
[debug] Loaded 1810 extractors
[debug] Fetching release info: https://api.github.com/repos/yt-dlp/yt-dlp/releases/latest
Latest version: [email protected] from yt-dlp/yt-dlp
yt-dlp is up to date ([email protected] from yt-dlp/yt-dlp)
[twitch:stream] Extracting URL: https://www.twitch.tv/vinesauce
[twitch:stream] vinesauce: Downloading stream GraphQL
ERROR: [twitch:stream] vinesauce: The channel is not currently live
File "yt_dlp\extractor\common.py", line 734, in extract
File "yt_dlp\extractor\twitch.py", line 1033, in _real_extract
Kick:
[debug] Command-line config: ['-vU', '--no-config', '--ignore-no-formats-error', '--dump-json', 'https://kick.com/xQc']
[debug] Encodings: locale cp1252, fs utf-8, pref cp1252, out utf-8, error utf-8, screen utf-8
[debug] yt-dlp version [email protected] from yt-dlp/yt-dlp [ff0779267] (win32_dir)
[debug] Python 3.8.10 (CPython AMD64 64bit) - Windows-10-10.0.19045-SP0 (OpenSSL 1.1.1k 25 Mar 2021)
[debug] exe versions: none
[debug] Optional libraries: Cryptodome-3.20.0, brotli-1.1.0, certifi-2024.02.02, curl_cffi-0.5.10, mutagen-1.47.0, requests-2.31.0, sqlite3-3.35.5, urllib3-2.2.1, websockets-12.0
[debug] Proxy map: {}
[debug] Request Handlers: urllib, requests, websockets, curl_cffi
[debug] Loaded 1810 extractors
[debug] Fetching release info: https://api.github.com/repos/yt-dlp/yt-dlp/releases/latest
Latest version: [email protected] from yt-dlp/yt-dlp
yt-dlp is up to date ([email protected] from yt-dlp/yt-dlp)
[Kick] Setting up session
[Kick] Extracting URL: https://kick.com/xQc
[Kick] xQc: Downloading API JSON
ERROR: [Kick] xQc: The channel is not currently live
File "yt_dlp\extractor\common.py", line 734, in extract
File "yt_dlp\extractor\kick.py", line 61, in _real_extract
Twitcasting:
[debug] Command-line config: ['-vU', '--no-config', '--ignore-no-formats-error', '--dump-json', 'https://twitcasting.tv/c:nanamori']
[debug] Encodings: locale cp1252, fs utf-8, pref cp1252, out utf-8, error utf-8, screen utf-8
[debug] yt-dlp version [email protected] from yt-dlp/yt-dlp [ff0779267] (win32_dir)
[debug] Python 3.8.10 (CPython AMD64 64bit) - Windows-10-10.0.19045-SP0 (OpenSSL 1.1.1k 25 Mar 2021)
[debug] exe versions: none
[debug] Optional libraries: Cryptodome-3.20.0, brotli-1.1.0, certifi-2024.02.02, curl_cffi-0.5.10, mutagen-1.47.0, requests-2.31.0, sqlite3-3.35.5, urllib3-2.2.1, websockets-12.0
[debug] Proxy map: {}
[debug] Request Handlers: urllib, requests, websockets, curl_cffi
[debug] Loaded 1810 extractors
[debug] Fetching release info: https://api.github.com/repos/yt-dlp/yt-dlp/releases/latest
Latest version: [email protected] from yt-dlp/yt-dlp
yt-dlp is up to date ([email protected] from yt-dlp/yt-dlp)
[TwitCastingLive] Extracting URL: https://twitcasting.tv/c:nanamori
[TwitCastingLive] Downloading live video of user c:nanamori. Pass "https://twitcasting.tv/c:nanamori/show" to download the history
[TwitCastingLive] c:nanamori: Checking live status
ERROR: [TwitCastingLive] c:nanamori: The channel is not currently live
File "yt_dlp\extractor\common.py", line 734, in extract
File "yt_dlp\extractor\twitcasting.py", line 254, in _real_extract
etc.
from yt-dlp.
It works when you pass a specific video's URL, e.g. https://www.youtube.com/watch?v=rKMhl43RHo0
, instead of the uploader URL. There is no video to extract when you only pass the uploader URL
from yt-dlp.
There is no video to extract at https://www.youtube.com/watch?v=rKMhl43RHo0
either, it's an upcoming live stream, there is no video on there, at least not yet. Similarly, those are not "uploader URLs", those are URLs for upcoming Twitch, Kick, etc. live streams. They don't have specific pre-assigned video ids like YouTube does, they just have the channel page that goes live when the stream starts. But what difference does this make, why doesn't yt-dlp provide the same output as it does for an upcoming YouTube live stream with --ignore-no-formats-error
?
Anyway, let me re-state my feature request again.
When running yt-dlp on a content that can be either offline or live, e.g. a Twitch channel page like https://www.twitch.tv/vinesauce
, or a Kick channel page like https://kick.com/xQc
, or Twitcasting user page like https://twitcasting.tv/c:nanamori
, etc., and when asking yt-dlp for json output, I want the json to tell me if the content is live or offline.
When such content is live, yt-dlp properly produces json output with "live_status": "is_live"
and "is_live": "true"
. For example, here is an output of a Twitch live stream https://www.twitch.tv/ferretsoftware
that is currently live:
[debug] Command-line config: ['-vU', '--no-config', '--ignore-no-formats-error', '--dump-json', 'https://www.twitch.tv/ferretsoftware']
[debug] Encodings: locale cp1252, fs utf-8, pref cp1252, out utf-8, error utf-8, screen utf-8
[debug] yt-dlp version [email protected] from yt-dlp/yt-dlp [ff0779267] (win32_dir)
[debug] Python 3.8.10 (CPython AMD64 64bit) - Windows-10-10.0.19045-SP0 (OpenSSL 1.1.1k 25 Mar 2021)
[debug] exe versions: none
[debug] Optional libraries: Cryptodome-3.20.0, brotli-1.1.0, certifi-2024.02.02, curl_cffi-0.5.10, mutagen-1.47.0, requests-2.31.0, sqlite3-3.35.5, urllib3-2.2.1, websockets-12.0
[debug] Proxy map: {}
[debug] Request Handlers: urllib, requests, websockets, curl_cffi
[debug] Loaded 1810 extractors
[debug] Fetching release info: https://api.github.com/repos/yt-dlp/yt-dlp/releases/latest
Latest version: [email protected] from yt-dlp/yt-dlp
yt-dlp is up to date ([email protected] from yt-dlp/yt-dlp)
[twitch:stream] Extracting URL: https://www.twitch.tv/ferretsoftware
[twitch:stream] ferretsoftware: Downloading stream GraphQL
[twitch:stream] ferretsoftware: Downloading stream access token GraphQL
[twitch:stream] ferretsoftware: Downloading m3u8 information
[debug] Formats sorted by: hasvid, ie_pref, lang, quality, res, fps, hdr:12(7), vcodec:vp9.2(10), channels, acodec, size, br, asr, proto, vext, aext, hasaud, source, id
[debug] Default format spec: bestvideo*+bestaudio/best
[info] 51091397101: Downloading 1 format(s): 1080p60__source_
{"id": "51091397101", "display_id": "ferretsoftware", "title": "FerretSoftware (live) 2024-05-16 16:44", "description": "Ferret Time! \ud83d\udc9c @PirateSoftware \ud83d\udc9b !Names !Music !Diet !Rescue", "thumbnails": [{"url": "https://static-cdn.jtvnw.net/previews-ttv/live_user_ferretsoftware-1280x720.jpg", "id": "0"}, {"url": "https://static-cdn.jtvnw.net/previews-ttv/live_user_ferretsoftware-0x0.jpg", "preference": 1, "id": "1"}], "uploader": "FerretSoftware", "uploader_id": "ferretsoftware", "timestamp": 1715710641, "view_count": null, "formats": [{"format_id": "audio_only", "format_index": null, "url": "https://video-weaver.mia05.hls.ttvnw.net/v1/playlist/CuME12ulB7kKr2ST_4sOHCUK6mNwZc-GApR_2fRYuhTUj8xmvD_qPI6J1Q-j41vPGU705HvHzR4TVJFfkuZCHp9CY8cv2hZP_6hS2HFD8qxlLNf0yyv6_YppC1VS9leqssYZplUryUh-m5X2Na0zZGDFqQp0xx-XgYDykR3GXNdALrcsk-N4dDSAJBEaRJ0yO1OIX_nEjBs7DBhuee2PFEOU6moC9MuQQRIMmPlQQXIhysTnLyCITw0CbY8GtybPkFFzAuLWu74ovgzug8JsnDTQmFdHcLiF0X6JpllwGdZ6NWaRSzbEpCGZwMdBHi2RAImBAjMjJ-9MiWS8tsd3OTMzfAwYSvOnjsQe_MS-P3cayAw9cw_iDnLjfUhGakELDN4BTEj7tUL8Yz3EQRFGqWFVkfqj4Q4X99x-aOSBx3mj0p4MRnuF48K2Be9nguW-54XobVNVvGpwoDA5PQNo6Htk6Ge1ocOzWHl7Soi-Fvi6mu4el09HqcDyb8alXSlWN_RXB1zb76YL5umdjznWN7Gw0faezH9C8QRfVZ74jlDzKrC5xm8z4gt44ToeigFoaXgZD1XTZng74O0F_w2MvmdUKYJmLd5IMUC0oh3jCLaP9qmam5BDmCVLxEdV2XrS7OEZGb8QeEhY9vTmVI4YB1Yi8KakkBWWyXq1ix_MnAORI94pw8Wd7G_HpX5kjk1pLA4cgEGiU-K6o87KLD48VIDYRvpjcJvVfXnHbMr73qKa_gz-aAKAQsQUJ_upUAdB5WNMIEJL4v-3EGE6RMHcKmdyHGh7iS9HMrmwB1CPV_47AwR-OpgaDM7_aPJtXvbFZ0sl4SABKgl1cy1lYXN0LTEw7Qc.m3u8", "manifest_url": "https://usher.ttvnw.net/api/channel/hls/ferretsoftware.m3u8?allow_source=true&allow_audio_only=true&allow_spectre=true&p=2619705&platform=web&player=twitchweb&supported_codecs=av1%2Ch265%2Ch264&playlist_include_framerate=true&sig=10345a9a9707dc4cbb2ddd673083727f5968e5af&token=%7B%22adblock%22%3Afalse%2C%22authorization%22%3A%7B%22forbidden%22%3Afalse%2C%22reason%22%3A%22%22%7D%2C%22blackout_enabled%22%3Afalse%2C%22channel%22%3A%22ferretsoftware%22%2C%22channel_id%22%3A884338173%2C%22chansub%22%3A%7B%22restricted_bitrates%22%3A%5B%5D%2C%22view_until%22%3A1924905600%7D%2C%22ci_gb%22%3Afalse%2C%22geoblock_reason%22%3A%22%22%2C%22device_id%22%3Anull%2C%22expires%22%3A1715879089%2C%22extended_history_allowed%22%3Afalse%2C%22game%22%3A%22%22%2C%22hide_ads%22%3Afalse%2C%22https_required%22%3Atrue%2C%22mature%22%3Afalse%2C%22partner%22%3Afalse%2C%22platform%22%3A%22web%22%2C%22player_type%22%3A%22site%22%2C%22private%22%3A%7B%22allowed_to_view%22%3Atrue%7D%2C%22privileged%22%3Afalse%2C%22role%22%3A%22%22%2C%22server_ads%22%3Atrue%2C%22show_ads%22%3Atrue%2C%22subscriber%22%3Afalse%2C%22turbo%22%3Afalse%2C%22user_id%22%3Anull%2C%22user_ip%22%3A%2297.100.15.50%22%2C%22version%22%3A2%7D", "tbr": 160.0, "ext": "mp4", "fps": null, "protocol": "m3u8_native", "preference": null, "quality": null, "has_drm": false, "vcodec": "none", "acodec": "mp4a.40.2", "dynamic_range": null, "resolution": "audio only", "aspect_ratio": null, "http_headers": {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Language": "en-us,en;q=0.5", "Sec-Fetch-Mode": "navigate"}, "audio_ext": "mp4", "video_ext": "none", "vbr": 0, "abr": 160.0, "format": "audio_only - audio only"}, {"format_id": "160p", "format_index": null, "url": "https://video-weaver.mia05.hls.ttvnw.net/v1/playlist/CuEE0EcpfmPL6eEa4pSmiJNJAQ8glhbUV8urSRdrffNHQMmMgaH-UBO1jgepLI8mKKPjKIHHQDd8Axxr84TpEzZ5iUAy4w1bpU1sFxF2fqEKV-Obw-VlV13ZcIT4HI2eJ7-_QlCs1EPNaWuFkWesl1NB7wu1-WvvZRd2IrWtpLC26Pbd7KpdgCUIpSfA5Yk0yOd7oyIw_lJZOwHL3SoJa9Dgl7XXEb1NTUFhibuRGNMPhw9EFjMjidQw8RjHHbfXAHcRZ8L31r-hwhsJbPYONjz0Eyn2Z_t27NcEm2w6AzZNIbEhdlduHFLt5cDkDuRFmcnMWYcEcrQKLsebna2yPAvRsHtEzzk6cw8x_Q0rERR6NLxoWBnFXLkjilW0bvtkZsVF3ODRJCgxKZzy8gl5o-T2EGGHPMVd2UtJp8YfCfvDooaEs13-HKdCtQ3iJmlxa3cV5OF12KBZY7eM8dXi5u27LvIOAZtYLeSW1mpaFGUL02wghcNPbQ5jN5-5son-w9EG0Yd-58RIcIdEZfhd-HffKOVk3qts4irnPWYkk64OYC9BQH-7LZnvkNjI-Ti34_rX-IElQsPQlE6L2hDGLeSUXimtLjV9hNlyK6DZHpF_x2onys36U5mZy_ifkIJIBInKn3ypvRgvMRGoajz5R3y-PkdFq8o1DwLjXjd4mjyQN3hY-dwwN-u3ZtOuTIM2zYsDl-SmZlq4lIOIsO5F8MNO91P9eo1U_C13z6seOZ4NlQu4l_NO1Fa-iSfY3xXHm5prOtKGFC1PZdqW4XDhoiWRvcoE_sC5uxoBqW3x4GZFuN88GgzTN_hmWB6XS0ydJukgASoJdXMtZWFzdC0xMO0H.m3u8", "manifest_url": "https://usher.ttvnw.net/api/channel/hls/ferretsoftware.m3u8?allow_source=true&allow_audio_only=true&allow_spectre=true&p=2619705&platform=web&player=twitchweb&supported_codecs=av1%2Ch265%2Ch264&playlist_include_framerate=true&sig=10345a9a9707dc4cbb2ddd673083727f5968e5af&token=%7B%22adblock%22%3Afalse%2C%22authorization%22%3A%7B%22forbidden%22%3Afalse%2C%22reason%22%3A%22%22%7D%2C%22blackout_enabled%22%3Afalse%2C%22channel%22%3A%22ferretsoftware%22%2C%22channel_id%22%3A884338173%2C%22chansub%22%3A%7B%22restricted_bitrates%22%3A%5B%5D%2C%22view_until%22%3A1924905600%7D%2C%22ci_gb%22%3Afalse%2C%22geoblock_reason%22%3A%22%22%2C%22device_id%22%3Anull%2C%22expires%22%3A1715879089%2C%22extended_history_allowed%22%3Afalse%2C%22game%22%3A%22%22%2C%22hide_ads%22%3Afalse%2C%22https_required%22%3Atrue%2C%22mature%22%3Afalse%2C%22partner%22%3Afalse%2C%22platform%22%3A%22web%22%2C%22player_type%22%3A%22site%22%2C%22private%22%3A%7B%22allowed_to_view%22%3Atrue%7D%2C%22privileged%22%3Afalse%2C%22role%22%3A%22%22%2C%22server_ads%22%3Atrue%2C%22show_ads%22%3Atrue%2C%22subscriber%22%3Afalse%2C%22turbo%22%3Afalse%2C%22user_id%22%3Anull%2C%22user_ip%22%3A%2297.100.15.50%22%2C%22version%22%3A2%7D", "tbr": 230.0, "ext": "mp4", "fps": 30.0, "protocol": "m3u8_native", "preference": null, "quality": null, "has_drm": false, "width": 284, "height": 160, "vcodec": "avc1.4D401F", "acodec": "mp4a.40.2", "dynamic_range": "SDR", "resolution": "284x160", "aspect_ratio": 1.77, "http_headers": {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Language": "en-us,en;q=0.5", "Sec-Fetch-Mode": "navigate"}, "video_ext": "mp4", "audio_ext": "none", "vbr": null, "abr": null, "format": "160p - 284x160"}, {"format_id": "360p", "format_index": null, "url": "https://video-weaver.mia05.hls.ttvnw.net/v1/playlist/CuEE1cjQVxbvAtg0nMqvM42Pk_KkONTt-ZSq-MQaHD3yZh8lcI6bM8tvh9ZjoXts5hxhtxcPGbwKfGpXcV35zf6xOfzVC7eCYyCuAmIZlpZ9nhqvlhVef5jYeHqBowzps5GbUB01CCEpiMMThMkfJjezqAJ2HyEiqLqG0ul-6l3mMourBIY6pDIrYNtJPXgeRZQDnGBnYTQjDOdfmH9v49C5TuZJTKXjfhahtEeI0HvsByvOnKfK5cE7OTXkFru7g2eqY_eXKlZ_4Y_cAGvq8t9RfDfH5gfWXWcRIfBlrMfYOqM81MX98PY0DTeFkRFcklwacySLOszL4x5195D5e1PfMfBKM0agSWoKknsd4SmsCE5nVtukALpq7Gc1iZxB7rMDvwAKOcgGokCSXKH4mX2QdxYAaiBBEkdXtq50vo1LtcEFQXgnhAVmq7eN31TVZtEe3NwRj4-5viXCrh5AU3gCzhvR4X2ix0BnaqcFlXrFl9TREg_k1thurzRBd6p7xgvnZhJk_HIjnY6YhUTYkI8tzVGMHBEx-T1zTL9WaUhKeh9mI0lCSnACklbRu4n8wQgVaKT_ZROBISntJeKFDU-wcGTcxfwYWg-hM0TdUTjI3R2cYSvsqGBGArc_6jJA0PA3aooazRu_c72-_-IPTGCgc1WlXJ8GfwphcF_SKAdEOTbuxgX1GChYsEnE1sPHJtYFFLratSNLmS3J2UA06hZBpSAn-GGC5SS0CU6bMIxtSY12-mnCPitYQghKL_V_6rKyPFGpSjPw5ce77i-AiQsfBoc2LrSYDHki06Wh_-CyqPxpGgyAH1YXVZPOIT5QNm0gASoJdXMtZWFzdC0xMO0H.m3u8", "manifest_url": "https://usher.ttvnw.net/api/channel/hls/ferretsoftware.m3u8?allow_source=true&allow_audio_only=true&allow_spectre=true&p=2619705&platform=web&player=twitchweb&supported_codecs=av1%2Ch265%2Ch264&playlist_include_framerate=true&sig=10345a9a9707dc4cbb2ddd673083727f5968e5af&token=%7B%22adblock%22%3Afalse%2C%22authorization%22%3A%7B%22forbidden%22%3Afalse%2C%22reason%22%3A%22%22%7D%2C%22blackout_enabled%22%3Afalse%2C%22channel%22%3A%22ferretsoftware%22%2C%22channel_id%22%3A884338173%2C%22chansub%22%3A%7B%22restricted_bitrates%22%3A%5B%5D%2C%22view_until%22%3A1924905600%7D%2C%22ci_gb%22%3Afalse%2C%22geoblock_reason%22%3A%22%22%2C%22device_id%22%3Anull%2C%22expires%22%3A1715879089%2C%22extended_history_allowed%22%3Afalse%2C%22game%22%3A%22%22%2C%22hide_ads%22%3Afalse%2C%22https_required%22%3Atrue%2C%22mature%22%3Afalse%2C%22partner%22%3Afalse%2C%22platform%22%3A%22web%22%2C%22player_type%22%3A%22site%22%2C%22private%22%3A%7B%22allowed_to_view%22%3Atrue%7D%2C%22privileged%22%3Afalse%2C%22role%22%3A%22%22%2C%22server_ads%22%3Atrue%2C%22show_ads%22%3Atrue%2C%22subscriber%22%3Afalse%2C%22turbo%22%3Afalse%2C%22user_id%22%3Anull%2C%22user_ip%22%3A%2297.100.15.50%22%2C%22version%22%3A2%7D", "tbr": 630.0, "ext": "mp4", "fps": 30.0, "protocol": "m3u8_native", "preference": null, "quality": null, "has_drm": false, "width": 640, "height": 360, "vcodec": "avc1.4D401F", "acodec": "mp4a.40.2", "dynamic_range": "SDR", "resolution": "640x360", "aspect_ratio": 1.78, "http_headers": {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Language": "en-us,en;q=0.5", "Sec-Fetch-Mode": "navigate"}, "video_ext": "mp4", "audio_ext": "none", "vbr": null, "abr": null, "format": "360p - 640x360"}, {"format_id": "480p", "format_index": null, "url": "https://video-weaver.mia05.hls.ttvnw.net/v1/playlist/CuEEqBPM9FuaktXpYO3AXyeHT3lkt41pV5VHZ1y72lua2ekH9iRDSVvQGpQSwGVcbzfhPVz-oNtHLou7Cr0vvj5ZD_M1P2dqv-PmuObGusk74MxNAMZhfV6AXmoofd89s8OImr95jj6V8fagIXZt0Q0Qcwu4MHXhzwHr-d6clbThBuJk0aTfiupCDQ9rANKH0v1R-AQwChji5rv4j33fPdBdWU5YpUQFpjwuXwfSSxIEJgdfq_X1oZ-WBi3YurrypwLFxcqNnpSOcOeHx_fg-HU0zi1awznzD9TG6yaiCFi4vNYQfmsKpLAGFwQXH-yp_dq5qZn-TxqYK-ZbEm7SkgbSyDGcv1pag0sNSs9N2mdpRysqIsXWh4fDZxIM0j01riFva8scdw7vpa5_yt5dhSi9ckWewdxehNogQAlH2ESB5cay8ZJj6mDSqfpoy-YBXVeDfjuCzuH1dE4TA1af5ZpzYiTndMr-JMw1mxTTMczHMSuWcxLGLWl8W9tWwnJ27-9wtMYfJOORqiUwI7LWs1UCw8pom_4xmliaTSdZT94XitsEHPU2Eb_IcxcZvgzuwk0iCJJWyLHn5BIiYCE7ivS957ZPTEVVRUwKsQ5NYUHdlHOoK7lxGCvyo6Mzj2YSm8igLvk9ribDEnaD_mmjYjT4aFk446ua93jlA20CJ8YLTgS1tlumhZW-_Y9g4Eu4txnBHzodSTAB-z2smBSCZNtdas7Df0EBf7P1tBiOl6L7okm9FIYyuBjdWhNMXDHPe4Mwr59GhFeJOEGS0DuUb8keG2P0icTDtmKdcg4mziGGU1oYGgzifDKSOBeXDD1Zh04gASoJdXMtZWFzdC0xMO0H.m3u8", "manifest_url": "https://usher.ttvnw.net/api/channel/hls/ferretsoftware.m3u8?allow_source=true&allow_audio_only=true&allow_spectre=true&p=2619705&platform=web&player=twitchweb&supported_codecs=av1%2Ch265%2Ch264&playlist_include_framerate=true&sig=10345a9a9707dc4cbb2ddd673083727f5968e5af&token=%7B%22adblock%22%3Afalse%2C%22authorization%22%3A%7B%22forbidden%22%3Afalse%2C%22reason%22%3A%22%22%7D%2C%22blackout_enabled%22%3Afalse%2C%22channel%22%3A%22ferretsoftware%22%2C%22channel_id%22%3A884338173%2C%22chansub%22%3A%7B%22restricted_bitrates%22%3A%5B%5D%2C%22view_until%22%3A1924905600%7D%2C%22ci_gb%22%3Afalse%2C%22geoblock_reason%22%3A%22%22%2C%22device_id%22%3Anull%2C%22expires%22%3A1715879089%2C%22extended_history_allowed%22%3Afalse%2C%22game%22%3A%22%22%2C%22hide_ads%22%3Afalse%2C%22https_required%22%3Atrue%2C%22mature%22%3Afalse%2C%22partner%22%3Afalse%2C%22platform%22%3A%22web%22%2C%22player_type%22%3A%22site%22%2C%22private%22%3A%7B%22allowed_to_view%22%3Atrue%7D%2C%22privileged%22%3Afalse%2C%22role%22%3A%22%22%2C%22server_ads%22%3Atrue%2C%22show_ads%22%3Atrue%2C%22subscriber%22%3Afalse%2C%22turbo%22%3Afalse%2C%22user_id%22%3Anull%2C%22user_ip%22%3A%2297.100.15.50%22%2C%22version%22%3A2%7D", "tbr": 1427.999, "ext": "mp4", "fps": 30.0, "protocol": "m3u8_native", "preference": null, "quality": null, "has_drm": false, "width": 852, "height": 480, "vcodec": "avc1.4D401F", "acodec": "mp4a.40.2", "dynamic_range": "SDR", "resolution": "852x480", "aspect_ratio": 1.77, "http_headers": {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Language": "en-us,en;q=0.5", "Sec-Fetch-Mode": "navigate"}, "video_ext": "mp4", "audio_ext": "none", "vbr": null, "abr": null, "format": "480p - 852x480"}, {"format_id": "720p60", "format_index": null, "url": "https://video-weaver.mia05.hls.ttvnw.net/v1/playlist/CuEEAIP44b6sRoZ9243j6A4wXccrzLuxumU1WxK-YnsnUoZrOLaNSNGAHC5heDgVk2ESnesMn1_ArFFGxTUP-QmVR6Xtj5UfseoVSSZ_-DbM8PYXH8bpr_0LTHP3h8qKhfNQkiwRfF3wbLx9iSpHCCTJbYgF33TrHSTixnEerobv-FEduu7NiqLe8rWoVJHlx97JqSn-4H5CspEw8ItFKfrM31AgJGMEKWffREBY0UFXe9pixiIKYjuMBjrQl-UQYz6Wv3Mnv4L2HMAKoY0hV4EP_uVtqxtdxckJTs_YkPZIEeHGh84joCzI6sFxp_8hadwTMeVfpi4o3841W7yyMzXVM-EftXfLQCqv9PpRrjgp-HRB7xTMqnWsNj2aULEDuKjyqoFRCSdw0VyHoU_IRkcbuJw3s7yRpodDdRljBxqk4awGmkb74Nzgmwci04lzfp9QtTMhpdVvxmbNly9jixCioauLNGEp2lxMG6CNhQzkdS5lT0bgQuM0Z7DlX_le8PHYXJe26aIOrHuFwWFaMME8j9gtBqyvHz3nTy9M8m0K-3ecsteLUUsCbzACTs7ePLUi7p7RZc8zx7wCuGoE3ZyE-Bsfxl-aTZEnnUPedeIV-E5oNVAZ5ujZSgwYzIeswGMubvPXtyEctxFt1AEkAlHFjVQxxEfpdR3vi4RLKkrCSZu71c4MBSOBleEYQQAm7XKl0xoJ2Re7KN7wmu4dzVrZmOvLvmPlVyeza6Ky6Fs2jwVVsil-vSVD06QCNFBkaQCjt4WftjAlDgYu7wjmvA2Gk23S9wbhN1goyVPJPJ7R3Yc4GgxoTrEfDXGpeQhSUr0gASoJdXMtZWFzdC0xMO0H.m3u8", "manifest_url": "https://usher.ttvnw.net/api/channel/hls/ferretsoftware.m3u8?allow_source=true&allow_audio_only=true&allow_spectre=true&p=2619705&platform=web&player=twitchweb&supported_codecs=av1%2Ch265%2Ch264&playlist_include_framerate=true&sig=10345a9a9707dc4cbb2ddd673083727f5968e5af&token=%7B%22adblock%22%3Afalse%2C%22authorization%22%3A%7B%22forbidden%22%3Afalse%2C%22reason%22%3A%22%22%7D%2C%22blackout_enabled%22%3Afalse%2C%22channel%22%3A%22ferretsoftware%22%2C%22channel_id%22%3A884338173%2C%22chansub%22%3A%7B%22restricted_bitrates%22%3A%5B%5D%2C%22view_until%22%3A1924905600%7D%2C%22ci_gb%22%3Afalse%2C%22geoblock_reason%22%3A%22%22%2C%22device_id%22%3Anull%2C%22expires%22%3A1715879089%2C%22extended_history_allowed%22%3Afalse%2C%22game%22%3A%22%22%2C%22hide_ads%22%3Afalse%2C%22https_required%22%3Atrue%2C%22mature%22%3Afalse%2C%22partner%22%3Afalse%2C%22platform%22%3A%22web%22%2C%22player_type%22%3A%22site%22%2C%22private%22%3A%7B%22allowed_to_view%22%3Atrue%7D%2C%22privileged%22%3Afalse%2C%22role%22%3A%22%22%2C%22server_ads%22%3Atrue%2C%22show_ads%22%3Atrue%2C%22subscriber%22%3Afalse%2C%22turbo%22%3Afalse%2C%22user_id%22%3Anull%2C%22user_ip%22%3A%2297.100.15.50%22%2C%22version%22%3A2%7D", "tbr": 3422.999, "ext": "mp4", "fps": 60.0, "protocol": "m3u8_native", "preference": null, "quality": null, "has_drm": false, "width": 1280, "height": 720, "vcodec": "avc1.4D401F", "acodec": "mp4a.40.2", "dynamic_range": "SDR", "resolution": "1280x720", "aspect_ratio": 1.78, "http_headers": {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Language": "en-us,en;q=0.5", "Sec-Fetch-Mode": "navigate"}, "video_ext": "mp4", "audio_ext": "none", "vbr": null, "abr": null, "format": "720p60 - 1280x720"}, {"format_id": "1080p60__source_", "format_index": null, "url": "https://video-weaver.mia05.hls.ttvnw.net/v1/playlist/CuMEfaSWXzph2ZK1pPalelgc_OUzUy9Ld1B_noV0aHI0ctjh_aTLGn9DVSwlruKwi4MxP-9mRdWZpjPzlE451nBkWTsbLkUgz24gt0RoKob2CPatQzIEkzqON7SW18G2BEbUxHPl683jaUSTun1iVDDxjmLE6jhdctqid3Vt-nnYyshMoDU6EOVDGkGZBN2aC7bhjM7-xEsAlu0eue76o_Ll3DZmfxNQLLQ2mgBVf6-bryBxyNKL_PVsImgc361PutZEYTpSsI6Ea1yyYt0iTKtPpzsmLzWkFeMgXsaXqkupwUol8uVJwSdWW10yiHt0DWyo1tlTnOwKhI2NQZWejT5BK4Dc8lsPqdLO-tAl3X_FHomudqKQ_WvhyjoJLGuCSUxv6vFnIbHau-ztgH4Ux0GCwSeWnjRyfKQmAwZsNwAbUdHFI4VJr13rGIaNUshbWT9NaheF49wp7pcQ1G99aLk_x6e0T-dSO6eiFtjIOQNeb9j8wmbIPyBTJxjFUbffP5ycimWk6ovWCEQv0VoczpZeXdseSblneucHmZDk-Dw3iXKBG0mZ1owQ1osiMt9P1Rr-I3pNa5JDsweOKA4zJF7U4kpNMVqQ2MWvt030r2Cu0-tNjUSl_A-Ex6SmwotrEP11jg1uvFlABsHqFbp8EWh44ZgnHagKEEo00NGEoP8a2_bPlMazi81RK3wFEikWj7nAe1NbF1zroZYuAqaTQKOC4dcN_V5d_7rJOjGyw811DNHSSNMa6Sv3z0laupMBle6dnVJI6BFRnPDTLPYofxIYVvtGNd46KrgkHqlAazo8of-YsrUaDMJC94xAUz6NDh3b4iABKgl1cy1lYXN0LTEw7Qc.m3u8", "manifest_url": "https://usher.ttvnw.net/api/channel/hls/ferretsoftware.m3u8?allow_source=true&allow_audio_only=true&allow_spectre=true&p=2619705&platform=web&player=twitchweb&supported_codecs=av1%2Ch265%2Ch264&playlist_include_framerate=true&sig=10345a9a9707dc4cbb2ddd673083727f5968e5af&token=%7B%22adblock%22%3Afalse%2C%22authorization%22%3A%7B%22forbidden%22%3Afalse%2C%22reason%22%3A%22%22%7D%2C%22blackout_enabled%22%3Afalse%2C%22channel%22%3A%22ferretsoftware%22%2C%22channel_id%22%3A884338173%2C%22chansub%22%3A%7B%22restricted_bitrates%22%3A%5B%5D%2C%22view_until%22%3A1924905600%7D%2C%22ci_gb%22%3Afalse%2C%22geoblock_reason%22%3A%22%22%2C%22device_id%22%3Anull%2C%22expires%22%3A1715879089%2C%22extended_history_allowed%22%3Afalse%2C%22game%22%3A%22%22%2C%22hide_ads%22%3Afalse%2C%22https_required%22%3Atrue%2C%22mature%22%3Afalse%2C%22partner%22%3Afalse%2C%22platform%22%3A%22web%22%2C%22player_type%22%3A%22site%22%2C%22private%22%3A%7B%22allowed_to_view%22%3Atrue%7D%2C%22privileged%22%3Afalse%2C%22role%22%3A%22%22%2C%22server_ads%22%3Atrue%2C%22show_ads%22%3Atrue%2C%22subscriber%22%3Afalse%2C%22turbo%22%3Afalse%2C%22user_id%22%3Anull%2C%22user_ip%22%3A%2297.100.15.50%22%2C%22version%22%3A2%7D", "tbr": 6891.443, "ext": "mp4", "fps": 60.0, "protocol": "m3u8_native", "preference": null, "quality": null, "has_drm": false, "width": 1920, "height": 1080, "vcodec": "avc1.64002A", "acodec": "mp4a.40.2", "dynamic_range": "SDR", "resolution": "1920x1080", "aspect_ratio": 1.78, "http_headers": {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Language": "en-us,en;q=0.5", "Sec-Fetch-Mode": "navigate"}, "video_ext": "mp4", "audio_ext": "none", "vbr": null, "abr": null, "format": "1080p60__source_ - 1920x1080"}], "is_live": true, "webpage_url": "https://www.twitch.tv/ferretsoftware", "original_url": "https://www.twitch.tv/ferretsoftware", "webpage_url_basename": "ferretsoftware", "webpage_url_domain": "twitch.tv", "extractor": "twitch:stream", "extractor_key": "TwitchStream", "playlist": null, "playlist_index": null, "thumbnail": "https://static-cdn.jtvnw.net/previews-ttv/live_user_ferretsoftware-0x0.jpg", "fulltitle": "FerretSoftware (live)", "upload_date": "20240514", "release_year": null, "live_status": "is_live", "was_live": false, "requested_subtitles": null, "_has_drm": null, "epoch": 1715877887, "format_id": "1080p60__source_", "format_index": null, "url": "https://video-weaver.mia05.hls.ttvnw.net/v1/playlist/CuMEfaSWXzph2ZK1pPalelgc_OUzUy9Ld1B_noV0aHI0ctjh_aTLGn9DVSwlruKwi4MxP-9mRdWZpjPzlE451nBkWTsbLkUgz24gt0RoKob2CPatQzIEkzqON7SW18G2BEbUxHPl683jaUSTun1iVDDxjmLE6jhdctqid3Vt-nnYyshMoDU6EOVDGkGZBN2aC7bhjM7-xEsAlu0eue76o_Ll3DZmfxNQLLQ2mgBVf6-bryBxyNKL_PVsImgc361PutZEYTpSsI6Ea1yyYt0iTKtPpzsmLzWkFeMgXsaXqkupwUol8uVJwSdWW10yiHt0DWyo1tlTnOwKhI2NQZWejT5BK4Dc8lsPqdLO-tAl3X_FHomudqKQ_WvhyjoJLGuCSUxv6vFnIbHau-ztgH4Ux0GCwSeWnjRyfKQmAwZsNwAbUdHFI4VJr13rGIaNUshbWT9NaheF49wp7pcQ1G99aLk_x6e0T-dSO6eiFtjIOQNeb9j8wmbIPyBTJxjFUbffP5ycimWk6ovWCEQv0VoczpZeXdseSblneucHmZDk-Dw3iXKBG0mZ1owQ1osiMt9P1Rr-I3pNa5JDsweOKA4zJF7U4kpNMVqQ2MWvt030r2Cu0-tNjUSl_A-Ex6SmwotrEP11jg1uvFlABsHqFbp8EWh44ZgnHagKEEo00NGEoP8a2_bPlMazi81RK3wFEikWj7nAe1NbF1zroZYuAqaTQKOC4dcN_V5d_7rJOjGyw811DNHSSNMa6Sv3z0laupMBle6dnVJI6BFRnPDTLPYofxIYVvtGNd46KrgkHqlAazo8of-YsrUaDMJC94xAUz6NDh3b4iABKgl1cy1lYXN0LTEw7Qc.m3u8", "manifest_url": "https://usher.ttvnw.net/api/channel/hls/ferretsoftware.m3u8?allow_source=true&allow_audio_only=true&allow_spectre=true&p=2619705&platform=web&player=twitchweb&supported_codecs=av1%2Ch265%2Ch264&playlist_include_framerate=true&sig=10345a9a9707dc4cbb2ddd673083727f5968e5af&token=%7B%22adblock%22%3Afalse%2C%22authorization%22%3A%7B%22forbidden%22%3Afalse%2C%22reason%22%3A%22%22%7D%2C%22blackout_enabled%22%3Afalse%2C%22channel%22%3A%22ferretsoftware%22%2C%22channel_id%22%3A884338173%2C%22chansub%22%3A%7B%22restricted_bitrates%22%3A%5B%5D%2C%22view_until%22%3A1924905600%7D%2C%22ci_gb%22%3Afalse%2C%22geoblock_reason%22%3A%22%22%2C%22device_id%22%3Anull%2C%22expires%22%3A1715879089%2C%22extended_history_allowed%22%3Afalse%2C%22game%22%3A%22%22%2C%22hide_ads%22%3Afalse%2C%22https_required%22%3Atrue%2C%22mature%22%3Afalse%2C%22partner%22%3Afalse%2C%22platform%22%3A%22web%22%2C%22player_type%22%3A%22site%22%2C%22private%22%3A%7B%22allowed_to_view%22%3Atrue%7D%2C%22privileged%22%3Afalse%2C%22role%22%3A%22%22%2C%22server_ads%22%3Atrue%2C%22show_ads%22%3Atrue%2C%22subscriber%22%3Afalse%2C%22turbo%22%3Afalse%2C%22user_id%22%3Anull%2C%22user_ip%22%3A%2297.100.15.50%22%2C%22version%22%3A2%7D", "tbr": 6891.443, "ext": "mp4", "fps": 60.0, "protocol": "m3u8_native", "preference": null, "quality": null, "has_drm": false, "width": 1920, "height": 1080, "vcodec": "avc1.64002A", "acodec": "mp4a.40.2", "dynamic_range": "SDR", "resolution": "1920x1080", "aspect_ratio": 1.78, "http_headers": {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Language": "en-us,en;q=0.5", "Sec-Fetch-Mode": "navigate"}, "video_ext": "mp4", "audio_ext": "none", "vbr": null, "abr": null, "format": "1080p60__source_ - 1920x1080", "_filename": "FerretSoftware (live) 2024-05-16 16_44 [51091397101].mp4", "filename": "FerretSoftware (live) 2024-05-16 16_44 [51091397101].mp4", "_type": "video", "_version": {"version": "2024.04.09", "current_git_head": null, "release_git_head": "ff07792676f404ffff6ee61b5638c9dc1a33a37a", "repository": "yt-dlp/yt-dlp"}}
However, when a live stream is offline, yt-dlp doesn't produce any json output:
[debug] Command-line config: ['-vU', '--no-config', '--ignore-no-formats-error', '--dump-json', 'https://www.twitch.tv/vinesauce']
[debug] Encodings: locale cp1252, fs utf-8, pref cp1252, out utf-8, error utf-8, screen utf-8
[debug] yt-dlp version [email protected] from yt-dlp/yt-dlp [ff0779267] (win32_dir)
[debug] Python 3.8.10 (CPython AMD64 64bit) - Windows-10-10.0.19045-SP0 (OpenSSL 1.1.1k 25 Mar 2021)
[debug] exe versions: none
[debug] Optional libraries: Cryptodome-3.20.0, brotli-1.1.0, certifi-2024.02.02, curl_cffi-0.5.10, mutagen-1.47.0, requests-2.31.0, sqlite3-3.35.5, urllib3-2.2.1, websockets-12.0
[debug] Proxy map: {}
[debug] Request Handlers: urllib, requests, websockets, curl_cffi
[debug] Loaded 1810 extractors
[debug] Fetching release info: https://api.github.com/repos/yt-dlp/yt-dlp/releases/latest
Latest version: [email protected] from yt-dlp/yt-dlp
yt-dlp is up to date ([email protected] from yt-dlp/yt-dlp)
[twitch:stream] Extracting URL: https://www.twitch.tv/vinesauce
[twitch:stream] vinesauce: Downloading stream GraphQL
ERROR: [twitch:stream] vinesauce: The channel is not currently live
File "yt_dlp\extractor\common.py", line 734, in extract
File "yt_dlp\extractor\twitch.py", line 1033, in _real_extract
It correctly deducts that the channel is offline, but doesn't produce json saying that. I expect it to output at least: { "live_status": "is_upcoming", "is_live": false }
or { "live_status": "not_live", "is_live": false }
, whichever is more appropriate here (perhaps with some other details, like the channel id, etc.).
from yt-dlp.
When you pass a channel URL to these extractors, e..g. youtube or twitch, if there is a known upcoming livestream, then said extractor has information (such as id
and live_status
) to extract. If there is no specific upcoming livestream, the extractor has no information to work with and it raises an error (UserNotLive
). It would be incorrect for yt-dlp to return infojson with 'live_status': 'is_upcoming'
, because that is not actually known. yt-dlp core code just handles the URL as such so that --wait-for-video
has an effect.
from yt-dlp.
add --ignore-no-formats-error to your command
Could this be noted in the wiki/docs on the homepage for this option? This has been my 2nd biggest complaint about trying to capture live chat for upcoming streams. It would have been nice to know this sooner.
from yt-dlp.
If there is no specific upcoming livestream, the extractor has no information to work with and it raises an error (UserNotLive)
I wish I could receive these errors, e.g. UserNotLive, in a machine-readable format like json.
I'm writing a script for mpv in Lua that runs yt-dlp.exe on a URL and captures its json output. I want to detect if the URL is a live stream that is offline. Instead I have to resort to checking yt-dlp's stdout/stderr for patterns that look like "ERROR: [twitch:stream] vinesauce: The channel is not currently live", "ERROR: [youtube] rKMhl43RHo0: This live event will begin in 532 days.", etc.
It would be incorrect for yt-dlp to return infojson with 'live_status': 'is_upcoming', because that is not actually known.
Well, 'live_status': 'is_upcoming' was just an example. Like I said, just anything whatever is appropriate. It could be 'live_status': 'not_live', or an entirely new live_status that doesn't exist yet.
Btw, this issue got re-labeled as a question, but it's actually a feature request.
from yt-dlp.
I wish I could receive these errors, e.g. UserNotLive, in a machine-readable format like json.
from yt-dlp.
add --ignore-no-formats-error to your command
Could this be noted in the wiki/docs on the homepage for this option?
From docs
--ignore-no-formats-error Ignore "No video formats" error. Useful for
extracting metadata even if the videos are
not actually available for download
(experimental)
from yt-dlp.
Related Issues (20)
- ERROR: Unsupported URL: https://www.instagram.com/reels/C69PXQPPZlH/ HOT 1
- ERROR: Postprocessing: Error opening input files: Result too large
- orf.on No video formats found!
- Youtube comment Extractor Failed HOT 1
- DownloadError: ERROR: [vimeo] 942547573: Unable to download JSON metadata: HTTP Error 400: Bad Request (caused by <HTTPError 400: Bad Request>) HOT 1
- [ThePlatform] [CWTV] - This format is DRM protected HOT 2
- [NoodleMagazine] Unable to extract player path
- TubiTV.com gives Unauthorized on all downloads HOT 5
- yt-dlp do not working with drm files from WOWPRESENTSPLUS HOT 1
- How do I remux video to a different format Using the Python yt-dlp invocation? HOT 1
- BBC News fails with "Unable to extract playlist data" error HOT 5
- yt-dlp --write-subs --sub-lang "live_chat" on a Live stream is always Top Chat
- Different response to --output, in two different situations HOT 5
- 3speak broken HOT 1
- PhantomJS is unmaintained HOT 1
- X/Twitter video URLs no longer work HOT 1
- Add options to prevent download if sponsorblock entry not found HOT 1
- 6play.fr No video formats found HOT 1
- FFMPEG Convertion failed HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from yt-dlp.