{"record":{"id":"ca4080896262d616","repo":"sxyazi/yazi","slug":"err-ca4080","errorCode":null,"errorMessage":"err","messagePattern":"err","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"yazi-plugin/preset/plugins/video.lua","lineNumber":106,"sourceCode":"\tlocal rows = self:spot_base(job)\n\trows[#rows + 1] = ui.Row {}\n\n\tya.spot_table(\n\t\tjob,\n\t\tui.Table(ya.list_merge(rows, require(\"file\"):spot_base(job)))\n\t\t\t:area(ui.Pos { \"center\", w = 60, h = 20 })\n\t\t\t:row(1)\n\t\t\t:col(1)\n\t\t\t:col_style(th.spot.tbl_col)\n\t\t\t:cell_style(th.spot.tbl_cell)\n\t\t\t:widths { ui.Constraint.Length(14), ui.Constraint.Fill(1) }\n\t)\nend\n\nfunction M:spot_base(job)\n\tlocal meta, err = self.list_meta(job.file.path, \"format=duration:stream=codec_name,codec_type,width,height\")\n\tif not meta then\n\t\tya.err(err)\n\t\treturn {}\n\tend\n\n\tlocal dur = meta.format.duration or 0\n\tlocal rows = {\n\t\tui.Row({ \"Video\" }):style(ui.Style():fg(\"green\")),\n\t\tui.Row { \"  Duration:\", string.format(\"%d:%02d\", math.floor(dur / 60), math.floor(dur % 60)) },\n\t}\n\n\tfor i, s in ipairs(meta.streams) do\n\t\tif s.codec_type == \"video\" then\n\t\t\trows[#rows + 1] = ui.Row { string.format(\"  Stream %d:\", i), \"video\" }\n\t\t\trows[#rows + 1] = ui.Row { \"    Codec:\", s.codec_name }\n\t\t\trows[#rows + 1] = ui.Row { \"    Size:\", string.format(\"%dx%d\", s.width, s.height) }\n\t\telseif s.codec_type == \"audio\" then\n\t\t\trows[#rows + 1] = ui.Row { string.format(\"  Stream %d:\", i), \"audio\" }\n\t\t\trows[#rows + 1] = ui.Row { \"    Codec:\", s.codec_name }\n\t\tend","sourceCodeStart":88,"sourceCodeEnd":124,"githubUrl":"https://github.com/sxyazi/yazi/blob/5f901b886b14de1f17460b6e52e9de5d67f8aba9/yazi-plugin/preset/plugins/video.lua#L88-L124","documentation":"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.","triggerScenarios":"Spotting a video when ffprobe is not installed, not on PATH, or rejects the file (corrupt/unrecognized container, probe output missing format.duration).","commonSituations":"ffmpeg not installed; probing exotic codecs; truncated files; ffprobe too old to parse the container.","solutions":["Install ffmpeg (provides ffprobe) and confirm `ffprobe -version` works","Verify the file with `ffprobe -show_format -show_streams <file>` to reproduce the error outside yazi","Re-download/re-encode the file if it is corrupt"],"exampleFix":"// before\n$ ffprobe clip.mp4   # ffprobe: command not found\n// after\nsudo apt install ffmpeg","handlingStrategy":"validation","validationCode":"if os.execute(\"command -v ffprobe >/dev/null 2>&1\") ~= 0 then\n  print(\"ffprobe not found: install ffmpeg for video spot info\")\nend","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Install ffmpeg wherever yazi is used for video","Validate media files before deep inspection","Re-test with `ffprobe -show_format <file>` when spot rows are empty"],"tags":["lua","plugin","video","ffprobe","missing-binary"],"backgroundTag":"missing-external-binary","analyzedSha":"5f901b886b14de1f17460b6e52e9de5d67f8aba9","analyzedAt":"2026-09-02T18:38:25.566Z","contentChangedAt":"2026-09-02T18:38:25.566Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}