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

感悟:

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

相关推荐
梦梦代码精10 小时前
为什么这个开源的AI平台会火?有点东西。。。
人工智能·算法·机器学习·docker·开源
大模型真好玩10 小时前
智能体从入门到精通:6个必学GitHub开源项目
人工智能·agent·deepseek
源图客11 小时前
Aitoearn:OPC(一人公司)的AI内容智能体
人工智能·dreamweaver
逸模11 小时前
AI+BIM 重构连锁公装新范式 逸模打造数字化营建核心底座
大数据·人工智能·笔记·其他·信息可视化·重构
phltxy11 小时前
MCP 从协议到 Spring AI 实战
人工智能·spring·oracle
Sirius Wu12 小时前
Agentic端到端&分离式RL技术建设
人工智能·深度学习·机器学习·caffe
AI导出鸭PC端12 小时前
智谱清言怎么生成word文档?AI导出鸭终结乱码烦恼
人工智能·ai·c#·word·豆包·ai导出鸭
格桑阿sir12 小时前
17-大模型智能体开发工程师:深入学习Agent记忆系统
人工智能·记忆存储·记忆系统·agent记忆·嵌入式数据库·agent进化·记忆检索
数据仓库搬砖人12 小时前
LangGraph 原理深度解析:为什么它是目前最适合构建 Agent 的框架
人工智能
孟陬12 小时前
国外技术周刊 #139:LLM 正在杀死程序员的「懒惰美德」
前端·人工智能·后端