ytdl-org/youtube-dl · error · ExtractorError
err.msg
Error message
err.msg
What it means
Raised while probing the legacy 'smile' (FLV/SWF) stream: FFmpegPostProcessor.get_metadata_object() throws a PostProcessingError and its .msg is re-raised as an expected ExtractorError. The underlying message almost always comes from ffprobe — most commonly that the ffprobe/ffmpeg binary is missing or not executable. It is expected=True only in the wrapping sense; the root cause is local environment.
Source
Thrown at youtube_dl/extractor/niconico.py:457
# Get flv/swf info
timestamp = None
video_real_url = try_get(api_data, lambda x: x['video']['smileInfo']['url'])
if video_real_url:
is_economy = video_real_url.endswith('low')
if is_economy:
self.report_warning('Site is currently in economy mode! You will only have access to lower quality streams')
# Invoking ffprobe to determine resolution
pp = FFmpegPostProcessor(self._downloader)
cookies = self._get_cookies('https://nicovideo.jp').output(header='', sep='; path=/; domain=nicovideo.jp;\n')
self.to_screen('%s: %s' % (video_id, 'Checking smile format with ffprobe'))
try:
metadata = pp.get_metadata_object(video_real_url, ['-cookies', cookies])
except PostProcessingError as err:
raise ExtractorError(err.msg, expected=True)
v_stream = a_stream = {}
# Some complex swf files doesn't have video stream (e.g. nm4809023)
for stream in metadata['streams']:
if stream['codec_type'] == 'video':
v_stream = stream
elif stream['codec_type'] == 'audio':
a_stream = stream
# Community restricted videos seem to have issues with the thumb API not returning anything at all
filesize = int(
(get_video_info_xml('size_high') if not is_economy else get_video_info_xml('size_low'))
or metadata['format']['size']
)
extension = (
get_video_info_xml('movie_type')
or 'mp4' if 'mp4' in metadata['format']['format_name'] else metadata['format']['format_name']View on GitHub (pinned to 956b8c5855)
Solutions
- Install ffmpeg (which bundles ffprobe) or point youtube-dl at it: --ffmpeg-location <path>.
- Verify with 'ffprobe -version' that ffprobe runs and is a recent build.
- Re-login and refresh cookies if the probe URL itself is being rejected (expired session).
Example fix
# before: err.msg like 'ffprobe not found' youtube-dl 'https://www.nicovideo.jp/watch/sm9' # after youtube-dl --ffmpeg-location /usr/local/bin/ffmpeg 'https://www.nicovideo.jp/watch/sm9' # or: brew install ffmpeg / apt install ffmpeg
Defensive patterns
Strategy: validation
Validate before calling
import shutil, subprocess
ffprobe = shutil.which('ffprobe')
if not ffprobe:
raise SystemExit('install ffmpeg/ffprobe before downloading legacy niconico videos')
subprocess.run([ffprobe, '-version'], check=True) Try / catch
except ExtractorError as e:
if 'ffprobe' in str(e) or 'ffmpeg' in str(e).lower():
fix_ffmpeg_env() # install or set --ffmpeg-location, then retry
else:
raise Prevention
- Verify ffprobe/ffmpeg are installed and on PATH before any niconico run.
- Pass --ffmpeg-location explicitly in containerized deployments.
- Refresh cookies if ffprobe fails on the URL itself rather than at launch.
When it happens
Trigger: The watch API supplies a smileInfo.url, the extractor invokes ffprobe with session cookies to determine codec streams, and get_metadata_object raises PostProcessingError (ffprobe not found, probe failure, or unreadable stream).
Common situations: ffmpeg/ffprobe not installed or not on PATH (the classic cause); ffprobe version too old for the stream; session cookies expired so the probe URL returns an error page.
Related errors
- ffprobe/avprobe and ffmpeg/avconv not found. Please install
- WARNING: unable to obtain file audio codec with ffprobe
- This feature does not work from bundled exe. Run youtube-dl
- pycryptodomex not found. Please install it.
- The video has been deleted.
AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14).
Data as JSON: /api/errors/828efe3375a7fcdb.
Report an issue: GitHub.