我正在尝试确定视频文件是否有像素化,
目前,我有一个放置视频的监视文件夹,我每 120 秒触发一次检查文件夹以查看是否有任何视频文件。
如果有文件,它使用 MediaInfo 命令行来提取视频和音频的编码。
我也用 ffprobe
在视频上查看它是否会抛出类似 moov atom not found
的错误知道视频是否损坏。
但是,我希望能够判断视频文件是否有像素化。我知道我可以使用 str、std 来打印调试日志。
但是,我发现很难找到有关如何检测像素化的文档。
你们知道是否有办法告诉视频文件可能有像素化,即使是通过视频的日志输出?
我已经在运行一个脚本,它读取日志并在日志上查找信息,以告诉我有关流中丢包的信息,因此,如果您知道我如何输出此类日志来告知是否存在像素化,或者调试日志是否有某些信息这说明了这一点,请告诉我。
最佳答案
任何丢失的数据包都会无意中导致解码错误(在视频/音频流中),因此原则上,如果您在解码时检查调试日志,您已经有了解决方案。是否存在不匹配或解码错误?那么您的文件可能已损坏。
“问题”是解码对丢失具有一定的鲁棒性,并且来自丢失帧或部分帧的错误可以被解码器隐藏。这取决于解码器;有些比其他人更好。
如何判断文件是否有问题?
因此,一个文件可能只有很少的丢失数据包,并且您仅在查看比特流(即 ffmpeg 日志)时会认为它有问题,但它会很好地解码,并且人类查看者可能不会注意到错误。当然,在某些时候,人类肯定会注意到这些问题。
这意味着您将需要一些阈值来确定可接受的数据包错误数量,或者需要对像素级别进行更详细的分析。这意味着:解码视频并分析像素是否可以检测到源自数据包/切片丢失的错误(您称之为“像素化”)。当然,如果您可以访问原始视频进行比较会更容易,但我认为情况并非如此。
你必须决定那个阈值是多少。抽取视频样本并标记它们:它们是否“像素化”?这不是算法可以简单地为您决定的。然后将您的数据包错误计数与您是否接受或拒绝视频的二进制决定相匹配。您应该希望在那里看到一些相关性,当然,它会根据丢失的帧或丢失的数量而有很大差异。
有什么算法吗?
如果您没有引用,当然有一些算法可以帮助估计解码视频的质量。这些被称为“无引用”基于像素的质量模型。
您可能想要研究的一些算法:
在预测人类感知方面,所有这些指标都不是很好。您很可能会得到一些误报。
预测此类视频质量的更好方法是使用“混合无引用”算法,该算法将比特流和视频像素都考虑在内。有一些标准化算法(例如 ITU-T J.343.1 ),其中 Rohde & Schwarz提供商业实现(有关您可能面临的问题,请参见第 20-23 页)。
关于video - 如果视频文件在 FFmpeg 中有像素化,有什么办法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58853365/