2

我正在从输入流(mxf 或 mov)中获取生成的 mp4 视频流,并且在执行此操作时,我将-psnr其用作 H264 参数。结果是大约。40 或 41。

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

注意:ssim 结果类似。第一个是~0.97,第二个是~0.83

信噪比

ffmpeg -i input.mov -codec:v libx264 -psnr -f mp4 output.mp4
PSNR (~40)

ffmpeg -i output.mp4 -i input.mov -filter_complex psnr -f mp4 /dev/null
PSNR (~20)

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...)
4

2 回答 2

7

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

[编辑] 玩了一段时间后,这里有一种方法可以让它忽略时间戳,只进行 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 -

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

于 2015-11-23T15:18:42.113 回答
0

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

libx264 日志内容:

[libx264 @ 0x4840c20] PSNR 平均 Y:32.345 U:39.530 V:39.383 Avg:33.687 Global:33.326 kb/s:943.62

ffmpeg psnr 过滤器测试结果:

[Parsed_psnr_0 @ 0x33b41e0] PSNR y:32.067442 u:39.500521 v:39.372329 平均:33.447532 min:31.125177 max:37.774371

有时,我们使用 3rd part 工具来计算 psnr&ssim 值,并应确保测试工具相同。

于 2019-06-03T04:26:10.813 回答