ffmpeg -i in.mp4 -ss 00:00:01 -vframes 1 -vf "scale=640:-1" cover.jpg ffmpeg -i cover.jpg -vf "blackdetect=d=0.1:pix_th=0.10" -f null - 2>&1 | grep black
上传视频后自动截封面,十个小视频里有三个是纯黑图。命令用的是 -ss 0 -vframes 1,原视频开头有 0.8 秒黑场。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。
追下去是这么回事:短视频常用淡入,第 0 帧本来就是黑的,关键帧也不在起点。直接取第一帧拿到的就是黑场。编码器又要求从关键帧解码,取到的画面还可能不是预期时间点。
「ffmpeg 首帧截取」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。监控和日志的时间要对上,时区不一致会多绕很大一圈。
临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。
处理上按这个顺序:把截取时间挪到 1 秒或视频时长的十分之一;-ss 放在 -i 之后做精确定位 避免关键帧偏移;加黑场检测 全黑就往后跳到有画面的位置;截完检查平均亮度 低于阈值重截。
确认没问题再收工,重新截取的封面不是纯黑,平均亮度高于 30,抽十条视频逐个人工确认有画面。
