如何使用ffmpeg递归扫描媒体库评估视频质量并输出结果到文件
媒体库视频质量批量评估操作方案
核心逻辑
分为有参考评估(有原始无损片源做对比)和无参考评估(只有压制后的视频无原片)两类场景,可结合自身需求选择。
1. 前置依赖安装
需要提前安装以下工具:
- 编译时开启
libvmaf支持的FFmpeg套件(含ffprobe、ffplay) - jq:用于解析JSON格式的输出结果
2. 有参考质量评估方案(最准确)
依赖VMAF(视频多方法评估融合)指标,结果最贴近人眼主观感知,同时支持输出PSNR、SSIM辅助指标。
批量递归处理脚本(Linux/macOS适用)
#!/bin/bash # 配置项:修改为你自己的路径 MEDIA_ROOT="/你的/媒体库/根路径" ORIGINAL_ROOT="/你的/原始片源/根路径" OUTPUT_REPORT="./video_quality_report.csv" # 写入CSV表头 echo "文件路径,平均VMAF,平均PSNR,平均SSIM" > "$OUTPUT_REPORT" # 递归扫描所有视频文件,支持mp4/mkv/mov/avi格式,可自行扩展 find "$MEDIA_ROOT" -type f \( -iname "*.mp4" -o -iname "*.mkv" -o -iname "*.mov" -o -iname "*.avi" \) | while read -r dist_path; do filename=$(basename "$dist_path") ref_path="${ORIGINAL_ROOT}/${filename}" # 没有对应原片直接标记跳过 if [ ! -f "$ref_path" ]; then echo "${dist_path},无匹配原片,无匹配原片,无匹配原片" >> "$OUTPUT_REPORT" continue fi # 临时日志文件存储FFmpeg输出结果 temp_log=$(mktemp) # 调用FFmpeg计算质量指标,关闭冗余日志输出 ffmpeg -i "$dist_path" -i "$ref_path" -lavfi "[0:v]settb=AVTB,setpts=PTS-STARTPTS[dist];[1:v]settb=AVTB,setpts=PTS-STARTPTS[ref];[dist][ref]libvmaf=psnr=1:ssim=1:log_fmt=json:log_path=${temp_log}" -f null - -v quiet # 解析结果写入CSV avg_vmaf=$(jq '.pooled_metrics.vmaf.mean' "$temp_log") avg_psnr=$(jq '.pooled_metrics.psnr.mean' "$temp_log") avg_ssim=$(jq '.pooled_metrics.ssim.mean' "$temp_log") echo "${dist_path},${avg_vmaf},${avg_psnr},${avg_ssim}" >> "$OUTPUT_REPORT" rm "$temp_log" done
Windows适配说明
把bash脚本替换为PowerShell脚本即可,递归扫描命令为Get-ChildItem -Path "C:\你的\媒体库路径" -Recurse -Include *.mp4,*.mkv,*.mov,核心FFmpeg命令和上述逻辑一致。
3. 无参考质量评估方案(无原片场景)
没有原片时无法计算VMAF等对比类指标,可采用以下方案做质量筛查:
- 基础参数筛查:用ffprobe批量提取所有视频的编码格式、码率、分辨率、帧率、时长等元数据,作为质量参考,批量导出命令:
find "$MEDIA_ROOT" -type f \( -iname "*.mp4" -o -iname "*.mkv" \) -exec ffprobe -v quiet -print_format csv -show_entries stream=codec_name,width,height,bit_rate,duration:format=filename {} \; >> video_meta.csv - 异常问题筛查:用FFmpeg自带过滤器检测块效应、模糊、噪点等常见质量问题,单文件检测命令:
ffmpeg -i 待检测视频.mp4 -vf "blurdetect,blockdetect,metadata=mode=print:file=quality_log.txt" -f null - - 专业工具补充:可使用VQMT工具,支持多种无参考视频质量评估指标,输出结果支持导出为文本格式。
注意事项
- 做有参考评估前,需要保证原片和压制片的分辨率、帧率一致,否则需要在过滤器链中增加scale、fps转换逻辑,避免指标计算错误
- 批量处理大量视频时,可通过xargs -P参数指定并行进程数,加快处理速度
- VMAF分数区间参考:90分以上人眼几乎感知不到和原片的差异,80-90分有轻微可感知差异,低于80分差异较为明显
内容的提问来源于stack exchange,提问作者JD71
相关产品推荐
相关产品推荐

