写点什么

可视化抽取指南:用图形语言解码视频抽取

作者:数由科技
  • 2025-08-05
    北京
  • 本文字数:2975 字

    阅读完需:约 10 分钟

可视化抽取指南:用图形语言解码视频抽取

如今,伴随着短视频的盛行,视频作为信息交换载体承担了越来越重要的角色。视频表达的信息直观、生动,但抽象性不够,不利于快速获取核心内容,不适用于高效率的交换信息。我们更习惯用图文这种静态的方式实现这种信息交流。好在现在有了视频大模型,它可以帮助我们快速解读视频中的信息并给出总结。这是一个非常有趣并充满挑战的技术,大模型是如何做到的?下面我们将通过一个例子,尝试为大家用解读其中会涉及到的部分技术与思路。

示例场景介绍

我们有一个关于混淆矩阵的教学视频,希望能够抽取视频中的图片以及文字,并以此为基础去还原一个 PPT 版的学习笔记。这个视频全长 7 分 20 秒左右,采用的也是 PPT 教学,没有字幕,只有老师的教学语音。视频中只有简单的 3 张有效 PPT 页面。我们希望能够抽取这三页图片作为笔记页。另外,抽取视频中的语音,并将其还原为文本。有了文本我们可以让 LLM 帮我们总结一下,然后与抽取的 3 页 PPT 一起构成学习笔记。


本次技术解码我们使用 HuggingFists 作为技术路径展示工具。我们将重点展示图片抽出和语音抽出并还原为文本。后续的文本整理以及 PPT 制作技术由于与视频技术的相关性不高,我们就不介绍了。

视频抽取的图形语言表达

下图是我们用 HuggingFists 编写的视频抽取的流程,这个流程最大的好处是,也可以运行在 CPU 的环境中:



在这个流程中我们可以看到数据处理流有 2 个分支,上面的那个分支是用来抽取视频中的关键帧(即 PPT 页)的,抽取后将图片存储到对应的文件夹里;下面的分支用来抽取视频中的音频,并将音频转换为文本输出。下面我们详细介绍一下这两个分支流程完成的技术工作。

关键帧抽取

文件输入

​ 使用该算子读取视频文件,将其读取为一个数据流

流复制

​ 由于视频文件会被 2 个分支共同处理,所以我们采用复制一个数据流的办法,确保两个分支都能处理这个视频文件

抽取关键帧

​ 抽取视频中的关键帧信息。关键帧的抽取是视频流处理的核心任务之一。如何判断视频中的一帧为关键帧有很多种不同算法,如:镜头边界检测、聚类法、CNN 特征建模等。不同的算法会有不同的运算效率与识别效果。HuggingFists 的关键帧抽取做的比较简单,主要是按照一定频率在视频中采样视频帧并输出。这很显然不能称为关键帧,因此,在该算子后面可以跟一个帧去重算子。利用两个算子的组合来实现关键帧的发现。我们将在下一个章节详细描述帧去重算子。


​ 在这里,我们没有使用 HuggingFists 关键帧抽取算子而是使用了字幕帧抽取算子。这个算子允许在视频中做更精准的抽取。如下图所示,可以设置视频每帧抽取的区域范围,当该区域发生变化时,输出对应的帧。这里指定整个帧都为抽取范围,每隔 1 秒抽取一次视频帧,并对该帧与前序帧进行快速的差异比较,当发现二者的差异大于指定的“改动阈值”时,输出前一视频帧作为备选关键帧。在这里用该算子主要是为了减少备选关键帧的输出数量。


帧去重

​ 帧去重是一个容器算子,其内部可以容纳各种帧差异比较算法。如下图:


帧去重算子内部设置了两个去重算法,一个是基于 ORB(特征检测类)的算法;一个是基于面积变化的算法。当然还可以选择更多的算法用于更准确的去识别关键帧。


​ 帧去重算子会尝试用这些算法识别备选关键帧是否是真正的关键帧。当两个帧差异比较大时算子把前序视频帧作为关键帧输出。帧去重算子的计算速度相对比较慢,所以我们要尽量控制好前序算子输出的备选关键帧的数量。

流复制

​ 此时,如果对图片帧的要求不高,可以直接将帧保存为图片备用就可以了。不过,处理到这里我们发现,抽取到的图片外围还有一圈黑框。于是为了获得更好的图片效果。又增加了些后续的处理步骤。我们可以看到帧去重算子后又接了一个流复制算子,并将流程分成了 2 个小分支。

