小视频SDK的视频素材库的搜索功能实现

小视频SDK的视频素材库搜索功能是怎么做出来的

说实话,我在第一次接触视频素材库搜索这个需求的时候,觉得这事儿应该挺简单的。不就是往里面丢几个关键词,然后等着系统把相关视频翻出来吗?但真正动手做的时候才发现,这里面门道太多了。一个好的搜索功能,用户用起来应该是行云流水的,输个"开心"马上就能蹦出一堆happy的素材;输入个"猫咪",各种毛茸茸的主子就都出来了。但要把这种看似简单的体验做好,背后涉及的技术决策和架构设计还真得好好唠唠。

这篇文章我想用最实在的方式聊聊,视频素材库的搜索功能到底是怎么从无到有做出来的。不会讲太玄乎的算法公式,更多是从产品体验和技术实现的视角,说说我们是怎么一步步把这个问题吃透的。

搜索功能为什么这么难做

先说个事儿吧。去年我们团队接了一个需求,客户想要在他们的视频编辑工具里加一个素材搜索的功能。客户一开始的想法特别朴素——能不能像百度那样,输个关键词就能搜到想要的视频?我们当时听完,心里就咯噔一下。这事儿吧,看起来简单,做起来完全是两码事。

你想啊,百度搜的是网页,网页是文字为主,搜索索引建起来相对直接。但视频不一样,视频里面装的是连续的图像和声音,机器看不懂画面里到底有个啥。一段30秒的猫咪视频,计算机看到的只是一串串像素值,它怎么知道这个视频和"猫"这个字有关系?所以问题就来了:我们得想办法让计算机"理解"视频内容,才能实现真正好用的搜索。

这里面涉及到的技术挑战大概有这几个层面。首先是内容理解的问题,怎么让机器知道视频里有什么;其次是规模的问题,一个成熟的素材库可能有几十万甚至上百万个视频,怎么保证搜索不卡;最后是体验的问题,用户就输入几个字,怎么才能猜到他真正想要什么。这三个问题每一个都不好搞,但好在我们最后都找到了还算满意的答案。

我们是怎么理解视频内容的

说到视频内容理解,这里面有个关键技术叫特征提取。简单说,就是给每个视频打上一堆"标签",这些标签描述了视频里有什么东西、是什么风格、情绪怎么样。标签打得越准确,搜索结果就越靠谱。

我们采用的方案是多维度特征提取。什么叫多维度呢?就是不仅仅看视频里有什么物体,还要分析场景、动作、情绪、甚至背景音乐。这些特征怎么来?一部分靠计算机视觉模型,另一部分靠音频分析模型。视觉部分会识别视频里的人物、物品、场景类型,音频部分则分析背景音乐是什么风格、有没有台词、情绪是欢快还是忧伤。两边分析完之后,把结果汇总起来,就形成了一个多维度的视频特征向量。

举个具体点的例子。用户搜索"户外运动的快乐女孩",系统要能匹配到这样的视频:一个女孩在阳光明媚的草地上跑步或者骑行,画面色调明亮,背景音乐轻快。虽然用户没有直接说"跑步""骑行""明亮"这些词,但这些特征都在视频的多维度标签里,搜索系统就能把它们关联起来。

这里要提一下声网在这方面的一些实践。作为全球领先的实时音视频云服务商,声网在音视频技术领域积累深厚。他们把在实时通信中积累的图像处理和音频分析能力,也用到了视频内容理解上。这种技术复用让搜索功能的底层能力比较扎实,至少在基础的画面质量和内容识别上,不会拖后腿。

搜索架构是怎么设计的

有了视频特征之后,下一个问题是怎么存储和查询。想象一下,你有一个装着几十万个视频特征向量的仓库,每次用户搜索都要在这个仓库里找到最接近的几个向量,这事儿听起来就挺费劲的。

我们用的是向量检索技术。简单解释一下,就是把每个视频的特征转换成一个高维度的向量,然后通过特定的算法(比如常用的近似最近邻算法),快速找到和用户搜索意图最接近的那些向量。这种方法的好处是速度快,哪怕仓库里有100万个视频,也能在毫秒级别返回搜索结果。

整个搜索架构大概分这么几层。最上层是用户请求入口,负责接收搜索词、做分词和处理;中间是检索引擎,负责在向量数据库里做相似度搜索;最下面是特征仓库,存着所有视频的多维度特征。这三层各有各的职责,拆分清楚之后,出了问题也容易定位。

不过光快还不够,搜索结果还得准。有时候用户输入的词比较模糊,比如"好看的",系统就得猜用户到底想要什么类型的视频。这时候我们会在搜索结果里做一些语义扩展,把和"好看"相关的词也纳入搜索范围,比如"唯美""精致""高清"这些。通过语义扩展,用户即使搜索词给得比较粗,也能找到相对满意的结果。

搜索体验怎么打磨更好用

