ffmpeg:如何将 SSIM 和 PSNR 保存到文件中?
ffmpeg: How to save SSIM and PSNR to a file?
我是一个 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 -
我是一个 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 -