去黑边之前

​ 这是一个文件输出算子,它被命名为了“去黑边之前”。这里会将帧去重后输出的关键帧都保存为图片文件。图片文件的效果如下:



可以看到图片的周围有一圈黑边。这个黑边大概是在视频录制时引入的。

图片灰度化 &图像二值化 &轮廓检测

​ 图片灰度化以及图像二值化是常用的图像处理手段,主要目的是为了降低图像复杂度,消除颜色信息的干扰。经过这两个算子的处理,可以进一步增强白色的 PPT 内容页与黑框的对比。然后用轮廓检测算子检测出轮廓信息,并将轮廓信息的坐标输出,交给后续的算子使用。轮廓检测算子的配置界面如下:


图片截取

​ 图片截取算子拥有 2 个输入端口,一个端口用来接收图片的原图,一个端口用来接收图片要截取的区域。算子按照给定的区域坐标在原图中截取出一个区域图片,并将该区域图片输出。图片原图和截取区域需要成对出现,这样可以实现图片截取的批量处理。

批量文件输出

​ 将截取完的图片使用该算子存储到指定的目录下。最终有 3 个图片文件被存储了下来。图片效果如下:



我们可以看到用这种图片效果去做读书笔记已经基本还原了视频中课件的原貌了。下一步,我们看一下如何抽取视频中的音频。

音频抽取

抽取音轨

​ 音轨抽取算子用于抽取视频中的音轨,并将其转换为算子设定的语音格式,以语音文件的方式输出。该算子支持 MP3、WAV 以及 MP4 三种语音格式。具体转化成何种格式需要视整个处理流程的需要而定。在当前流程里,该算子指定输出的语音格式为 MP3。


​ 该算子后,可以接一个批量文件输出算子将音频文件写出。不过,在这里,我们给出了第二种文件写出的方法。

输出流包装

​ 输出流包装算子可以将任何一种数据转换为一个输出流。这种输出流可以通过文件写出算子存储到指定的文件目录。

通用写出

​ 通用写出算子可以将文件输出流写出到特定的文件。它与批量文件输出算子的最大不同是,它只能写出到固定的文件。而批量文件输出算子可以将文件写出到指定的目录,批量文件输出算子支持一次性写出多个文件。而通用文件写出算子一次只能写出一个文件。批量文件输出与通用文件写出的算子配置界面如下:




文件输入

​ 文件输入算子重新读取写出的音频文件。之所以这样处理,是因为在进行技术实现时发现,如果音频文件不落地,直接交给语音转文本的算子将无法正常抽取语音中的文本。


​ 在流程图里我们发现,通用写出算子与文件输入算子间的连线是虚线而不是实现。这是因为两个算子间没有数据流的流转。在 HuggingFists 中,算子间的实线代表数据流,虚线则代表的是控制流。两个算子间采用了控制流连接。其含义时,当通用写出算子运行结束后运行文件输入算子,这样的控制关系可以确保音频文件已经被正常的写出。HuggingFists 中的这一特性为流程实现带来了更多的路径选择。

OpenAI 语音转文本

​ OpenAI 语音转文本算子使用了 OpenAI 的 Whisper 模型,将语音转换为文本信息输出。Whisper 模型支持的语言种类非常多,在这里我们为其设置了“中文”作为音频的语言类型。其配置界面如下:



​ 从流程图我们可以看出,OpenAI 语音转文本算子有两个输出端口。下面的结果是其中一种格式的输出结果。该结果不但会给出文本信息,同时还会按照语音的特征标出其在音频中的时间偏移。另一种输出结果则是将所有的文本汇总为一个文本块输出。可以根据需要选择需要哪种格式的输出。



结语

​ 在上面的场景中,我们利用图形语言的方式介绍了抽取视频关键帧以及音频处理的大概流程与步骤。方便大家对于视频大模型的相关技术原理有一个简单的了解。当然,视频大模型更重要的一点是对视频的理解,这些技术在本文并为提及。本文提及的技术概念延展开去每一个细分领域都值得深入研究,有兴趣的朋友可以自行查阅相关资料进行深度了解。

用户头像

数由科技

关注

还未添加个人签名 2019-03-22 加入

还未添加个人简介

评论

发布
暂无评论
可视化抽取指南:用图形语言解码视频抽取_人工智能_数由科技_InfoQ写作社区