#!/bin/bash # 《星环舰长》BGM 后处理(批次 4):Mureka flac 候选 -> 90s 无缝循环 ogg+m4a。 # 用法: bash tools/gen_bridge_bgm.sh (flac 原件在 tools/mureka_out/,不入库) # # 工艺(tools/gen_hunt_bgm.sh 同款):首个强 onset 起点(silenceremove,-35dB 门限) # → 93s 裁剪 → 首尾 3s acrossfade(tri) 无缝循环 → loudnorm I=-20/TP=-2/LRA=11 # (22-bridge.md §9.1 三首均 -20 LUFS;结算 0.5 volume 由游戏层控制) # → aresample 44.1kHz → ogg libvorbis q3 + m4a aac 128k,落 web/bridge/audio/bgm/。 # 份额裁定(22 §15-R3):3 任务 ×1 候选 = $0.09(每任务平台返回 2 候选,选用候选 0, # 备选留 tools/mureka_out/ 不入库);无节拍网格玩法,bpm 仅为 prompt 特征词。 set -euo pipefail cd "$(dirname "$0")/.." export PATH="$PWD/tools/bin:$PATH" TMP=tools/bgm_post_wav/bridge DST=web/bridge/audio/bgm mkdir -p "$TMP" "$DST" post() { # post local src="$1" track="$2" lufs="$3" local tmp="$TMP/$track.wav" ffmpeg -y -v error -i "$src" -af \ "silenceremove=start_periods=1:start_threshold=-35dB:start_silence=0.02,atrim=end=93,asetpts=PTS-STARTPTS,asplit[a][b];[b]atrim=start=90,asetpts=PTS-STARTPTS[t];[a][t]acrossfade=d=3:c1=tri:c2=tri,loudnorm=I=${lufs}:TP=-2:LRA=11,aresample=44100" \ "$tmp" ffmpeg -y -v error -i "$tmp" -c:a libvorbis -q:a 3 "$DST/$track.ogg" ffmpeg -y -v error -i "$tmp" -c:a aac -b:a 128k "$DST/$track.m4a" echo "$track <- $src (I=${lufs})" } # 选用候选 0(各任务均 2 候选;拿不准原则=选更接近 90s 者——三者候选 0 均不劣), # 详见 tools/mureka_log.md 批次 4 节。 post tools/mureka_out/bridge-menu/160722038489089_0.flac menu -20 # 184.5s post tools/mureka_out/bridge-cruise/160722208358402_0.flac cruise -20 # 206.0s post tools/mureka_out/bridge-crisis/160723804225539_0.flac crisis -20 # 205.9s echo "== bridge bgm done: $(ls "$DST" | wc -l) files =="