识别视频关键帧有什么好的方案吗, x265 之类的编码器有没有提供可调用的 api ?

2021-05-26 04:04:56 +08:00
 LeeReamond

如题,现有一需求是将视频按关键帧分段,比如视频从 0-240 帧是一个拍男主角的镜头,241-500 帧是一个拍女主角的镜头,希望得到的输出结果是 0-240,241-500 。需求上希望切割越准确越好,但可以容忍一定的错误,并不要求 100%准确。

正常来说直接从源视频里划分区间就可以,但是因为拿到的数据是裸流,没有任何帧的标识,且未经压缩体积特别大。想问一下论坛里有没有做过的朋友,这个处理传统编码器中应该有比较成熟的方案,不需要利用机器学习之类的方法就能得到比较良好的结果。

我观察了一下,默认使用 x265 压缩视频得到的区间划分就挺不错的,但是问题是 x265 转码一遍再提取出关键帧这太慢了啊

1214 次点击
所在节点    问与答
10 条回复
beijiaoff
2021-05-26 08:10:15 +08:00
如果是画面缓缓的从男主到女主呢,你希望得到在哪个地方的分界?
另外不要随便用关键帧这个词呀,这个术语在视频编码有它的定义。I 帧、P 帧、B 帧这种语境下。
你是不是想做类似 pornhub 的体位姿势识别,然后给视频标记章节。
bfdh
2021-05-26 08:25:27 +08:00
裸流 是不是就是类似 yuv 数据这种流?这种格式都还没压缩编码,不存在关键帧,每一帧都是一幅完整图像,相互之间没有关联,不存在 I 帧、P 帧、B 帧的概念。似乎可以直接拿每幅图像直接进行识别?
Kagari
2021-05-26 09:02:16 +08:00
既然用编码器的关键帧分割就能满足要求,那编码后直接用无损视频分割切一下就行,不用重新编码
iamzuoxinyu
2021-05-26 09:11:45 +08:00
packet parse 一下,不需要真正的解码。
3dwelcome
2021-05-26 09:15:40 +08:00
就用 NV 显卡的 gpu encode 就可以了。
x265 压缩速度和游戏串流压缩一样,几乎是实时无延迟的,然后把 I 帧位置提出来。
3dwelcome
2021-05-26 09:16:41 +08:00
@iamzuoxinyu 楼主是 yuv 序列帧,感觉应该没 packet 的概念,否则体积也不可能特别大。
BrightSphere
2021-05-26 09:36:04 +08:00
https://github.com/Breakthrough/PySceneDetect
这个?但没试过准确度和速度
LeeReamond
2021-05-26 09:50:20 +08:00
@bfdh 可能我没形容准确,裸流的意思是 y4m 流,比如 1080p,包含所有像素,每个像素包含所有平面,未压缩。
iamzuoxinyu
2021-05-27 13:00:26 +08:00
还没编码,那哪来的关键帧…你是想要转场画面吧。
abcysn
2021-05-28 00:39:37 +08:00
你要的应该是场景切换的判断,感觉去 x265 里抠段代码应该就够了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/779204

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX