2024-08-06,星期二,北京,晴
今天来看视频关键帧抽取主题。随着最近Sora文生视频的火热,视频相关的数据获得逐渐变得重要起来。这也就涉及到提取视频关键帧的问题。
从文本生成视频,我们拆分来看,一般流程是先将文本扩写生成几部分,之后将每部分生成对应的图像,这步的图像就可以看做视频的关键帧;最后由这一些关键帧扩展为完整的视频。
而视频关键帧抽取任务则是上述过程的反向操作,目的是构造训练数据使用。目前互联网上完整视频最多。而有对应关键帧的视频数据集则少之又少。
我们主要来看一篇2020年的综述文章Keyframe Extraction Techniques: A Review(https://elektrika.utm.my/index.php/ELEKTRIKA_Journal/article/download/221/136),该工作中系统总结了视频关键帧抽取部分的常用流程和方法。主要有以下几步来做:
其中,Keyframe Extraction Process主要有Sampling-Based、Shot-Based、Clustering-Based和其他方法
Sampling-Based:
- 不考虑视频内容,从视频帧中,均匀或者随机采样即可。直白来说就是每隔几帧采样一次。
- 缺点是:sample所得帧并不一定代表整个video,而且会有大量内容相似的帧。
Shot-Based:
- 该方法分为两步:首先检测镜头边缘或转换卡点,将video分成小的shots,之后再做关键帧提取,通常选择小的shots的第一帧和最后一帧最为关键帧。因为这两帧图像,很确定有镜头变换的
Clustering-Based:
- 聚类相似的视频帧图像点,在每一个cluster中,挑选距离cluster最近的作为关键帧。
- 缺点是:事先确定cluster数量比较困难
关键帧提取算法评估指标:
Compress ratio:
C
R
=
(
1
−
N
k
N
f
)
×
100
%
CR = (1 - \frac{N_{k}}{N_{f}}) \times 100\%
CR=(1−NfNk)×100%
N
f
N_{f}
Nf: 视频总帧数
N k N_{k} Nk: 提取的关键帧数目
Precision and Recall:
P
r
e
c
i
s
i
o
n
=
N
a
N
k
×
100
%
R
e
c
a
l
l
=
N
a
N
a
+
N
m
×
100
%
Precision = \frac{N_{a}}{N_{k}} \times 100\% \\ Recall = \frac{N_{a}}{N_{a} + N_{m}} \times 100\%
Precision=NkNa×100%Recall=Na+NmNa×100%
N
a
N_{a}
Na: 准确的keyframes数
N
k
N_{k}
Nk: 提取得到的keyframes数目
N
m
N_{m}
Nm: 丢失的key frame数目
F-Measure:
F
=
2
×
p
r
e
c
i
s
i
o
n
i
×
r
e
c
a
l
l
p
r
e
c
i
s
i
o
n
+
r
e
c
a
l
l
F = 2 \times \frac{precisioni \times recall}{precision + recall}
F=2×precision+recallprecisioni×recall
Computational Time:
提取关键帧所用时间
相关开源仓库
- https://github.com/Breakthrough/PySceneDetect
- https://github.com/keplerlab/katna
- https://github.com/amanwalia123/KeyFramesExtraction