多模态(3):实战 GPT-4o 视频理解

最近,OpenAI 团队的 GPT-4o 模型,在多模态方面的能力有了大幅提升,这次我们就使用 GPT-4o 完成一个视频理解的实战。

1. 环境搭建

1.1 安装 FFmpeg

做视频处理,我们需要用到 FFmpeg 这款功能强大的开源多媒体处理工具。FFmpeg 用于处理音频、视频和其他多媒体文件,可以实现以下功能:

  • 转码:将多媒体文件从一种格式转换为另一种格式,例如将视频从 MP4 转换为 AVI。
  • 剪辑:从多媒体文件中提取片段或合并多个片段。
  • 处理:调整视频的尺寸、比特率、帧率,或音频的采样率、声道数等。
  • 添加效果:为视频添加滤镜、字幕、水印等。
  • 流媒体:将多媒体文件实时传输到网络上。

首先我们来安装 FFmpeg 工具。我使用的是 Mac 电脑,可以直接通过 brew 来安装。如果同学们使用的是其它平台,也可以参考官网的教程进行安装,这里就不赘述了。

brew install ffmpeg

安装完成后,可以通过下面的命令进行验证:

ffmpeg -version

1.2 安装依赖库

除了 FFmpeg 之外,我们还需要安装 opencv-python 和 moviepy,它们是 Python 领域非常主流的计算机视觉库,具备强大的音视频处理能力

pip install --upgrade opencv-python moviepy

2. 视频抽帧

因为 OpenAI 官方暂时还没有直接开放视频理解的 API,所以我们只能曲线救国,先对视频进行抽帧,提取出一组帧的图片,再批量发送给 GPT-4o 进行理解。

我利用大模型生成了一段 5秒的搞笑视频:

对该视频进行抽帧,按照每1秒提取一帧,总共可以提取出5帧的内容。具体代码如下:

3. 视频理解

抽帧完成后,我们就可以将这些图片批量发送给 GPT-4o,让其生成视频内容介绍。

代码如下:

