还是之前文章介绍过地几个工具之一
[AI相关]各平台AI使用对比,包含大模型学习,生成视频等-CSDN博客
问问AI其结构,框架等,虽然不太完全对,但真地DeepSeek已经回答得很好了:
重点关注就两个类
- video_engine和(实际上是video.py)
- ai_generation(ai.py)
下面这个图,AI-DeepSeek直接给出得的是目录名,这就肯定不可能对的了,软件是不停迭代的,肯定会改名,也会在半年,一年内大幅度更新,目录名肯定不会“正确的”;但是整体框架(AI对框架的理解是非常好的,对我问的问题的立即也是非常好,这就。。。。。。。。非常恐怖了)
video.py
task.py 合成视频
# task.py
def generate_final_videos(
task_id, params, downloaded_videos, audio_file, subtitle_path
):
final_video_paths = []
combined_video_paths = []
video_concat_mode = (
params.video_concat_mode if params.video_count == 1 else VideoConcatMode.random
)
_progress = 50
for i in range(params.video_count):
index = i + 1
combined_video_path = path.join(
utils.task_dir(task_id), f"combined-{index}.mp4"
)
logger.info(f"\n\n## combining video: {index} => {combined_video_path}")
video.combine_videos(
combined_video_path=combined_video_path,
video_paths=downloaded_videos,
audio_file=audio_file,
video_aspect=params.video_aspect,
video_concat_mode=video_concat_mode,
max_clip_duration=params.video_clip_duration,
threads=params.n_threads,
)
最终还是回到 video.py
video.py 生成视频
def preprocess_video(materials: List[MaterialInfo], clip_duration=4):
for material in materials:
if not material.url:
continue
ext = utils.parse_extension(material.url)
try:
clip = VideoFileClip(material.url)
except Exception:
clip = ImageClip(material.url)
width = clip.size[0]
height = clip.size[1]
if width < 480 or height < 480:
logger.warning(f"video is too small, width: {width}, height: {height}")
continue
python fileClip库
material.py
def download_videos(
task_id: str,
search_terms: List[str],
source: str = "pexels",
video_aspect: VideoAspect = VideoAspect.portrait,
video_contact_mode: VideoConcatMode = VideoConcatMode.random,
audio_duration: float = 0.0,
max_clip_duration: int = 5,
) -> List[str]:
valid_video_items = []
valid_video_urls = []
found_duration = 0.0
search_videos = search_videos_pexels
if source == "pixabay":
search_videos = search_videos_pixabay
for search_term in search_terms:
video_items = search_videos(
search_term=search_term,
minimum_duration=max_clip_duration,
video_aspect=video_aspect,
)
logger.info(f"found {len(video_items)} videos for '{search_term}'")
for item in video_items:
if item.url not in valid_video_urls:
valid_video_items.append(item)
valid_video_urls.append(item.url)
found_duration += item.duration
logger.info(
f"found total videos: {len(valid_video_items)}, required duration: {audio_duration} seconds, found duration: {found_duration} seconds"
)
logger 打印输出
ai
《AI识别文字,视频稿部分》没写完
缺点?
基本上只是利用了pelex 等网站的视频搜索功能
(可以想象,是很传统的,标签tag管理,设置都没有什么多属性,多维度等科学的数据管理的)
然后,把搜索到的视频,胡乱拼凑
甚至都没有一点视频分析,视频AI自动生成地过程
整个项目地结构就是
(优点就是很简单,我这个0基础地门外汉,2个小时就把这个项目框架看透了)
1.基础框架steamlts
2.加上一点点功能,如互联网搜索,加上视频合成
3.最后辅佐上,最新人工智能AI-API地计息
4.当然,最后Python是一个很好的胶水作用,把各个功能有机地粘连在一起了