ff0b9228f85f36474bea16bbe07de2827d4ddddd
视频元数据分析器
一个基于 Python + uv 的命令行工具,用于递归扫描一个或多个目录中的视频文件,调用 ffprobe 提取结构化元数据,并生成三类报告:
report.json:完整元数据、失败列表与统计摘要files.csv:适合后续处理的明细表report.html:可直接打开的人类可读报告
当前能力
- 递归扫描一个或多个目录,自动发现常见视频文件
- 提取视频时长、大小、码率、分辨率、帧率、流数量等字段
- 单个视频探测失败时不中断整体扫描,会单独记录到失败列表
- 输出时长分布、大小分布、视频编码分布、分辨率分布
- 默认根据当前样本范围自动调整时长/大小分桶粒度
- 可用参数显式指定时长和大小分布的粒度,覆盖自动分桶
- 可以基于已有
report.json重新计算summary,并重建report.html/files.csv,无需重新扫描视频文件
环境要求
- Python 3.11+
uvffprobeffmpeg
要求 ffprobe 和 ffmpeg 已在系统 PATH 中,或在运行时通过参数显式指定路径。
初始化
uv sync --dev
运行方式
直接扫描目录:
uv run video-metadata-analyzer D:\Videos E:\Archive --output-dir .\reports\latest
如果你习惯模块方式:
uv run python -m video_metadata_analyzer D:\Videos --output-dir .\reports\latest
如果 ffprobe / ffmpeg 不在 PATH 中,可以显式指定:
uv run video-metadata-analyzer D:\Videos `
--ffprobe-bin C:\ffmpeg\bin\ffprobe.exe `
--ffmpeg-bin C:\ffmpeg\bin\ffmpeg.exe `
--output-dir .\reports\latest
粒度参数
默认情况下,时长分布和大小分布会根据样本范围自动选择合适的分桶粒度。
如果你希望固定粒度,可以使用:
--duration-bucket-seconds:显式指定时长分布的分桶粒度,单位为秒--size-bucket-megabytes:显式指定大小分布的分桶粒度,单位为 MB
例如:
uv run video-metadata-analyzer D:\Videos `
--duration-bucket-seconds 60 `
--size-bucket-megabytes 100 `
--output-dir .\reports\latest
上面的命令会把时长分布按 60 秒一桶、大小分布按 100 MB 一桶来统计。
基于旧报告重建
如果你已经有一份旧的 report.json,只想用新版本逻辑重新计算摘要并重建报告,而不重新扫描视频文件:
uv run video-metadata-analyzer --report-json .\reports\latest\report.json
默认会直接在该 report.json 所在目录中重写:
report.jsonfiles.csvreport.html
如果你希望把重建结果写到其他目录:
uv run video-metadata-analyzer `
--report-json .\reports\latest\report.json `
--output-dir .\reports\rebuilt
重建时同样可以指定新的粒度参数:
uv run video-metadata-analyzer `
--report-json .\reports\latest\report.json `
--duration-bucket-seconds 300
扫描阶段如果使用了显式粒度,这些设置会写入 report.json 的 summary_options。之后再次用 --report-json 重建时,如果不额外传参,会继承原先保存的粒度;如果只传其中一个参数,则只覆盖对应那一项。
输出结果说明
输出目录默认包含三个文件:
report.jsonfiles.csvreport.html
其中:
report.json包含summary、成功文件列表files、失败文件列表failures,以及用于重建的summary_optionsfiles.csv同时包含成功和失败结果,并带有status、error_type、error_message字段report.html是离线静态页面,可以直接双击打开查看摘要、图表和失败清单- 当使用
--report-json时,会根据files/failures重新计算summary,并生成新的report.json、files.csv、report.html
运行测试
运行全部测试:
uv run pytest -q
查看命令行帮助:
uv run video-metadata-analyzer --help
当前边界
当前版本优先保证扫描、提取、统计、可视化和报告产出,暂时没有实现这些增强项:
- 损坏视频内容级校验
- 交互式前端筛选界面
- 增量扫描缓存或数据库
Description
Languages
Python
100%