【教学类-160-14】20260425 AI视频培训-练习014“豆包AI视频《月下枯蔷(哥特风)》+豆包图片风格:油画”

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月下枯蔷(哥特风)》风格:油画

感悟:

哥特风格的脚本就很神秘、抽象,所以做出来的故事没有什么明显的剧情,全靠想象。

相关推荐
阿里云大数据AI技术7 分钟前
从数据湖到多模态湖仓-基于阿里云EMR Serverless StarRocks与DLF Paimon构建AI时代的统一分析检索架构
人工智能
前端的阶梯11 分钟前
浅谈Workflow和Agent的区别
人工智能
Xzaveir1 小时前
别把所有“认证”都塞进 AuthService:实名、一键登录与号码身份的领域拆分
android·人工智能
BerrySen1781 小时前
KMP全栈开发:从Android到AI Agent的技术演进与实践
android·人工智能
战族狼魂1 小时前
高频面试题精选:分治与AI Agent架构
人工智能·算法·大模型·大语言模型
zSD55rt5a2 小时前
方差在扩散模型保护中的作用
人工智能·harmonyos
人生百态,人生如梦2 小时前
情感交互仿生人从技术到落地构想3——技术交流贴(2026.7)
人工智能·机器学习·人机交互·交互·具身智能
用户652238438112 小时前
为什么成熟的 LLM 应用,都把"后端地址"做成可切换的配置
人工智能
Aa99883342 小时前
AI视觉检测设备厂家的技术评估框架——以及AI视觉检测的检出边界与适用条件
人工智能