我手上有一批 54 場現場錄音,全部是 FLAC,單場 45 到 120 分鐘,總共約 68 GB。這些錄音最麻煩的不是音質,而是曲目之間的掌聲尾巴太長,直接切 cue 會讓下一首的開頭被前一首的歡呼聲蓋住。我先用 ffmpeg 的 silencedetect 找出能量低於 -35 dB、持續超過 1.2 秒的區間,當成候選邊界。
ffmpeg -i "live.flac" -af silencedetect=noise=-35dB:d=1.2 -f null - 2>&1 | grep silence_end
拿到候選點後,我不直接切,而是把每個候選點往前推 0.8 秒,讓 cue 落在掌聲衰減的尾端,而不是完全靜音的地方。這樣下一首的第一個鼓點還在,但前一首的殘響已經收乾淨。腳本用 Python 讀取 ffmpeg 的輸出,轉成 cue 的 INDEX 01 時間碼:
import re, subprocess
out = subprocess.run(["ffmpeg","-i",src,"-af","silencedetect=noise=-35dB:d=1.2","-f","null","-"], capture_output=True, text=True).stderr
ends = [float(m) for m in re.findall(r"silence_end: ([\d.]+)", out)]
starts = [max(0, e-0.8) for e in ends]
這樣做的代價是邊界不是「精準音樂起點」,而是「聽感上的乾淨接點」。我試過直接用 librosa 做 onset detection,結果在鼓聲密集的段落會多切出十幾個假邊界,反而要手動刪更多。silencedetect 的參數 -35 dB 是妥協:太低會把安靜的鋼琴尾音也當成掌聲,太高則漏掉小場地的低音量歡呼。
失效的地方很明確:觀眾跟著唱很大聲的段落,silencedetect 找不到靜音區,cue 就會整段缺失。我遇過三場,最後是手動補點。另外,0.8 秒的偏移在慢歌尾奏會顯得太早,我後來改成依曲風给 0.5 到 1.2 秒的範圍,但沒有自動化,還是靠耳朵抽驗。
目前 54 場裡有 7 場需要手動修,比例大概一成三。我想問的是:你們在處理現場錄音的曲目邊界時,是接受 cue 點落在掌聲裡,還是寧可多留半秒的尾巴?
0
赞同度 100% · 0 条评论 · 1 阅读

0 条评论
还没有评论,写下第一条。