比较两个视频的PSNR,可能与ffmpeg?

Uni*_*erd 5 video ffmpeg

我想将大量视频与一个好的参考视频进行比较,以便找到质量较差的视频.我想通过调用命令行实用程序以批处理模式执行此操作,我已经以这种方式使用ffmpeg来获取视频帧.

如果我对视频进行转码,ffmpg会给我一个PSNR值来比较输入和输出视频.我的印象是我可以使用这样的东西比较两个单独的视频,但找不到办法.

我会更好地从每个视频中抓取一个帧并以某种方式比较它们吗?PSNR对我来说可能不是最佳选择?

我不是在寻找质量上的微小差异,而是寻找同步问题或大量积雪等重大差异.

有什么建议?提前致谢 :-)

小智 22

我知道现在为时已晚,但我试图做同样的事情而无法找到方法.对于遇到相同问题的任何人,这是您使用ffmpeg中的psnr过滤器比较两个单独视频的方式:

ffmpeg -i input_video.mp4 -i reference_video.mp4 -filter_complex"psnr""output_video.mp4"

文档说input_video将不变地传递给output_video,psnr值将显示在命令行上.

  • 因为如果将它发送到null复用器,你不需要运行速度更快的输出:-f null - (5认同)

mys*_*age 8

.\..\ffmpeg -i [Input] -i [Output] -lavfi  psnr="stats_file=psnr.log" -f null -
Run Code Online (Sandbox Code Playgroud)

我当时正在查看ssim命令(https://ffmpeg.org/ffmpeg-all.html#ssim),并决定尝试将其用于psnr命令,以查看是否可以获得任何有用的结果。对我来说似乎很有用。日志文件具有一个mse_avg值,我发现该值对于检测我生成的视频中的宏块很有用。

http://www.mathworks.com/help/vision/ref/psnr.html帮助我了解了mse和psnr的含义。

  • 有用!一个不错的答案。顺便说一下,Netflix 有一个更准确的视频质量指标“VMAF”,它是开源的! (2认同)

dmi*_*lev 5

ffmpeg有一个psnr过滤器:

.. psnr             VV->V      Calculate the PSNR between two video streams.
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅https://trac.ffmpeg.org/wiki/FilteringGuide


ale*_*son 2

ffmpeg 可以在编码过程中计算 PSNR 和 SSIM,但为了比较 2 个视频,我使用了AVISynth 比较