视频BGM技能
分析视频内容和情绪,通过AI生成匹配的BGM,并混合音频。
流水线
输入视频 → Gemini 分析 → Lyria2 BGM → FFmpeg 混合 → 输出(情绪/风格)(生成)(速度 + 音量 + 淡入淡出)
依赖项
Python:python3(或激活项目虚拟环境)
Gemini API:GOOGLE_GENAI_API_KEY(视频理解)
fal.ai:FAL_API_KEY(Lyria2 音乐生成)
FFmpeg:系统安装
设置
# 安装所需包
pip install google-generativeai httpx
# 设置API密钥通过环境变量
export GOOGLE_GENAI_API_KEY="你的google_api_key"
export FAL_API_KEY="你的fal_api_key"
用法
/video-bgm <视频路径>
/video-bgm <视频路径> --speed 1.1
/video-bgm <视频路径> --speed 1.1 --volume 5
/video-bgm <视频路径> --style "lo-fi chill"
参数
参数 默认值 描述
path (必需)输入视频文件路径
--speed 1.0 速度倍数(例如1.1 = 10% 快速)
--volume 5.0 BGM音量倍数(Lyria2 输出很安静)
--fade-in 1.5 淡入时长(秒)
--fade-out 3.0 淡出时长(秒)
--style (自动)覆盖音乐风格(跳过Gemini 分析)
步骤
步骤1:使用Gemini 分析视频
上传视频到Gemini 2.0 Flash 并获取深度情绪分析。
导入google.generativeai作为genai
导入os
GOOGLE_API_KEY = os.environ.get("GOOGLE_GENAI_API_KEY")
genai.configure(api_key=GOOGLE_API_KEY)
使用此分析提示(作为音乐监督,而不是通用提示):
仔细观看此视频。你是商业广告的音乐监督。告诉我:
- 此视频传达什么品牌定位?(豪华?平价?志向?)
- 观众的情感旅程是什么?请具体说明每一刻。
- 什么真正的商业音乐参考适合?请具体说明广告风格(Four Seasons 度假村?Apple 发布会?Volvo?Pottery Barn?Nike?)
- 能量水平是什么?沉思/静止或前进动力?
- 什么节奏、乐器和制作风格实际上有效?请诚实——古典钢琴往往太过正式。考虑现代替代品。
然后提供一个单一的音乐生成提示(2-3 句),捕捉理想的BGM。关注:乐器、节奏BPM、情绪形容词、制作风格。格式:MUSIC_PROMPT:<你的提示这里>
步骤2:提取MUSIC_PROMPT
解析Gemini 响应以找到MUSIC_PROMPT:行。这成为Lyria2 提示。始终追加以下约束到任何Lyria2 提示:无人声,无鼓,无打击乐,无音效。
步骤3:通过fal.ai Lyria2 生成BGM
导入httpx
导入os
FAL_API_KEY = os.environ.get("FAL_API_KEY")
resp = httpx.post(
"https://fal.run/fal-ai/lyria2",
headers={
"Authorization": f"Key {FAL_API_KEY}",
"Content-Type": "application/json",
},
json={"prompt": music_prompt},
timeout=120.0,
)
audio_url = resp.json()["audio"]["url"]
Lyria2 生成~32s 的音频。输出是WAV,48kHz 立体声。
步骤4:FFmpeg — 速度 + 剥离音频 + 混合BGM
# 步骤4a:加速视频(如果请求)并剥离任何现有的音频
ffmpeg -y -i INPUT.mp4 \
-filter:v "setpts=PTS/{speed}" \
-an \
-c:v libx264 -preset medium -crf 18 \
OUTPUT_speedup.mp4
# 步骤4b:获取加速后的时长
DURATION=$(ffprobe -v quiet -show_entries format=duration -of csv=p=0 OUTPUT_speedup.mp4)
# 步骤4c:混合BGM 与音量增强、淡入淡出、修剪到视频长度
ffmpeg -y \
-i OUTPUT_speedup.mp4 \
-i bgm.wav \
-filter_complex "[1:a]volume={volume},atrim=0:{duration},afade=t=in:st=0:d={fade_in},afade=t=out:st={duration-fade_out}:d={fade_out}[a]" \
-map 0:v -map "[a]" \
-c:v copy -c:a aac -b:a 192k \
-shortest \
OUTPUT_final.mp4
步骤5:打开结果
打开最终视频供用户审查。同时打开BGM,以便他们可以单独评估音乐。
关键收获
Lyria2 输出非常安静 — 始终使用音量倍数(默认5.0)
不要过度指定Lyria2 提示 — “三个行为”风格的提示会产生混乱的结果。
保持乐器 + 节奏 + 情绪 + 风格参考。
让Gemini 充当音乐监督 — 它给出比通用“放松钢琴”默认值更好的风格推荐。
始终剥离现有的音频 — 一些视频有不需要的音频轨道。
古典钢琴通常是错误的 — 豪华/生活方式,现代极简主义(Rhodes,吉他,大提琴)效果更好。
输出文件
所有文件都保存在输入视频旁边:
input_video.mp4 → 原始
input_video_speedup.mp4 → 加速,无音频
input_video_bgm.wav → 生成的BGM
input_video_final.mp4 → 最终输出带BGM
示例
# 基本:分析和添加BGM
/video-bgm ~/Desktop/product_video.mp4
# 加速10% 并添加BGM
/video-bgm ~/Desktop/product_video.mp4 --speed 1.1
# 覆盖风格(跳过Gemini 分析)
/video-bgm ~/Desktop/ad.mp4 --style "upbeat modern pop, synth pads, 100 BPM"
# 调整音量
/video-bgm ~/Desktop/quiet_video.mp4 --volume 8
作者
Canlah AI — 在性能营销中运行