

20260425 《014月下枯蔷(哥特风)》风格:油画
背景需求


选了哥特风格故事脚本

豆包故事脚本

只有画面,没有图片关键词、图片转视频动态关键词


内容有点长,我要控制在10秒一个镜头


很好只有10秒一个镜头了。
写一个故事名称

图片生成:选了"油画"








图片下载

视频生成








视频下载






视频剪辑
统一用一个哥特教堂音乐





把片头和片尾照片加入,删除多余音频,添加钟声特效
















最后我还是 用了Python edge_tts的AI声音

python
# 女声 · 空灵神秘风格
from pathlib import Path
import edge_tts
import asyncio
import subprocess
# 解说文本(可自由修改)
TEXT = "。".join([
"亲爱的,你该来了",
"月光为契,宿命为笼,我们终究触不到彼此。",
]) + "。"
# 保存路径
SAVE_DIR = Path(r"D:\test\20桌面素材\20260425 《月下枯蔷014(哥特)》风格:油画\声音")
SAVE_DIR.mkdir(parents=True, exist_ok=True)
# ===================== 女声 · 空灵神秘音色 =====================
# 女声基础音色(适合改造为空灵风格)
MYSTERIOUS_FEMALE_VOICES = [
# 推荐:Xiaoxiao(温柔女声,调音范围大,空灵感强)
# ("zh-CN-XiaoxiaoNeural", "神秘_女声_晓晓.mp3"),
# 备选1:Xiaoyou(年轻女声,带梦幻感)
# ("zh-CN-XiaoyouNeural", "神秘_女声_晓悠.mp3"),
# 备选2:Xiaohan(自然亲切,适合神秘旁白)
("zh-CN-XiaohanNeural", "神秘_女声_晓涵.mp3"),
]
# 空灵神秘风格参数(女声专属)
MYSTERIOUS_PARAMS = {
"rate": "-18%", # 语速降低18%(比男声稍慢,更飘渺)
"pitch": "-15Hz", # 音高降低15Hz(女声降低后更空灵,不会太低沉)
"volume": "+0%" # 正常音量
}
# =================================================================
def add_mysterious_effects_female(input_mp3: str, output_mp3: str):
"""添加女声专属空灵效果:混响 + 回声 + 柔和淡入淡出"""
# 女声空灵风格滤镜链(混响略轻,保持女声清透感)
filter_chain = (
"aecho=0.7:0.8:180:0.35, " # 回声:延迟180ms,衰减0.35(比男声轻)
"areverb=wet_gain=0.5, " # 混响:湿声增益0.5(更强空间感)
"afade=t=in:st=0:d=0.8, " # 淡入0.8秒(更柔和)
"afade=t=out:st=8:d=1.5" # 淡出1.5秒
)
cmd = [
"ffmpeg", "-i", input_mp3,
"-af", filter_chain,
"-y",
output_mp3
]
try:
subprocess.run(cmd, capture_output=True, check=True)
return True
except subprocess.CalledProcessError as e:
print(f"⚠️ FFmpeg处理失败: {e.stderr.decode()[:200]}")
return False
async def generate_mysterious_female_voice():
"""生成空灵神秘女声"""
for voice, filename in MYSTERIOUS_FEMALE_VOICES:
out_mp3 = SAVE_DIR / filename
temp_raw = SAVE_DIR / f"_temp_female_{filename}"
# 步骤1:合成基础语音
print(f"\n🎙️ 正在合成基础语音:{filename}")
print(f" 音色:{voice}")
print(f" 参数:语速={MYSTERIOUS_PARAMS['rate']}, 音高={MYSTERIOUS_PARAMS['pitch']}")
tts = edge_tts.Communicate(
TEXT,
voice,
rate=MYSTERIOUS_PARAMS["rate"],
pitch=MYSTERIOUS_PARAMS["pitch"],
volume=MYSTERIOUS_PARAMS["volume"]
)
await tts.save(str(temp_raw))
print(f" ✅ 基础合成完成")
# 步骤2:添加空灵效果
print(f" 🔮 添加空灵混响效果...")
if add_mysterious_effects_female(str(temp_raw), str(out_mp3)):
print(f" ✅ 空灵效果添加完成")
# 删除临时文件
temp_raw.unlink()
else:
# 如果FFmpeg失败,保留原始文件
temp_raw.rename(out_mp3)
print(f" ⚠️ 效果添加失败,使用原始版本")
print(f"✅ 已生成:{filename}")
await asyncio.sleep(0.5)
def check_ffmpeg():
try:
subprocess.run(["ffmpeg", "-version"], capture_output=True, check=True)
return True
except (subprocess.SubprocessError, FileNotFoundError):
print("⚠️ 未检测到FFmpeg,将跳过混响效果(仅使用基础调音)")
print(" 如需完整空灵效果,请安装FFmpeg:https://ffmpeg.org/download.html")
return False
if __name__ == "__main__":
print("=" * 50)
print(" 女声 · 空灵神秘合成器")
print("=" * 50)
# 检查FFmpeg状态
has_ffmpeg = check_ffmpeg()
if not has_ffmpeg:
print(" 将使用基础调音版本(语速降低+音高降低)\n")
asyncio.run(generate_mysterious_female_voice())
print("\n🎉 女声空灵神秘声音生成完成!")
python
# 孔子,男播音员
# 老师的声音 → 改为【空灵神秘风格】
from pathlib import Path
import edge_tts
import asyncio
import subprocess
import tempfile
# 解说文本(可自由修改)
TEXT = "。".join([
"亲爱的,我来了",
"百年前的咒,困住了我,也困住了你的时光。",
"唯有永夜相伴,守这一场未完成的约",
]) + "。"
# 保存路径
SAVE_DIR = Path(r"D:\test\20桌面素材\20260425 《月下枯蔷014(哥特)》风格:油画\声音")
SAVE_DIR.mkdir(parents=True, exist_ok=True)
# ===================== 核心修改:空灵神秘音色 =====================
# 使用适合改造的男声基础音色
MYSTERIOUS_VOICES = [
# 推荐:Yunxi(年轻男声,调音范围大,适合做空灵效果)
("zh-CN-YunxiNeural", "神秘_云希.mp3"),
# 备选:Yunjian(冷静叙述感,适合神秘旁白)
("zh-CN-YunjianNeural", "神秘_云健.mp3"),
]
# 空灵神秘风格参数
MYSTERIOUS_PARAMS = {
"rate": "-15%", # 语速降低15%(空灵感需要稍慢)
"pitch": "-25Hz", # 音高降低25Hz(低沉神秘)
"volume": "+5%" # 音量略微提升
}
# =================================================================
def add_mysterious_effects(input_mp3: str, output_mp3: str):
"""添加空灵神秘效果:混响 + 回声 + 淡入淡出"""
# 空灵风格滤镜链
# aecho: 回声效果(延迟200ms,衰减0.4)
# areverb: 混响效果(湿声增益0.45,营造空间感)
# afade: 淡入淡出(消除突兀感)
filter_chain = (
"aecho=0.8:0.9:200:0.4, " # 回声:延迟200ms,衰减0.4
"areverb=wet_gain=0.45, " # 混响:湿声增益0.45(空灵感)
"afade=t=in:st=0:d=0.5, " # 淡入0.5秒
"afade=t=out:st=8:d=1.5" # 淡出1.5秒(假设总长10秒左右)
)
cmd = [
"ffmpeg", "-i", input_mp3,
"-af", filter_chain,
"-y", # 覆盖输出文件
output_mp3
]
try:
subprocess.run(cmd, capture_output=True, check=True)
return True
except subprocess.CalledProcessError as e:
print(f"⚠️ FFmpeg处理失败: {e.stderr.decode()[:200]}")
return False
async def generate_mysterious_voice():
"""生成空灵神秘风格语音"""
for voice, filename in MYSTERIOUS_VOICES:
out_mp3 = SAVE_DIR / filename
temp_raw = SAVE_DIR / f"_temp_{filename}"
# 步骤1:合成基础语音
print(f"\n🎙️ 正在合成基础语音:{filename}")
print(f" 音色:{voice}")
print(f" 参数:语速={MYSTERIOUS_PARAMS['rate']}, 音高={MYSTERIOUS_PARAMS['pitch']}")
tts = edge_tts.Communicate(
TEXT,
voice,
rate=MYSTERIOUS_PARAMS["rate"],
pitch=MYSTERIOUS_PARAMS["pitch"],
volume=MYSTERIOUS_PARAMS["volume"]
)
await tts.save(str(temp_raw))
print(f" ✅ 基础合成完成")
# 步骤2:添加空灵效果
print(f" 🔮 添加空灵混响效果...")
if add_mysterious_effects(str(temp_raw), str(out_mp3)):
print(f" ✅ 空灵效果添加完成")
# 删除临时文件
temp_raw.unlink()
else:
# 如果FFmpeg失败,保留原始文件
temp_raw.rename(out_mp3)
print(f" ⚠️ 效果添加失败,使用原始版本")
print(f"✅ 已生成:{filename}")
await asyncio.sleep(0.5)
# 可选:检查FFmpeg是否可用
def check_ffmpeg():
try:
subprocess.run(["ffmpeg", "-version"], capture_output=True, check=True)
return True
except (subprocess.SubprocessError, FileNotFoundError):
print("⚠️ 未检测到FFmpeg,将跳过混响效果(仅使用基础调音)")
print(" 如需完整空灵效果,请安装FFmpeg:https://ffmpeg.org/download.html")
return False
if __name__ == "__main__":
print("=" * 50)
print(" 空灵神秘男声合成器")
print("=" * 50)
# 检查FFmpeg状态
has_ffmpeg = check_ffmpeg()
if not has_ffmpeg:
print(" 将使用基础调音版本(语速降低+音高降低)\n")
asyncio.run(generate_mysterious_voice())
print("\n🎉 空灵神秘声音生成完成!")


最后两个镜头没有台词



这样每个镜头都有男女声的台词了

20260425 《014月下枯蔷(哥特风)》风格:油画