当前位置:   article > 正文

大模型系列:OpenAI使用技巧_GPT-4-vision和TTS API处理和叙述视频_openai 视频解说生成

openai 视频解说生成

笔记本演示了如何使用GPT的视觉能力处理视频。GPT-4不能直接将视频作为输入,但我们可以使用视觉和新的128K上下文窗口一次性描述整个视频的静态帧。我们将演示两个示例:

  1. 使用GPT-4获取视频的描述
  2. 使用GPT-4和TTS API为视频生成配音
# 导入需要的库
from IPython.display import display, Image, Audio  # IPython.display库用于在Jupyter Notebook中显示图像、音频等
import cv2  # OpenCV库用于读取视频
import base64  # base64库用于将二进制数据编码为ASCII字符
import time  # time库用于计时
from openai import OpenAI  # OpenAI库用于调用OpenAI API
import os  # os库用于与操作系统交互
import requests  # requests库用于向API发送HTTP请求

client = OpenAI()  # 创建OpenAI客户端对象
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  1. 使用GPT的视觉能力获取视频描述。

首先,我们使用OpenCV从一个包含野牛和狼的自然视频中提取帧:

# 导入OpenCV库
import cv2
# 导入base64库
import base64

# 打开视频文件
video = cv2.VideoCapture("data/bison.mp4")

# 创建一个空列表,用于存储每一帧图像的base64编码
base64Frames = []

# 循环读取视频帧
while video.isOpened():
    # 读取一帧图像
    success, frame = video.read()
    # 如果读取失败,则退出循环
    if not success:
        break
    # 将图像编码为jpg格式
    _, buffer = cv2.imencode(".jpg", frame)
    # 将编码后的图像转换为base64编码,并添加到列表中
    base64Frames.append(base64.b64encode(buffer).decode("utf-8"))

# 释放视频文件
video.release()

# 打印读取的帧数
print(len(base64Frames), "frames read.")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
618 frames read.
  • 1

显示帧以确保我们正确读取了它们:

# 创建一个display对象,用于显示图像
display_handle = display(None, display_id=True)

# 遍历base64Frames中的每个图像
for img in base64Frames:
    # 将base64编码的图像数据解码为二进制数据,并创建一个Image对象
    image_data = base64.b64decode(img.encode("utf-8"))
    image = Image(data=image_data)
    
    # 更新display对象,显示当前图像
    display_handle.update(image)
    
    # 暂停一段时间,以便观察图像
    time.sleep(0.025)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

一旦我们获得了视频帧,我们会制作提示并向GPT发送请求(请注意,我们不需要发送每个帧以让GPT理解发生了什么):

# 代码注释

# 定义一个包含对话信息的列表,每个对话信息包含角色和内容
PROMPT_MESSAGES = [
    {
        "role": "user",
        "content": [
            "These are frames from a video that I want to upload. Generate a compelling description that I can upload along with the video.",
            *map(lambda x: {"image": x, "resize": 768}, base64Frames[0::50]),
        ],
    },
]

# 定义参数字典,包含模型、对话信息和生成的最大令牌数
params = {
    "model": "gpt-4-vision-preview",
    "messages": PROMPT_MESSAGES,
    "max_tokens": 200,
}

# 调用API创建聊天完成请求,并传入参数
result = client.chat.completions.create(**params)

# 打印生成的描述内容
print(result.choices[0].message.content)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
"
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/278333
推荐阅读
相关标签