0

我是一个ffmpeg新手。我希望我的脚本(在 Windows 上)将平均 PSNR 和平均 SSIM 值输出到文件中。(但不是每一帧的值)我可以将它们输出到标准输出,但不能输出到文件。

我使用这条线:

ffmpeg -i ref.avi -i compressed.avi -lavfi  "ssim;[0:v][1:v]psnr" -f null -

我知道我必须在这里改变一些东西: "-f null -" ,但我不能让它工作。

4

1 回答 1

1

使用 ssim 和 psnr 过滤器

在 Linux 和 macOS 上,您可以使用grep

$ ffmpeg -i compressed.avi -i reference.avi -lavfi "[0][1]ssim;[0][1]psnr" -f null - |& grep Parsed_ > ff.log

简单,但主要的缺点是它不会向您显示控制台输出,因此您可能会错过错误。要修复该添加tee

$ ffmpeg -i compressed.avi -i reference.avi -lavfi "[0][1]ssim;[0][1]psnr" -f null - |& tee >(grep Parsed_ > ff.log)

ff.log来自任一命令的示例内容:

[Parsed_ssim_0 @ 0x5579d7f17b40] SSIM Y:0.796135 (6.906565) U:0.843488 (8.054531) V:0.822424 (7.506157) All:0.820682 (7.463768)
[Parsed_psnr_1 @ 0x5579d7f12b00] PSNR y:24.940925 u:23.938192 v:23.641771 average:24.138969 min:23.298059 max:26.880485
  • 如果要追加ff.log而不是覆盖,请改为使用grep Parsed_ >> ff.log
  • 如果|&对您不起作用,请2>&1改用。

或者使用 libvmaf

libvmaf过滤器速度较慢,但​​会输出一个日志文件,其中包含 VMAF、SSIM 和 PSNR 汇总分数以及 XML 或 JSON 格式的每帧分数。需要编译您的 ffmpeg--enable-libvmaf才能使用此过滤器。

ffmpeg -i compressed.avi -i reference.avi -lavfi "[0][1]libvmaf=log_path=vmaf.xml:log_fmt=xml:ssim=1:psnr=1" -f null -
于 2021-03-04T18:21:26.167 回答