利用 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)
相关推荐
林伽一14 分钟前
林伽一 · AI科技日报 | 2026年08月15日
人工智能
kaliarch17 分钟前
WorkBuddy 不是 Chat:从对话到可交付 Agent 工作台
aigc·ai编程
2501_9423895526 分钟前
时钟组件支持自由拖拽缩放
人工智能·散列表·启发式算法·宽度优先·图搜索算法
小马过河R28 分钟前
不只是又一个 Agent 框架:DeepSeek Harness 如何重新定义“可组合”
人工智能·机器学习·系统架构·agent·ai编程·harness
蓝速科技32 分钟前
蓝速科技 3D 全息舱 AI 数字人一体机全尺寸选型实测指南
人工智能·科技·3d
lifallen1 小时前
DeepSeek Harness:把 Agent 做成可替换的运行时插件树
人工智能·学习·ai·开源软件·ai编程
刀锋00011 小时前
从0到1手搓生产级 AI Agent:LangGraph 1.2 + LangChain 1.3 保姆级实战(全部代码已跑通)
人工智能·python·langchain·ai agent·langgraph
水如烟1 小时前
孤能子视角:因果论——方向、锁定与必然感:关系场中归因链的生成语法
人工智能
老兵发新帖1 小时前
OSD和视频流接口随机出现net::ERR_CONNECTION_RESET问题分析总结
人工智能
海兰1 小时前
【开源工具】BlueKing Lite —— AI 原生的轻量运维平台(二)
运维·人工智能·开源