sxyazi/yazi · error

err

Error message

err

What it means

video.lua's spot_base calls ffprobe via list_meta with a format/stream spec; if ffprobe fails or emits nothing, meta is nil, ya.err reports the error, and the spot falls back to an empty rows table. This is the ffmpeg/ffprobe metadata-extraction path failing for the video file.

Source

Thrown at yazi-plugin/preset/plugins/video.lua:106

	local rows = self:spot_base(job)
	rows[#rows + 1] = ui.Row {}

	ya.spot_table(
		job,
		ui.Table(ya.list_merge(rows, require("file"):spot_base(job)))
			:area(ui.Pos { "center", w = 60, h = 20 })
			:row(1)
			:col(1)
			:col_style(th.spot.tbl_col)
			:cell_style(th.spot.tbl_cell)
			:widths { ui.Constraint.Length(14), ui.Constraint.Fill(1) }
	)
end

function M:spot_base(job)
	local meta, err = self.list_meta(job.file.path, "format=duration:stream=codec_name,codec_type,width,height")
	if not meta then
		ya.err(err)
		return {}
	end

	local dur = meta.format.duration or 0
	local rows = {
		ui.Row({ "Video" }):style(ui.Style():fg("green")),
		ui.Row { "  Duration:", string.format("%d:%02d", math.floor(dur / 60), math.floor(dur % 60)) },
	}

	for i, s in ipairs(meta.streams) do
		if s.codec_type == "video" then
			rows[#rows + 1] = ui.Row { string.format("  Stream %d:", i), "video" }
			rows[#rows + 1] = ui.Row { "    Codec:", s.codec_name }
			rows[#rows + 1] = ui.Row { "    Size:", string.format("%dx%d", s.width, s.height) }
		elseif s.codec_type == "audio" then
			rows[#rows + 1] = ui.Row { string.format("  Stream %d:", i), "audio" }
			rows[#rows + 1] = ui.Row { "    Codec:", s.codec_name }
		end

View on GitHub (pinned to 5f901b886b)

Solutions

  1. Install ffmpeg (provides ffprobe) and confirm `ffprobe -version` works
  2. Verify the file with `ffprobe -show_format -show_streams <file>` to reproduce the error outside yazi
  3. Re-download/re-encode the file if it is corrupt

Example fix

// before
$ ffprobe clip.mp4   # ffprobe: command not found
// after
sudo apt install ffmpeg
Defensive patterns

Strategy: validation

Validate before calling

if os.execute("command -v ffprobe >/dev/null 2>&1") ~= 0 then
  print("ffprobe not found: install ffmpeg for video spot info")
end

Prevention

When it happens

Trigger: Spotting a video when ffprobe is not installed, not on PATH, or rejects the file (corrupt/unrecognized container, probe output missing format.duration).

Common situations: ffmpeg not installed; probing exotic codecs; truncated files; ffprobe too old to parse the container.

Related errors


AI-assisted analysis of sxyazi/yazi@5f901b886b (2026-09-02). Data as JSON: /api/errors/ca4080896262d616. Report an issue: GitHub.