如何解决ffmpeg:如何将 SSIM 和 PSNR 保存到文件中?
我是 ffmpeg 新手。 我希望我的脚本(在 Windows 上)将平均 PSNR 和平均 SSIM 值输出到文件中。 (但不是每一帧的值) 我可以将它们输出到标准输出,但不能输出到文件。
我使用这一行:
ffmpeg -i ref.avi -i compressed.avi -lavfi "ssim;[0:v][1:v]psnr" -f null -
我知道我必须在这里更改一些内容: "-f null -" ,但我无法使其正常工作。
解决方法
使用 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 -
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。