利用 GPT 的视觉能力和 TTS API 来处理视频并添加旁白 [译]

本文作者Twitter链接:dotey

原文:Processing and narrating a video with GPT's visual capabilities and the TTS API

这个笔记本演示了如何利用 GPT 的视觉能力来处理视频内容。GPT-4 无法直接接收视频作为输入,但我们可以通过视觉识别功能以及全新的 128K 上下文窗口,一次性描述视频中的所有静态画面。我们将通过两个实例来演示如何操作:

  1. 利用 GPT-4 来描述一个视频的内容
  2. 结合 GPT-4 和 TTS API 为视频创造旁白
python 复制代码
from IPython.display import display, Image, Audio

import cv2  # We're using OpenCV to read video
import base64
import time
import openai
import os
import requests

1. 利用 GPT 的视觉能力描述视频

我们首先利用 OpenCV 技术从一个展示野牛和狼的自然 视频 中提取画面:

python 复制代码
video = cv2.VideoCapture("data/bison.mp4")

base64Frames = []
while video.isOpened():
    success, frame = video.read()
    if not success:
        break
    _, buffer = cv2.imencode(".jpg", frame)
    base64Frames.append(base64.b64encode(buffer).decode("utf-8"))

video.release()
print(len(base64Frames), "frames read.")
arduino 复制代码
618 frames read.

确保我们正确捕获了画面,我们将它们展示出来:

python 复制代码
display_handle = display(None, display_id=True)
for img in base64Frames:
    display_handle.update(Image(data=base64.b64decode(img.encode("utf-8"))))
    time.sleep(0.025)

获得视频画面后,我们构建了一个提示并发送请求给 GPT(注意,我们不需要发送每一帧画面给 GPT,它能理解整个视频的情况):

python 复制代码
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::10]),
        ],
    },
]
params = {
    "model": "gpt-4-vision-preview",
    "messages": PROMPT_MESSAGES,
    "api_key": os.environ["OPENAI_API_KEY"],
    "headers": {"Openai-Version": "2020-11-07"},
    "max_tokens": 200,
}

result = openai.ChatCompletion.create(**params)
print(result.choices[0].message.content)

标题:生存本能:野牛与狼在冰原上的史诗般对峙

描述: 在被雪覆盖的平原上,一场原始且扣人心弦的生存戏剧正在上演,这里,强壮的野牛与一群决心捕食的狼群展开对决。视频在冬日的银装素裹中捕捉到了这场惊心动魄的捕食者与猎物之间的互动。在生死存亡的边缘,每一个移动都是大自然舞台上的生与死的较量。观众将看到这些庄严的生物进行永恒的斗争,它们展示出野生世界中的力量、坚韧和不屈的精神。和我们一起,进入自然恢复力的心脏地带,见证动物王国中生命循环的最真实写照。#Wildlife #Nature #Survival #BisonVsWolves

2. 用 GPT-4 和 TTS API 制作视频旁白

我们将尝试用大卫·艾登堡的风格,为一段视频制作旁白。就用视频中同样的画面,引导 GPT 来帮我们撰写一段简短的文本:

python 复制代码
PROMPT_MESSAGES = [
    {
        "role": "user",
        "content": [
            "These are frames of a video. Create a short voiceover script in the style of David Attenborough. Only include the narration.",
            *map(lambda x: {"image": x, "resize": 768}, base64Frames[0::10]),
        ],
    },
]
params = {
    "model": "gpt-4-vision-preview",
    "messages": PROMPT_MESSAGES,
    "api_key": os.environ["OPENAI_API_KEY"],
    "headers": {"Openai-Version": "2020-11-07"},
    "max_tokens": 500,
}

result = openai.ChatCompletion.create(**params)
print(result.choices[0].message.content)

在无边无际的冬日白雪中,自然界的生生不息上演着永恒而赤裸的生存戏码。在这片考验生物存亡的严苛舞台上,一群灰狼已经将目光锁定在了牛群中的一头野牛------一场关乎生命和食物的搏斗即将拉开序幕。

这场狼群的围猎行动策划严密,每一只狼都了然于心它的任务。在严寒的空气中,它们的肌肉绷紧,呼吸可见,悄无声息地靠近猎物,伺机找到破绽。而野牛,这个庞然大物,依靠千百万年锻造的本能站稳脚跟,其巨大的身影在刺眼的白雪中投下了一道孤影。

这是一场生与死的交响乐,每一个动作,每一次虚晃,都关乎着生命的重量。狼群交替发起攻势,一边保持体力,一边逐渐削弱猎物。曾经是野牛坚实后盾的牛群,如今已经逃之夭夭,远远散开,这生动地告诉我们,在这野性的领地里,生存的法则永远高于血缘的羁绊。

随着一阵紧张的活动------狼群开始收网。尽管野牛力大无穷,但它已经力不从心,喘息急促,行动迟缓。狼群嗅到了胜利的气息。它们不懈地追击,这正是自然法则残酷而又壮丽的见证。

当这场斗争走向它不可避免的结局时,我们再次认识到这片野生天地的精妙平衡。生与死,斗争与生存------这循环永续,每个故事都在雪地上一笔一划地被书写,只要狼还在这片冰原上巡行,野牛还在这片土地上漫步。

现在我们可以把这段文本交给 TTS API,让它帮我们把这段旁白变成 mp3 音频。

python 复制代码
response = requests.post(
    "https://api.openai.com/v1/audio/speech",
    headers={
        "Authorization": f"Bearer {os.environ['OPENAI_API_KEY']}",
    },
    json={
        "model": "tts-1",
        "input": result.choices[0].message.content,
        "voice": "onyx",
    },
)

audio = b""
for chunk in response.iter_content(chunk_size=1024 * 1024):
    audio += chunk
Audio(audio)
相关推荐
chenkangck5034 分钟前
AI大模型之旅--milvus向量库安装
人工智能·aigc·milvus
学习前端的小z37 分钟前
【AI视频】Runway:Gen-2 图文生视频与运动模式详解
人工智能·aigc·音视频
资源分享活雷锋42 分钟前
AIGC论文查重是什么?
论文阅读·aigc·论文笔记
SpikeKing2 小时前
LLM - 理解 多模态大语言模型(MLLM) 的 指令微调(Instruction-Tuning) 与相关技术 (四)
人工智能·语言模型·指令微调·数据调整·自指令·数据混合·instruction
开MINI的工科男3 小时前
【笔记】自动驾驶预测与决策规划_Part3_路径与轨迹规划
人工智能·笔记·自动驾驶·预测与决策
xuanyu226 小时前
Linux常用指令
linux·运维·人工智能
凡人的AI工具箱6 小时前
AI教你学Python 第11天 : 局部变量与全局变量
开发语言·人工智能·后端·python
晓星航6 小时前
Docker本地部署Chatbot Ollama搭建AI聊天机器人并实现远程交互
人工智能·docker·机器人
Kenneth風车6 小时前
【机器学习(五)】分类和回归任务-AdaBoost算法-Sentosa_DSML社区版
人工智能·算法·低代码·机器学习·数据分析
AI小白龙*6 小时前
大模型团队招人(校招):阿里巴巴智能信息,2025届春招来了!
人工智能·langchain·大模型·llm·transformer