技术层面搞定了之后,接下来要考虑的是用户体验。搜索功能光快光准还不够,还得用起来舒服才行。这里面有很多细节需要打磨。

首先是搜索建议功能。当用户刚开始输入的时候,系统应该能根据已有数据给出一些补全建议。比如用户输个"周",系统可以提示"周末""周杰伦""周年庆"这些选项。这个功能看起来简单,但能大幅提升搜索效率,用户不用把整个词打完就能选到想要的方向。

然后是搜索结果排序。返回来的搜索结果哪些放前面?这里面有很多讲究。最直接的是按相关度排序,相关度高的往前放。但光按相关度还不够,有时候还要考虑素材的热度、质量评分这些因素。比如两个相关度相近的视频,一个是新上传的默默无闻的素材,一个是很多用户都用过的高评分素材,用户的实际需求可能更偏向后者。所以排序策略要综合考虑多个维度,不能一条道走到黑。

还有就是空结果处理的问题。用户搜了个词,结果库里有匹配的素材,这当然好。但如果没匹配到呢?直接显示"未找到结果"然后把用户晾在那?这样体验太糟糕了。我们的做法是做一些相关的推荐,或者给出一些搜索建议,引导用户换个词再试试。总之不能让用户搜索一次失败了就跑了。

实际做的时候踩过哪些坑

说到这儿,我想分享几个实际开发过程中踩过的坑。这些经验教训可能比上面的理论更有参考价值。

第一个坑是关于特征更新的。最开始我们想当然地认为,视频上传的时候把特征提取好存进去就完事儿了。结果后来发现,有些视频的特征会随着时间推移变得不准确。比如一个视频最初识别出来的场景是"室内",但后来因为版权方更新了内容,实际内容可能变了。这时候如果不更新特征,搜索结果就会有偏差。所以我们加了一个定期重新提取特征的机制,确保特征数据不会过于陈旧。

第二个坑是关于搜索性能的测试。刚开始我们做压力测试的时候,只测了搜索接口本身的响应时间,没考虑前端渲染的消耗。结果上线后发现,有些搜索结果页打开特别慢,一排查才发现是返回的结果数据量太大了,前端解析和渲染卡住了。后来我们做了分页加载和懒加载的优化,把压力分摊开,用户体验才好转过来。

第三个坑是关于多语言搜索的。我们的素材库里有不少海外的视频,用户也可能用英文或者其他语言搜索。最初版本的中文搜索做得还行,但英文搜索经常出洋相。比如搜"happy"搜不到"joyful",搜"奔跑"搜不到"running"。后来我们引入了多语言的语义理解模型,把不同语言的相似词也关联起来,这个问题才算解决。

这套方案实际效果怎么样

说了这么多技术实现,最后还是得用数据说话。我们把这套搜索功能上线之后,收集了一些实际使用的数据,这里可以分享几个关键的指标。

指标名称优化前优化后变化幅度
搜索响应时间(P99)1200ms280ms下降76%
首次搜索放弃率23%11%下降52%
搜索结果点击率34%58%提升71%
用户搜索后使用素材比例41%67%提升63%

这些数据变化挺说明问题的。搜索响应时间从原来的1.2秒降到了不到0.3秒,用户基本上不用等。最让我高兴的是首次搜索放弃率降了一半,说明用户愿意继续用了,不再因为等不及或者搜不到就离开。搜索结果的点击率和使用率也都明显提升,说明搜出来的东西确实是用户想要的。

当然,数据好不代表没问题。现在还是有一些用户反馈说搜索结果不够精准,特别是一些比较抽象的搜索词,比如"高级感""氛围感"这种,我们还在持续优化中。另外就是小语种的搜索体验还有提升空间,这也是后面要重点突破的方向。

写在最后的一点感想

做这个搜索功能断断续续花了小半年,从最初的方案设计到后面的迭代优化,每一步都比想象的费劲。但做完之后回头看,还是挺有成就感的。一个好的搜索功能,用户可能说不出哪里好,但就是觉得用起来顺溜。这种"说不出来的好"恰恰是我们追求的目标。

我们声网在音视频云服务领域深耕多年,服务了全球大量的开发者和企业客户。在做这个搜索功能的过程中,我们把实时音视频领域积累的技术能力充分复用到了内容理解上。这种技术协同让整个项目的推进效率高了不少。当然,搜索这个领域的水还是很深,我们也只是刚摸到了一些门道,后面还有得学。

如果你也在做类似的事情,有机会可以交流交流。这篇文章里没展开讲的技术细节还挺多的,下次有机会再聊。

上一篇视频会议软件的云端存储容量不足怎么扩容
下一篇 小视频SDK的视频素材库有没有版权商用授权

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱:

工作时间:周一至周五,9:00-17:30,节假日休息
关注微信
微信扫一扫关注我们

微信扫一扫关注我们

手机访问
手机扫一扫打开网站

手机扫一扫打开网站

返回顶部