小视频已经深入千家万户。无论是商业推广还是各种玩法,视频质量无疑是金字塔的根基。根据业务需求,为小视频质量提供一系列检测保障。黑屏检测1、ffmepg相关参数说明:blackdetectfilter:检测视频中纯黑屏的时间段。用于检查黑屏视频,例如过渡、商业广告或非法数据。输出数据包括黑屏段的起点和黑屏持续时间(以秒为单位)。black_min_duration,d:设置黑场时间阈值,只有黑场持续时间大于阈值时才认为是黑场视频。阈值大于等于0,默认为2.0。picture_black_ratio_th,pic_th:设置黑场的判断阈值,nb_black_pixels/nb_pixels(黑场像素/总像素),值为百分比,大于或等于该阈值,该帧图片被认为是黑场。默认值为0.98。pixel_black_th,pix_th:设置场像素的黑色判断阈值,默认值为0.10。根据这个阈值计算绝对阈值,低于绝对阈值的像素被认为是黑场像素。绝对阈值计算公式如下:absolute_threshold=luminance_minimum_value+pixel_black_th*luminance_range_sizeluminance_range_size和luminance_minimum_value取决于输入视频的格式,对于YUV全范围其范围是[0-255],对于YUV非全范围其范围是[16-235];示例:blackdetect=d=2:pix_th=0.00该命令将黑色像素判断阈值设置为0,检查黑屏持续时间不小于2s的段。由于使用python无法直接获取ffmpeg打印的流日志,所以这里使用freport方式将日志输出到文件,然后解析文件获取黑屏段。大家有什么好的办法欢迎指导!importosimportsubprocessfromtimeimporttime,sleepdefblack_detect(video):report_file_name='./log/blackvideo-{}.log'.format(int(time()))cmd='FFREPORT=file={}:level=32ffmpeg-report-vquiet-i{video}-vfblackdetect=d=0.5:pix_th=0.40:pic_th={pic_th}-fnull-'.format(report_file_name,video=video,pic_th=0.85)尝试:popen=subprocess.Popen(cmd,stdout=subprocess.PIPE,shell=True)popen.wait()#stdout,stderr=popen.stderrsleep(0.5)exceptExceptionase:print(e)ifos.path.exists(report_file_name):withopen(report_file_name,'r')asrf:content=rf.readlines()black_duration={}part=1forconincontent:if'black_start'incon:打印(con)black_info=con.split('')[-1:-4:-1]part_black_info=dict(map(lambdax:x.replace('n','').split(':'),black_info))black_duration[part]=part_black_infopart+=1print(black_duration)else:print('检测失败...')2、视频帧采样、图像检测https://cloud.tencent.com/dev...参考文档:https://blog.csdn.net/ternenc...https://blog.csdn.net/ternenc...
