我的一个文本转音频转视频的构想

128 阅读1分钟

import jieba from moviepy.editor import TextClip, concatenate_videoclips, VideoFileClip, AudioFileClip, vfx # 示例文本 text = "这是一个示例文本,用于演示如何使用jieba进行分词。" # 使用jieba进行分词 words = list(jieba.cut(text)) print(f"分词结果: {words}") # 生成带有文本的小视频片段 def generate_video_clip(word, output_path): # 根据词的长度动态调整视频片段的时长 base_duration = 1.0 # 基础时长(秒) duration = base_duration * (len(word) / 2.0) # 动态调整时长 if duration < 0.5: duration = 0.5 # 最小时长 elif duration > 3.0: duration = 3.0 # 最大时长 # 设置视频参数 fontsize = 70 font = 'SimHei' # 字体 color = 'white' bg_color = 'black' # 创建文本剪辑 text_clip = TextClip(word, fontsize=fontsize, font=font, color=color, bg_color=bg_color) text_clip = text_clip.set_duration(duration).set_position('center') # 保存视频片段 text_clip.write_videofile(output_path, fps=24) # 生成所有小视频片段 video_clips = [] for i, word in enumerate(words): output_path = f"clip_{i}.mp4" generate_video_clip(word, output_path) video_clips.append(VideoFileClip(output_path)) # 合并所有视频片段 final_video = concatenate_videoclips(video_clips, method="compose") # 保存最终的长视频 final_video.write_videofile("final_output.mp4", fps=24) # 添加背景音乐 bgm_path = "bgm.mp3" bgm_clip = AudioFileClip(bgm_path) # 确保背景音乐的长度与视频一致 if bgm_clip.duration > final_video.duration: bgm_clip = bgm_clip.subclip(0, final_video.duration) else: bgm_clip = bgm_clip.fx(vfx.loop, duration=final_video.duration) # 设置背景音乐音量 bgm_clip = bgm_clip.volumex(0.5) # 将背景音乐音量降低到50% # 将背景音乐添加到视频中 final_video_with_bgm = final_video.set_audio(bgm_clip) # 保存最终的长视频 final_video_with_bgm.write_videofile("final_output_with_bgm.mp4", fps=24) # 提取音频 audio_clip = final_video_with_bgm.audio # 保存音频到文件 audio_output_path = "final_audio.mp3" audio_clip.write_audiofile(audio_output_path) print(f"音频已保存到 {audio_output_path}") print(f"最终视频已保存到 final_output_with_bgm.mp4")