
当你需要一段背景音乐。做短视频要BGM做播客要片头曲做游戏要场景音乐做个PPT演示也想配点氛围感。但你不会作曲不会弹琴不会用FL Studio。以前你只能去素材网站找——免费的质量差好的要收费还有版权问题。用流行歌曲侵权。用免版税素材千篇一律。现在你可以用AI生成。打几个字描述你想要的风格AI给你一段独一无二的音乐。这篇用Meta开源的MusicGen在VPS上搭一个文字生成音乐的工具。MusicGen是什么MusicGen是MetaFacebook母公司开源的AI音乐生成模型。你输入文字描述它输出音频。不需要MIDI不需要乐理知识打字就行。比如你输入“一段轻快的电子舞曲节奏感强适合健身房”它给你生成30秒的电子乐。输入“安静的钢琴曲有点忧伤像下雨天的咖啡馆”它给你生成一段钢琴独奏。不是从素材库里找是实时生成的——每次生成的结果都不一样你拿到的音乐是独一无二的。先说限制别期望太高。MusicGen生成的音乐有几个明显短板音质不如专业制作。听起来像demo有AI生成的那种微妙不对劲感。特别是人声——MusicGen生成的人声基本不可用像是外星语。时长单次生成最长约30秒受显存/内存限制。想要更长的需要拼接拼接处会有明显断裂感。速度CPU模式下生成30秒音频大约需要2-5分钟。不快但能接受——你去泡杯咖啡回来就好了。版权Meta声明MusicGen生成的音频可以自由使用。但AI音乐的版权领域目前法律还不清晰商业用途建议咨询专业人士。适合的场景短视频BGM、播客片头、游戏原型、个人项目配乐。不适合正式发行的音乐作品、商业广告主曲。部署MusicGenMusicGen是Python项目用Docker封装。mkdir-p/home/musicgencd/home/musicgenDockerfileFROM python:3.11-slim RUN apt-get update apt-get install -y \ libgl1 libglib2.0-0 ffmpeg \ rm -rf /var/lib/apt/lists/* # 安装CPU版PyTorch MusicGen RUN pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu RUN pip install flask audiocraft WORKDIR /app COPY app.py . EXPOSE 5006 CMD [python, app.py]app.pyfromflaskimportFlask,request,send_fileimporttorchfromaudiocraft.modelsimportMusicGenfromaudiocraft.data.audioimportaudio_writeimportioimporttempfileimportos appFlask(__name__)modelNonedefget_model():globalmodelifmodelisNone:print(加载MusicGen模型...)# medium模型平衡质量和速度modelMusicGen.get_pretrained(facebook/musicgen-medium)model.set_generation_params(duration15)# 默认15秒returnmodelapp.route(/generate,methods[POST])defgenerate():datarequest.json promptdata.get(prompt,)durationdata.get(duration,15)ifnotprompt:return{error:No prompt},400mget_model()m.set_generation_params(durationmin(duration,30))# 最大30秒# 生成wavm.generate([prompt])# 转成音频文件用临时目录读入内存后再返回避免目录清理后文件丢失withtempfile.TemporaryDirectory()astmpdir:output_nameos.path.join(tmpdir,output)audio_write(output_name,wav[0].cpu(),m.sample_rate,strategyloudness,formatwav)withopen(output_name.wav,rb)asf:file_dataf.read()returnsend_file(io.BytesIO(file_data),mimetypeaudio/wav,download_namemusic.wav)if__name____main__:app.run(host0.0.0.0,port5006)docker-compose.ymlservices:musicgen:build:.ports:-5006:5006restart:alwaysvolumes:-/home/musicgen/models:/root/.cache# 缓存模型避免每次重启重新下载dockercompose up-d--build构建过程比较长PyTorch audiocraft依赖多第一次大约15-20分钟。镜像大小约5GB。第一次请求会下载模型文件medium模型约1.5GB下载完缓存在volume里后续重启不用重下。网页前端!DOCTYPEhtmlhtmllangzh-CNheadmetacharsetUTF-8metanameviewportcontentwidthdevice-width, initial-scale1.0titleAI音乐生成/titlestyle*{margin:0;padding:0;box-sizing:border-box;}body{font-family:system-ui,sans-serif;background:#1a1a2e;color:#eee;padding:20px;min-height:100vh;}.container{max-width:700px;margin:0 auto;}h1{text-align:center;margin-bottom:30px;font-size:28px;}.input-group{margin-bottom:20px;}label{display:block;margin-bottom:8px;color:#aaa;}textarea{width:100%;height:100px;background:#16213e;color:#eee;border:1px solid #333;border-radius:8px;padding:12px;font-size:15px;font-family:inherit;resize:none;}.controls{display:flex;gap:10px;align-items:center;margin:15px 0;}select{padding:8px;background:#16213e;color:#eee;border:1px solid #333;border-radius:6px;}.btn{padding:12px 32px;background:#e94560;color:white;border:none;border-radius:8px;font-size:16px;cursor:pointer;width:100%;}.btn:hover{background:#c81e45;}.btn:disabled{background:#555;cursor:not-allowed;}.loading{text-align:center;padding:30px;color:#aaa;}.result{margin-top:20px;display:none;}audio{width:100%;margin-top:10px;}.download{display:inline-block;margin-top:10px;color:#e94560;text-decoration:none;}.tips{background:#16213e;border-radius:8px;padding:16px;margin-top:20px;font-size:14px;line-height:1.8;}.tips h3{color:#e94560;margin-bottom:8px;}.preset{display:inline-block;padding:6px 12px;background:#16213e;border:1px solid #333;border-radius:20px;margin:4px;cursor:pointer;font-size:13px;}.preset:hover{border-color:#e94560;}/style/headbodydivclasscontainerh1 AI音乐生成/h1divclassinput-grouplabel描述你想要的音乐/labeltextareaidpromptplaceholder例如轻快的电子舞曲节奏感强适合健身房/textarea/divdivstylemargin:10px 0;labelstylefont-size:13px;color:#888;快捷模板/labelspanclasspresetonclickdocument.getElementById(prompt).value轻快的电子舞曲节奏感强适合健身房电子舞曲/spanspanclasspresetonclickdocument.getElementById(prompt).value安静的钢琴曲有点忧伤像下雨天的咖啡馆钢琴忧伤/spanspanclasspresetonclickdocument.getElementById(prompt).value欢快的尤克里里配乐夏日海滩的感觉尤克里里/spanspanclasspresetonclickdocument.getElementById(prompt).value史诗感的管弦乐像电影配乐的高潮部分史诗管弦/spanspanclasspresetonclickdocument.getElementById(prompt).valuelo-fi hip hop, chill, 砸嘴声, 适合学习Lo-fi/span/divdivclasscontrolslabel时长/labelselectiddurationoptionvalue1010秒/optionoptionvalue15selected15秒/optionoptionvalue3030秒/option/select/divbuttonclassbtnidgenBtnonclickgenerate()生成音乐/buttondivclassloadingidloadingstyledisplay:none;生成中CPU模式大约需要2-5分钟去泡杯茶吧 ☕/divdivclassresultidresultaudioidplayercontrols/audiobraclassdownloadiddownloadBtnhref#downloadmusic.wav⬇ 下载WAV/a/divdivclasstipsh3提示词技巧/h3• 用英文描述效果更好模型训练数据以英文为主br• 包含风格 乐器 情绪 场景br• 好例子upbeat acoustic guitar, warm, sunny morning, folkbr• 坏例子好听的歌太模糊AI不知道你要什么/div/divscriptasyncfunctiongenerate(){constpromptdocument.getElementById(prompt).value;if(!prompt.trim())return;constdurationdocument.getElementById(duration).value;constbtndocument.getElementById(genBtn);btn.disabledtrue;document.getElementById(loading).style.displayblock;document.getElementById(result).style.displaynone;try{constresawaitfetch(/api/generate,{method:POST,headers:{Content-Type:application/json},body:JSON.stringify({prompt,duration:parseInt(duration)})});constblobawaitres.blob();consturlURL.createObjectURL(blob);document.getElementById(player).srcurl;document.getElementById(downloadBtn).hrefurl;document.getElementById(result).style.displayblock;}catch(err){alert(生成失败err.message);}finally{btn.disabledfalse;document.getElementById(loading).style.displaynone;}}/script/body/html放到/home/musicgen/web/index.html。Nginx反代server { listen 80; server_name music.你的域名.com; location / { root /home/musicgen/web; index index.html; } location /api/generate { proxy_pass http://127.0.0.1:5006/generate; proxy_set_header Host $host; proxy_read_timeout 600s; # 生成可能要几分钟超时调到10分钟 } }nginx-tnginx-sreload certbot--nginx-dmusic.你的域名.com实测效果我在VPS上4核CPU8G内存测了几组提示词测试1“upbeat electronic dance music, energetic, gym workout”生成15秒。节奏感确实有鼓点清晰电子音色。有点单调15秒内没有明显变化但作为BGM能用。生成耗时约3分钟。测试2“calm piano, melancholic, rainy day, coffee shop”生成15秒。钢琴音色还原度不错旋律确实有忧伤感。比测试1好——可能钢琴比电子乐更容易生成。耗时约2分半。测试3“epic orchestral, cinematic, battle scene, dramatic”生成15秒。管弦乐的气势出来了但层次感不够——真实交响乐有多个声部AI生成的偏扁平。当游戏原型音乐可以正式用不行。耗时约3分钟。测试4“欢快的中文民谣吉他伴奏”生成15秒。用中文描述效果明显不如英文。吉他音色OK但中文民谣的风格没体现出来。换成英文acoustic folk, cheerful, guitar后效果好很多。结论纯器乐效果还行复杂编曲和人声不行。英文提示词比中文效果好得多。作为快速生成一段能用的BGM的工具合格了。提示词技巧MusicGen的提示词写法直接决定质量。几个要点用英文。模型的训练数据以英文为主英文描述的风格识别更准。写具体不写模糊。好听的歌→AI不知道你要什么。upbeat ukulele, tropical, summer vibe→AI知道要欢快的尤克里里夏日风。拆维度写。好的提示词包含乐器、风格、情绪、节奏、场景。✅ lo-fi hip hop, chill, mellow, jazz chords, vinyl crackle, study music ✅ epic orchestral, strings, brass, dramatic, cinematic, building tension ✅ acoustic guitar, fingerpicking, warm, cozy, morning, folk ❌ 好听的背景音乐 ❌ pop song ❌ something cool避免人声。除非你想要外星语效果。加instrumental或no vocals到提示词里。资源和性能内存medium模型加载后占约4GB。加上PyTorch本身总共约5-6GB。4G内存的VPS跑不了至少8G。CPU4核是底线。2核能跑但每首都等10分钟体验很差。存储镜像5GB 模型文件1.5GB预留10GB空间。如果想更快需要GPU。但GPU VPS贵按小时算大概几毛到几块一小时除非你天天用否则不划算。CPU模式适合偶尔生成几段BGM的场景。替代方案用API而非本地部署如果你的VPS带不动MusicGen内存不够可以用API方式——不本地部署模型而是调云端API生成音乐。几个选择Suno API非官方Suno是目前效果最好的AI音乐生成但有API限制Stability AI Audio API付费API效果好Replicate托管MusicGen按次付费不用自己部署用API的话就不需要大内存VPS了普通2G内存的机器跑个前端转发就行。缺点是要花钱——不过Replicate上跑一次MusicGen大概几分钱比买GPU VPS便宜。到这一步你的VPS上有一个AI音乐生成工具了。打开网页打几个字等几分钟下载一段独一无二的音频。不会作曲没关系。AI替你作。你只需要描述你想要的感觉——剩下的交给模型。整个工具链还是那个套路Docker容器 Flask API HTML前端 Nginx反代。你已经用同样的模式部署了对话界面、知识库、图片工具箱、PDF解析、翻译平台、客服系统。再加一个音乐生成——你的VPS现在是一个小型AI工具集合了。