使用ffmpeg计算单个帧的PSNR和MSE

使用ffmpeg计算单个帧的PSNR和MSE,ffmpeg,mp4,Ffmpeg,Mp4,我有一个avi文件。我正在将avi文件转换为.mp4编解码器H.264,将第二种情况转换为.mp4编解码器H.265。现在我想计算ref文件(avi文件)之间的PSNR/MSE/MSAD以及使用ffmpeg转换的mp4文件。遇到了用于PSNR和SSIM计算的ffmpeg命令行过滤器,但它给出的是平均PSNR值,而不是每帧的PSNR值。此外,我想使用代码而不是命令行来完成此操作。请阅读解组中的几个示例。c之前,它在av_Read_frame中将整个文件分离为帧呼叫解码 但如何将pkt转换为帧,并能

我有一个avi文件。我正在将avi文件转换为.mp4编解码器H.264,将第二种情况转换为.mp4编解码器H.265。现在我想计算ref文件(avi文件)之间的PSNR/MSE/MSAD以及使用ffmpeg转换的mp4文件。遇到了用于PSNR和SSIM计算的ffmpeg命令行过滤器,但它给出的是平均PSNR值,而不是每帧的PSNR值。此外,我想使用代码而不是命令行来完成此操作。请阅读解组中的几个示例。c之前,它在av_Read_frame中将整个文件分离为帧呼叫解码 但如何将pkt转换为帧,并能够计算PSNR或MSE值

问候 Mayank

FFmpeg有一个可根据每帧元数据提供每帧PSNR的。您可能希望使用它,因为它还允许简单地扩展代码以添加SSIM(使用),而无需您付出太多的努力


您应该能够找到有关将libavfilter与解码的AVFrames连接起来的文档,而无需花费太多精力。

我可以使用命令行进行计算,但如何在代码中进行计算。是否有相同的参考。另外,我希望mse值在单独的文件中,有哪些选项。您可以从PSNR计算mse(反过来,这也是人们通常做的):还有一个libavfilter代码示例(我在谷歌上搜索了“libavfilter示例”):