
























ShortGPT 的核心是一个开源的 Python 框架,它利用大型语言模型(LLMs)和各种 AI 服务来自动化视频创作。通过为内容生成、语音合成、素材获取和视频编辑提供结构化方法,它简化了复杂的视频制作任务。该框架在 YouTube 自动化和 TikTok 创作者计划自动化中尤为流行,使创作者能够大规模制作引人入胜的内容。
ShortGPT 采用模块化架构,围绕几个关键组件构建,这些组件协同工作:
该框架为不同类型的内容创作提供专用引擎:
所有内容引擎都继承自 AbstractContentEngine 类,该类为内容创作工作流提供了一致的基础。这个基类处理:
编辑框架是 ShortGPT 视频制作能力的核心。它使用基于 JSON 的编辑语言,将复杂的视频编辑任务分解为 LLMs 可以理解和执行的可管理、可定制的步骤。该框架包括:
ShortGPT 提供基于 Gradio 的 Web 界面,通过友好的 GUI 使框架易于访问。该界面分为三个主要部分:
ShortGPT 通过一系列明确定义的步骤自动化整个视频创作过程。例如,ContentShortEngine 遵循以下工作流:
ShortGPT 支持多语言内容创作,包括:
ShortGPT 利用强大的技术组合来实现其功能:
技术 | 用途 |
OpenAI GPT | 脚本生成、翻译和内容规划 |
MoviePy | 视频编辑和渲染 |
ElevenLabs | 高质量语音合成 |
EdgeTTS | 免费的多语言文本转语音 |
Whisper | 用于字幕时间轴的语音识别 |
Pexels API | 素材视频和图片获取 |
Gradio | Web 界面框架 |
TinyDB | 用于内容管理的轻量级数据库 |
FFmpeg | 视频处理和渲染 |
Gemini API 在 ShortGPT 中用作 OpenAI API 的替代方案,用于执行大语言模型(LLM)完成任务,如脚本生成、编辑提示词生成等。在 llm_completion 函数中,系统会优先检查 Gemini API 密钥。如果存在,则使用 Gemini API 进行 LLM 完成;否则回退到 OpenAI API。
ShortGPT引擎系统的核心是AbstractContentEngine类,它作为所有内容生成引擎的基础。这个抽象基类提供了一个基于步骤的工作流系统,负责处理从脚本生成到最终视频渲染的整个内容创作过程。
该架构遵循清晰的继承模式:
AbstractContentEngine(基类)
ContentShortEngine(继承抽象类,提供通用短视频功能)
FactsShortEngine和RedditShortEngine(继承ContentShortEngine)这种分层架构意味着您可以利用现有功能,同时专注于实现引擎的独特之处。
ShortGPT引擎使用步骤字典来定义内容创作过程。每个步骤都是按顺序执行的方法:
1.如何判断视频中图片时间轴位置,与字幕如何对应?
项目通过一个多步骤流程来确定图片时间轴位置并与字幕对应,核心是使用 Whisper 进行音频分析生成字幕时间戳,然后通过 LLM 生成图片查询和时间戳对。 content_short_engine.py:72-82
_timeCaptions)首先使用 Whisper 分析音频,生成带时间戳的字幕:
whisper_analysis = audio_utils.audioToText(self._db_audio_path)
self._db_timed_captions = captions.getCaptionsWithTime(whisper_analysis)
content_short_engine.py:72-76
getImageQueryPairs)gpt_editing.getImageQueryPairs 函数接收带时间的字幕,使用 LLM 生成图片查询和时间戳对: gpt_editing.py:12-51
关键逻辑:
timestamp 和 query gpt_editing.py:24-26min(time + maxTime, next_time),确保图片显示不超过 maxTime(默认2秒) gpt_editing.py:32-37[((time, end), query + " image"), ...] gpt_editing.py:39在 _editAndRenderShort 中,图片和字幕使用相同的时间戳系统添加到编辑引擎: content_short_engine.py:140-148
# 添加字幕
for timing, text in self._db_timed_captions:
videoEditor.addEditingStep(caption_type, {'text': text.upper(),
'set_time_start': timing[0],
'set_time_end': timing[1]})
# 添加图片
for timing, image_url in self._db_timed_image_urls:
videoEditor.addEditingStep(EditingStep.SHOW_IMAGE, {'url': image_url,
'set_time_start': timing[0],
'set_time_end': timing
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。