ytdl-org/youtube-dl · error · ExtractorError
Video %s %s
Error message
Video %s %s
What it means
Raised by the RedTube extractor after downloading the video webpage when the HTML contains markers that the video was removed ('video-deleted-info' / '>This video has been removed') or is private ('private_video_text' / '>This video is private' / '>Send a friend request to its owner to be able to view it'). The message interpolates the video id and the reason ('has been removed' or 'is private'). Expected=True, so it is a clean, site-reported failure.
Source
Thrown at youtube_dl/extractor/redtube.py:57
@staticmethod
def _extract_urls(webpage):
return re.findall(
r'<iframe[^>]+?src=["\'](?P<url>(?:https?:)?//embed\.redtube\.com/\?.*?\bid=\d+)',
webpage)
def _real_extract(self, url):
video_id = self._match_id(url)
webpage = self._download_webpage(
'http://www.redtube.com/%s' % video_id, video_id)
ERRORS = (
(('video-deleted-info', '>This video has been removed'), 'has been removed'),
(('private_video_text', '>This video is private', '>Send a friend request to its owner to be able to view it'), 'is private'),
)
for patterns, message in ERRORS:
if any(p in webpage for p in patterns):
raise ExtractorError(
'Video %s %s' % (video_id, message), expected=True)
info = self._search_json_ld(webpage, video_id, default={})
if not info.get('title'):
info['title'] = self._html_search_regex(
(r'<h(\d)[^>]+class="(?:video_title_text|videoTitle|video_title)[^"]*">(?P<title>(?:(?!\1).)+)</h\1>',
r'(?:videoTitle|title)\s*:\s*(["\'])(?P<title>(?:(?!\1).)+)\1',),
webpage, 'title', group='title',
default=None) or self._og_search_title(webpage)
formats = []
sources = self._parse_json(
self._search_regex(
r'sources\s*:\s*({.+?})', webpage, 'source', default='{}'),
video_id, fatal=False)
if sources and isinstance(sources, dict):
for format_id, format_url in sources.items():View on GitHub (pinned to 956b8c5855)
Solutions
- Confirm the video still exists by opening the URL in a browser.
- If private, the video is only reachable by a logged-in friend of the owner - obtain a public mirror or drop the URL.
- Remove dead IDs from your batch/playlist and mark them as unavailable in your pipeline.
- If the page loads fine in a browser, the marker strings likely changed - update youtube-dl or adjust the ERRORS patterns.
Defensive patterns
Strategy: try-catch
Try / catch
try:
ydl.extract_info(url)
except ExtractorError as e:
if 'has been removed' in str(e) or 'is private' in str(e):
mark_unavailable(video_id) # permanent: stop retrying
else:
raise Prevention
- Treat the removed/private messages as permanent failures - do not retry them.
- Scrub redtube ids from stored playlists when this error is seen.
- Remember private videos are unreachable regardless of credentials.
When it happens
Trigger: Downloading any redtube.com/<id> URL where the served page embeds one of the six marker strings, i.e. the video was taken down or its owner set it to private.
Common situations: Stale URLs from old playlists/bookmarks whose videos were removed; private videos shared without friendship with the owner; region-served variant pages that include the private marker.
Related errors
- Wrong video password
- Youku said: Sorry, this video is private
- %s said: %s
- Unable to login: %s
- lynda returned error: %s
AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14).
Data as JSON: /api/errors/bac0a755f91f2fd3.
Report an issue: GitHub.