
人工智能AI 应用媒体生成语音【免费下载链接】ShortGPT ShortGPT - Experimental AI framework for youtube shorts / tiktok channel automation项目地址https://gitcode.com/gh_mirrors/sh/ShortGPT点击查看免费下载导读api_utils是 ShortGPT 中负责对接外部多媒体 API 的公共工具模块以三个独立文件分别封装了 Bing 图像搜索、Pexels 视频搜索和 ElevenLabs 文本转语音三类能力。本文将逐一拆解每个文件的函数签名、源码实现与调用链并结合 editing_images.py、content_video_engine.py 等引擎代码说明这些工具函数如何被上层自动化流程真实调用帮助读者理解 ShortGPT 从脚本文字到配图、配视频、配配音的成品短视频的素材供应链路。模块概览三个文件三种素材能力api_utils模块位于 shortGPT/api_utils/ 目录下由image_api.py、pexels_api.py、eleven_api.py三个文件组成对应三类核心素材文件能力来源解决的问题产出image_api.pyBing Images按查询词抓取图片 URL图片 URL 宽高元数据pexels_api.pyPexels Videos API按查询词挑选高清视频可直接下载的视频文件 URLeleven_api.pyElevenLabs API文本转高质量语音本地音频文件模块的包入口init.py 只做了一件事——暴露image_api和eleven_api两个子模块方便上层以from shortGPT.api_utils import image_api的方式导入。而pexels_api之所以未在__init__.py中显式导出是因为其内部已经通过from shortGPT.config.api_db import ApiKeyManager自管理 API Key上层直接from shortGPT.api_utils.pexels_api import getBestVideo即可使用。图像素材image_api.py与 Bing 图片抓取核心函数getBingImages(query, retries5)该函数是模块对外的主入口逻辑清晰查询词预处理将空格替换为拼接 Bing 图片搜索 URLhttps://www.bing.com/images/search?q{query}first1带重试的请求会话基于urllib3.Retry构建requests.Sessiontotalretries默认 5 次、backoff_factor1并对500/502/503/504状态码自动重试反爬伪装请求头携带 Chrome 91 的User-Agent并设置verifyFalse跳过 SSL 校验源码注释明确提示 use with caution仅供实验性场景使用解析与容错状态码为 200 时交给_extractBingImages提取图片遇到SSLError时逐次重试超过retries后抛出异常最终若图片列表为空同样抛出Exception(Error While making bing image searches)。核心实现见 image_api.py。HTML 解析器_extractBingImages(html)与_extractGoogleImages(html)_extractBingImages使用正则mediaurl(.*?)amp;.*?expw(\d).*?exph(\d)从 HTML 中抽取图片 URL、宽度和高度并对 URL 做urllib.parse.unquote解码仅保留以.jpg、.png、.jpeg结尾的图片最终返回{url: ..., width: ..., height: ...}字典组成的列表。_extractGoogleImages则通过正则AF_initDataCallback\({key: ds:1, hash: 2, data:(.*?), sideChannel: {}}\)匹配 Google 图片搜索页内嵌的初始化数据解析 JSON 后遍历深层数组结构dz[56][1][0][0][1][0]提取图片 URL。该函数目前在 README 中被记录但未被getBingImages直接调用属于预留能力。上层调用链从查询词到配图在 editing_images.py 中searchImageUrlsFromQuery(query, top3, expected_dim[720,720], retries5)调用了getBingImages其筛选策略非常实用取前top张图片计算每张图片宽高与expected_dim默认[720,720]的欧氏距离math.dist按距离排序后random.shuffle随机打乱再从距离最近的候选中返回一张——既保证图片尺寸贴近需求又增加随机性避免同话题视频画面雷同。这正是 ShortGPT 自动生成图片素材如红迪故事封面图、知识短片配图时的底层依赖。视频素材pexels_api.py与 Pexels 高清视频检索search_videos(query_string, orientation_landscapeTrue)函数向https://api.pexels.com/videos/search发起 GET 请求请求头通过ApiKeyManager.get_api_key(PEXELS_API_KEY)注入Authorization认证信息查询参数包括query查询词、orientationlandscape或portrait和per_page15。返回值为 Pexels API 的原始 JSON 响应。源码中保留了X-Ratelimit-Limit、X-Ratelimit-Remaining、X-Ratelimit-Reset响应头注释说明设计者曾考虑对请求配额做观测。getBestVideo(query_string, orientation_landscapeTrue, used_vids[])这是选片的核心函数筛选逻辑分为四步见 pexels_api.py尺寸硬过滤横屏模式要求width 1920 and height 1080且宽高比严格等于16/9竖屏模式要求width 1080 and height 1920且height/width 16/9时长贴近排序按abs(15 - duration)升序排列优先选择接近 15 秒的素材契合短视频节奏分辨率精确匹配在排序结果中遍历video_files横屏选1920x1080、竖屏选1080x1920的文件去重用将候选链接按.hd切分后与used_vids比对避免同一视频反复使用。全部候选不满足时打印提示并返回None由调用方兜底处理。上层调用链视频搜索引擎的素材编排在 content_video_engine.py 的_generateVideoUrls中引擎为每个带时间戳的字幕片段生成 3 个搜索词倒序遍历查询词并调用getBestVideo(query, orientation_landscapenot self._db_format_vertical, used_vidsused_links)一旦命中就把链接以.split(.hd)[0]的形式记入used_links并跳出循环把[[t1, t2], url]追加到时间轴列表。这样最终渲染阶段_editAndRenderShort就能按时间戳为每个片段叠加背景视频。这套搜索词 → 筛选 → 去重 → 排布的流程正是 Pexels 工具函数价值的集中体现。语音素材eleven_api.py与 ElevenLabs TTS 封装与前面两个模块不同eleven_api.py采用类封装ElevenLabsAPI在构造函数中保存api_key并设置url_base https://api.elevenlabs.io/v1/实例化时即调用get_voices()拉取音色列表。get_voices()拉取可用音色向/voices端点发起 GET 请求若传入了 API Key 则附带xi-api-key头。响应被转换为{音色名: voice_id}字典存到self.voices便于后续按名称索引。注意该方法在__init__中就被调用因此音色表在创建实例时即就绪。get_remaining_characters()查询剩余字符额度向/user端点请求用户订阅信息从subscription字段计算character_limit - character_count得到剩余可用字符数状态码非 200 时抛出异常并返回服务端detail.message。generate_voice(text, character, filename, stability0.2, clarity0.1)文本转语音流程为校验character是否存在于self.voices不存在仅打印警告→ 取得voice_id→ 向text-to-speech/{voice_id}/streamPOST 请求请求体携带model_ideleven_multilingual_v2多语言模型、text、stability稳定度与similarity_boost音色相似度即 README 中提到的 clarity 参数→ 状态码 200 时将音频二进制写入filename并返回文件名否则抛出含状态码与响应体的异常。上层调用链语音模块与剩余额度管控eleven_voice_module.py 将ElevenLabsAPI包装成符合VoiceModule接口的实现构造函数可传checkElevenCreditsTrue当剩余字符不足 1200约 45 秒短视频的配音量时直接抛异常提前止损generate_voice先生成配音再调用update_usage()刷新剩余额度若剩余字符不足以覆盖len(text)则拒绝生成并给出明确错误信息。这一包装使 ShortGPT 的多个引擎得以统一调用语音能力例如 content_short_engine.py 的_generateTempAudio与 content_translation_engine.py 的多语言翻译配音流程。API Key 管理ApiKeyManager的双通道读取pexels_api.py与上层语音模块都依赖 api_db.py 中的ApiKeyManager获取密钥。其读取优先级为先从 TinyMongo 文档数据库api_db库、api_keys集合读取未命中则回退到环境变量如PEXELS_API_KEY、ELEVENLABS_API_KEY、OPENAI_API_KEY项目通过load_dotenv(./.env)加载两者皆无时返回空字符串。set_api_key则把密钥写入数据库供 GUI 配置界面与 CLI 使用。这意味着使用本模块时只需配置好.env文件或调用ApiKeyManager.set_api_key即可三个工具文件无需关心密钥来源。实战要点与边界依赖要求三个文件均基于requestsimage_api.py额外依赖urllib3用于 Retry均在 requirements.txt 中声明素材尺寸策略图片侧以expected_dim[720,720]近似匹配视频侧以 1920×1080 / 1080×1920 硬性过滤均面向短视频成片质量设计配额与稳定性Pexels 与 ElevenLabs 均为计费/限量服务Pexels 侧预留了限流头观测位ElevenLabs 侧在语音模块中做了字符额度预检实验性风险getBingImages依赖页面 HTML 结构与正则解析verifyFalse关闭了 SSL 校验属于实验性抓取方案页面结构变动可能导致解析失效需留意retries参数与异常兜底README 与实现的差异README 中描述的getCharactersFromKey在 eleven_api.py 中实际对应类方法get_remaining_characters写作/阅读旧文档时需以当前源码为准。小结api_utils是 ShortGPT 素材供应链的最底层image_api.py负责图片、pexels_api.py负责视频、eleven_api.py负责语音三者之上分别由图片搜索工具、视频内容引擎和语音模块完成业务编排。读懂这三个文件就能掌握 ShortGPT 全自动内容生成流程中素材从哪里来、如何被筛选、如何被消费的关键一环也为二次开发自定义素材源提供了清晰的参照模板。赞分享人工智能AI 应用媒体生成语音【免费下载链接】ShortGPT ShortGPT - Experimental AI framework for youtube shorts / tiktok channel automation项目地址https://gitcode.com/gh_mirrors/sh/ShortGPT点击查看免费下载相关推荐LLM Zoomcamp 2025 向量检索模块基于 Qdrant 的语义搜索、RAG 实现与混合检索实战LLM Zoomcamp 2025 向量检索模块基于 Qdrant 的语义搜索、RAG 实现与混合检索实战 本文围绕 LLM Zoomcamp 2025 年课示例工程教程人工智能大模型BilibiliDown三分钟搞定B站视频下载打造你的离线媒体库BilibiliDown三分钟搞定B站视频下载打造你的离线媒体库 还在为B站视频无法离线观看而烦恼吗想要收藏心爱的UP主作品、保存珍贵的学习资料却找不到合音视频桌面应用如何快速跑通 WVP-GB28181-Pro1 台服务器统一接入多品牌摄像头的完整指南如何快速跑通 WVP GB28181 Pro1 台服务器统一接入多品牌摄像头的完整指南 我在一家有 50 多家门店的连锁超市管监控。海康、大华、宇视的摄像头各后端音视频前端上一篇mono-jsx渲染 JSX 为 HTML 的轻量级运行时下一篇ComfyUI-HyperLoRA零样本个性化肖像合成创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考