为什么是psnr&;ffmpeg生成的ssim值与H264生成的ssim值不同

为什么是psnr&;ffmpeg生成的ssim值与H264生成的ssim值不同,ffmpeg,video-streaming,metrics,ssim,Ffmpeg,Video Streaming,Metrics,Ssim,我从输入流(mxf或mov)获取生成的mp4视频流,在执行此操作时,我使用-psnr作为H264参数。结果约为40或41 然后我将输入和输出与psnr(或ssim)滤波器进行比较。结果约为20或21。这是一个很大的区别。有人知道这种差异的原因吗 注:ssim结果类似。第一个约为0.97,第二个约为0.83 峰值信噪比 SSIM 可能是因为这两个视频的时间戳没有正确对齐。您应该能够通过提供正在运行的命令的完整输出,然后查看两个输入流的时基来确认这一点 [编辑] 播放一段时间后,有一种方法可以让它忽

我从输入流(mxf或mov)获取生成的mp4视频流,在执行此操作时,我使用
-psnr
作为H264参数。结果约为40或41

然后我将输入和输出与psnr(或ssim)滤波器进行比较。结果约为20或21。这是一个很大的区别。有人知道这种差异的原因吗

注:ssim结果类似。第一个约为0.97,第二个约为0.83

峰值信噪比 SSIM
可能是因为这两个视频的时间戳没有正确对齐。您应该能够通过提供正在运行的命令的完整输出,然后查看两个输入流的时基来确认这一点

[编辑] 播放一段时间后,有一种方法可以让它忽略时间戳,只需进行1:1帧比较:

ffmpeg -i file1 -i file2 \
    -lavfi '[0:v]setpts=N[out0];[1:v]setpts=N[out1];[out0][out1]psnr' \
    -f null -v info -

它可能会抱怨时间戳无效,但您可以安全地忽略这些错误消息。

这就是ffmpeg psnr过滤器模型的问题。即使我们在ref和dis流之间对齐时间戳和帧率,我们也会得到不同的psnr和ssim值。 下面是我这边的测试结果,一个来自libx264日志输出,另一个是通过ffmpeg-psnr滤波器计算得出的

libx264日志内容:

[libx264@0x4840c20]峰值信噪比平均值Y:32.345 U:39.530 V:39.383平均值:33.687 全球:33.326 kb/s:943.62

ffmpeg psnr滤波器测试结果:

[Parsed_psnr_0@0x33b41e0]psnr y:32.067442 u:39.500521 v:39.372329 平均值:33.447532最小值:31.125177最大值:37.774371

有时,我们使用第三方工具来计算psnr和ssim值,并应确保测试工具相同

ffmpeg -i input.mov -codec:v libx264 -ssim -f mp4 output.mp4
SSIM (~0.98...)

ffmpeg -i output.mp4 -i input.mov -filter_complex ssim -f mp4 /dev/null
PSNR (~0.83...)
ffmpeg -i file1 -i file2 \
    -lavfi '[0:v]setpts=N[out0];[1:v]setpts=N[out1];[out0][out1]psnr' \
    -f null -v info -