import os
from typing import Listimport dotenv
from openai import OpenAI# 加载环境变量
dotenv.load_dotenv()# 创建OpenAI客户端
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"),base_url=os.getenv("OPENAI_API_BASE"))def introduction(frames: List) -> str:"""生成视频介绍:param frames: 视频帧列表:return: 视频内容介绍"""# 使用GPT-4o模型,生成视频介绍response = client.chat.completions.create(model='gpt-4o',messages=[{"role": "system", "content": "你是一位资深的内容编辑。请以Markdown格式,生成视频的介绍。"},{"role": "user", "content": ["下面是视频的图像帧",*map(lambda x: {"type": "image_url","image_url": {"url": f'data:image/jpg;base64,{x}', "detail": "low"}},frames)]},],temperature=0,)return response.choices[0].message.content

执行代码,可以看到 GPT-4o 为我们生成了 Markdown 格式的内容:

# 视频介绍在这段富有喜剧色彩的视频中,乡村田野的宁静被一位尝试骑行水坑的年轻人打破。阳光明媚的一天,他戴着大帽子,骑着复古自行车,试图勇敢地穿越一条泥泞的小路。## 场景描绘- **骑自行车者的冒险**: 骑车者穿着淳朴的服装,头戴宽檐帽,给人一种漫游田园的印象。在他的自行车后座绑着一只体型小巧的家禽,为场景增添了趣味性。
- **挑战与失误**: 视频的高潮部分呈现了骑车者试图跨越路面上的浅水坑。尽管动作充满信心,但他最终失去平衡,坠入水中,溅起大片水花,构成了幽默的结局。
- **观众的反应**: 在画面的一侧,可以看到一群穿着传统服装的人们,他们以各种姿态观望骑自行车者的冒险,脸上似乎带着惊讶和喜悦。 ## 视频氛围整个场景在绿色的草地和清澈的蓝天背景中进行,表现出乡村生活的悠然宁静,同时以幽默的方式捕捉人们日常尝试中的滑稽瞬间。这段视频不仅让观众感受到幽默,也让人赞美大自然的美丽与朴实生活的简单乐趣。

可以看出,GPT-4o 基本 Get 到了视频内容的精髓。

小结

本篇文章中,我们全面了解了 GPT-4o 的强大功能及其在多模态 AI 应用开发中的巨大潜力,并通过实际操作体验了如何利用 GPT-4o 进行视频理解。

GPT-4o 作为全新的端到端多模态模型,能够在极短的时间内处理多种模态输入和输出,使得人机交互更加自然和高效。尤其是在音频分析和视频理解方面,GPT-4o 的表现令人印象深刻。

大模型在多模态方面能力的持续提升,将为 AI 应用的开发带来革命性的变化,一方面可以大幅提升用户体验;另一方面也可以加速促进 AI 应用在各行各业的广泛应用,并不断催生出更多创新的解决方案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/903501.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(27)VTK C++开发示例 ---将点坐标写入 STL文件

文章目录 1. 概述2. CMake链接VTK3. main.cpp文件4. 演示效果 更多精彩内容👉内容导航 👈👉VTK开发 👈 1. 概述 此示例使用 vtkSTLWriter 将存储在 vtkPolyData 对象中的 3D 几何数据保存到 STL 文件,并读取stl文件显示…

2. python协程/异步编程详解

目录 1. 简单的异步程序 2. 协程函数和协程对象 3. 事件循环 4. 任务对象Task及Future对象 4.1 Task与Future的关系 4.2 Future对象 4.3 全局对象和循环事件对象 5. await关键字 6. 异步上下文管理 7.异步迭代器 8. asyncio的常用函数 8.1 asyncio.run 8.2 asyncio.get…

智慧园区IOT项目与AI时代下的机遇 - Java架构师面试实战

在互联网大厂的Java求职者面试中,面试官通常会针对实际业务场景提出一系列问题。以下是关于智慧园区IOT项目及AI时代下的机遇的面试模拟对话。 第一轮提问 面试官:马架构,请简要介绍下智慧园区IOT项目的整体架构设计。 马架构:…

论文导读 - 基于特征融合的电子鼻多任务深度学习模型研究

基于特征融合的电子鼻多任务深度学习模型研究 原论文地址:https://www.sciencedirect.com/science/article/pii/S0925400524009365 引用此论文(GB/T 7714-2015): NI W, WANG T, WU Y, et al. Multi-task deep learning model f…

AI超级智能体项目教程(二)---后端项目初始化(设计knif4j接口文档的使用)

文章目录 1.选择JDK的版本和相关配置2.添加依赖信息2.1指定lombok版本信息2.2引入hutool工具类2.3了解knif4j依赖2.4引入knif4j依赖 3.contrller测试3.1完成yml文件配置3.2修改默认扫描路径3.3controller具体的内容3.4配置接口和访问路径3.5如何访问3.6调试接口3.6调试接口 1.选…

linux blueZ 第四篇:BLE GATT 编程与自动化——Python 与 C/C++ 实战

本篇聚焦 BLE(Bluetooth Low Energy)GATT 协议层的编程与自动化实践,涵盖 GATT 基础、DBus API 原理、Python(dbus-next/bleak)示例、C/C++ (BlueZ GATT API)示例,以及自动发现、读写特征、订阅通知、安全配对与脚本化测试。 目录 BLE GATT 基础概念 BlueZ DBus GATT 模…

kafka与flume的整合、spark-streaming

kafka与flume的整合 前期配置完毕,开启集群 需求1: 利用flume监控某目录中新生成的文件,将监控到的变更数据发送给kafka,kafka将收到的数据打印到控制台(三个node01中运行) 1.在kafka中建立topic kafka…

redis高级进阶

1.redis主从复制 redis主从复制1 2.redis哨兵模式 哔哩哔哩视频 redis哨兵模式1 redis哨兵模式2 redis哨兵模式3 3.redis分片集群 redis分片集群1 redis分片集群2 redis分片集群3

uniapp: 低功耗蓝牙(BLE)的使用

在微信小程序中实现蓝牙对接蓝牙秤的重量功能,主要依赖微信小程序提供的低功耗蓝牙(BLE)API。以下是一个清晰的步骤指南,帮助你完成从连接蓝牙秤到获取重量数据的开发流程。需要注意的是,具体实现可能因蓝牙秤的协议和…

3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目

安装 pnpm install icraft/player-react --saveimport { ICraftPlayer } from "icraft/player-react";export default function MyScene() {return <ICraftPlayer srcyour-scene.iplayer />; }icraft/player-react 为开发者提供了一站式的3D数字孪生可视化解决…

云数据中心整体规划方案PPT(113页)

1. 引言 概述&#xff1a;云数据中心整体规划方案旨在构建弹性、高效的云计算基础设施&#xff0c;通过软件定义数据中心&#xff08;SDDC&#xff09;实现资源虚拟化与管理自动化。 2. 技术趋势与背景 技术革新&#xff1a;随着云计算、虚拟化及自动化技术的发展&#xff0c…

(六)机器学习---聚类与K-means

到本篇文章&#xff0c;我们先对前几篇所学习的算法进行一个回顾&#xff1a; 而本篇文章我们将会介绍聚类以及K-means算法。 分类问题回归问题聚类问题各种复杂问题决策树√线性回归√K-means√神经网络√逻辑回归√岭回归密度聚类深度学习√集成学习√Lasso回归谱聚类条件随机…

在html中如何创建vue自定义组件(以自定义文件上传组件为例,vue2+elementUI)

1、先上代码&#xff1a;vueUpload.js var dom <div class"upload-file"><el-upload :action"uploadFileUrl" :before-upload"handleBeforeUpload" :file-list"fileList" :limit"limit":on-error"handleUpl…

计算机基础:二进制基础14,二进制加法

专栏导航 本节文章分别属于《Win32 学习笔记》和《MFC 学习笔记》两个专栏&#xff0c;故划分为两个专栏导航。读者可以自行选择前往哪个专栏。 &#xff08;一&#xff09;WIn32 专栏导航 上一篇&#xff1a;计算机基础&#xff1a;二进制基础13&#xff0c;十六进制与二进…

可视化图解算法: 判断是不是二叉搜索树(验证二叉搜索树)

1. 题目 描述 给定一个二叉树根节点&#xff0c;请你判断这棵树是不是二叉搜索树。 二叉搜索树满足每个节点的左子树上的所有节点的值均严格小于当前节点的值&#xff1b;并且右子树上的所有节点的值均严格大于当前节点的值。 数据范围&#xff1a;节点数量满足 1≤n≤10^4…

Markdown转WPS office工具pandoc实践笔记

随着DeepSeek、文心一言、讯飞星火等AI工具快速发展&#xff0c;其输出网页内容拷贝到WPS Office过程中&#xff0c;文档编排规整的格式很难快速复制。 注&#xff1a;WPS Office不支持Markdown格式&#xff0c;无法识别式样。 在这里推荐个免费开源工具Pandoc&#xff0c;实现…

python的turtle库实现四叶草

实现代码&#xff1a; import turtle turtle.pencolor(‘green’) turtle.fillcolor(‘green’) turtle.begin_fill() turtle.circle(100,90) turtle.left(90) turtle.circle(100,90) turtle.right(180) turtle.circle(100, 90) turtle.left(90) turtle.circle(100,90) tu…

北重数控滑台加工厂家:汽车零部件试验铁地板-安全性能的测试方法

汽车零部件的安全性能测试是非常重要的&#xff0c;其中铁地板测试是其中的一种常见测试方法之一。铁地板测试主要用于评估汽车零部件在发生碰撞或事故时的安全性能&#xff0c;以确保零部件在各种情况下都能提供有效的保护和安全性能。 铁地板测试通常包括以下步骤和方法&…

Linux0.11系统调用:预备知识

系统调用 预备知识 目标&#xff1a;了解系统调用的流程&#xff0c;在Linux 0.11上添加两个系统调用&#xff0c;并编写两个简单的应用程序测试它们。 对应章节&#xff1a;同济大学赵炯博士的《Linux内核0.11完全注释&#xff08;修正版V3.0&#xff09;》的第5.5节 下面就针…

如何防止 ES 被 Linux OOM Killer 杀掉

当 Linux 系统内存不足时&#xff0c;内核会找出一个进程 kill 掉它释放内存&#xff0c;旨在保障整个系统不至于崩溃。如果 ES 按照最佳实践去实施部署&#xff0c;会保留一半的内存&#xff0c;不至于发生此类事情。但事情总有例外&#xff0c;有的朋友可能 ES 和其他的程序部…