99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

CM BGM音頻庫(kù)歸檔:ffmpeg響度標(biāo)準(zhǔn)化與元數(shù)據(jù)管理

CM BGM音頻庫(kù)歸檔:ffmpeg響度標(biāo)準(zhǔn)化與元數(shù)據(jù)管理 很多人電腦里都躺著這樣一批文件文件名是track01.mp3、BGM_final_v2.wav、CM_30s(1).m4a來(lái)源可能是上世紀(jì)末的電視廣告錄像轉(zhuǎn)錄、單曲 CD 抓軌、或者從舊設(shè)備里搶救出來(lái)的碎片。它們共同的特征是——響度忽大忽小、采樣率五花八門(mén)、元數(shù)據(jù)基本為零、目錄結(jié)構(gòu)純靠記憶。當(dāng)你真的想把這些廣告曲 / CM BGM整理成一個(gè)能檢索、能試聽(tīng)、能長(zhǎng)期保存的音頻庫(kù)時(shí)會(huì)發(fā)現(xiàn)單靠一個(gè)播放器根本做不到工具鏈?zhǔn)菙嗟摹?biāo)題里提到的這類(lèi)素材年代感很強(qiáng)也很容易勾起人的收集欲。但從工程角度看它本質(zhì)上是一個(gè)典型的老舊音源歸檔問(wèn)題格式不統(tǒng)一、質(zhì)量參差、信息缺失、來(lái)源復(fù)雜。這類(lèi)問(wèn)題的解決思路和整理播客庫(kù)、整理采樣素材庫(kù)、整理語(yǔ)音數(shù)據(jù)集是完全一樣的——采集、校驗(yàn)、轉(zhuǎn)碼、響度標(biāo)準(zhǔn)化、打標(biāo)簽、入庫(kù)、檢索七個(gè)環(huán)節(jié)缺一不可。這篇文章不聊懷舊聊怎么把這批音頻真正管起來(lái)。我會(huì)給出一套可以直接落地的處理流程用ffprobe做批量體檢用ffmpeg做統(tǒng)一轉(zhuǎn)碼和 EBU R128 響度標(biāo)準(zhǔn)化用 Python 的mutagen補(bǔ)齊元數(shù)據(jù)最后用一個(gè)基于 Web Audio API 的小播放器驗(yàn)證效果。全流程腳本可復(fù)制跑完你會(huì)得到一個(gè)結(jié)構(gòu)清晰、響度一致、能被搜索的本地音頻庫(kù)。需要提前說(shuō)明一句本文所有示例都基于你有合法授權(quán)或僅作個(gè)人歸檔的前提。廣告 CM 的 BGM 通常涉及音樂(lè)著作權(quán)和錄音制作者權(quán)商業(yè)使用、公開(kāi)傳播、二次分發(fā)都需要單獨(dú)授權(quán)。下面講的都是本地處理技術(shù)不涉及任何資源的獲取與分發(fā)。1. 這篇文章真正要解決的問(wèn)題先把這個(gè)問(wèn)題的邊界劃清楚。你以為的整理音頻可能是把文件拖進(jìn)一個(gè)文件夾、按年份命名、裝個(gè)播放器就完事了。但真正動(dòng)手之后第一個(gè)卡點(diǎn)往往出現(xiàn)在我不知道這些文件到底是什么狀態(tài)——采樣率是 44.1kHz 還是 48kHz是單聲道還是立體聲碼率是 128kbps 還是 320kbps有沒(méi)有削波響度差多少 dB這些信息如果靠人工一個(gè)個(gè)點(diǎn)開(kāi)看屬性幾十個(gè)文件還能忍幾百個(gè)就是災(zāi)難。第二個(gè)卡點(diǎn)是響度。上世紀(jì) 90 年代末的廣告音源來(lái)源極其混雜有的是電視信號(hào)轉(zhuǎn)錄本身就帶著廣播端的動(dòng)態(tài)壓縮有的是 CD 單曲抓軌動(dòng)態(tài)范圍完整有的是后期在網(wǎng)上流轉(zhuǎn)過(guò)的二次壓縮版本早就被壓得扁扁的。把它們放在同一個(gè)播放列表里連續(xù)播放體驗(yàn)是災(zāi)難性的——前一首要調(diào)大音量后一首炸耳朵。這不是音質(zhì)問(wèn)題是響度一致性問(wèn)題兩者的解決手段完全不同。第三個(gè)卡點(diǎn)是元數(shù)據(jù)。文件名能承載的信息極其有限而且一旦改名就丟失。真正可檢索的音頻庫(kù)靠的是嵌入在文件內(nèi)部的標(biāo)簽ID3、Vorbis Comment、MP4 atoms以及外部的一份清單文件。有了這兩層你才能做到按年代篩按來(lái)源篩按是否標(biāo)準(zhǔn)化篩而不是靠腦子記。這篇文章面向的讀者很明確手里有一批來(lái)源雜亂的老音頻、想做成可維護(hù)的本地庫(kù)、并且愿意花半小時(shí)把腳本跑起來(lái)的人。如果你只是想隨便聽(tīng)聽(tīng)那用播放器就夠了下面這些內(nèi)容對(duì)你來(lái)說(shuō)是過(guò)度工程。但如果你希望五年后這批文件還在、還能找到、還能正常播放那這套流程值得認(rèn)真走一遍。2. 基礎(chǔ)概念與核心原理2.1 CM BGM 與廣告音源的特殊性CM 是日本廣告commercial message的常用簡(jiǎn)稱(chēng)CM BGM 指的就是廣告片使用的背景音樂(lè)。它和普通音樂(lè)作品最大的區(qū)別在于CM 用的往往是經(jīng)過(guò)剪輯的短版本30 秒、15 秒居多起承轉(zhuǎn)合被壓縮到極致前奏可能只剩兩秒。這意味著你在處理這類(lèi)素材時(shí)會(huì)遇到大量時(shí)長(zhǎng)極短、首尾被硬切的文件自動(dòng)化的靜音檢測(cè)和淡入淡出處理要格外小心很容易把本來(lái)就只有兩秒的前奏削掉。另一個(gè)特殊性是來(lái)源。正式發(fā)行的單曲版本、廣告里播出的剪輯版本、電視轉(zhuǎn)錄的帶噪版本這三者在技術(shù)參數(shù)上完全是三個(gè)物種。歸檔時(shí)必須用不同的字段區(qū)分它們否則后期根本分不清哪個(gè)是原始母版哪個(gè)是轉(zhuǎn)錄副本。這一點(diǎn)在實(shí)際操作中經(jīng)常被忽略等到文件攢到幾百個(gè)再想補(bǔ)成本極高。2.2 響度、峰值與動(dòng)態(tài)范圍這三個(gè)概念經(jīng)常被混為一談但工程含義完全不同。采樣峰值Sample Peak指的是單個(gè)采樣點(diǎn)的最大值反映的是會(huì)不會(huì)削波真峰值True Peak考慮了數(shù)模轉(zhuǎn)換過(guò)程中的采樣間插值更接近實(shí)際回放時(shí)的峰值通常比采樣峰值高 0.5 到 1 dB響度Loudness則是對(duì)人耳感知的建模ITU-R BS.1770 標(biāo)準(zhǔn)定義了一套加權(quán)算法輸出單位是 LUFS。為什么要區(qū)分因?yàn)槁?tīng)起來(lái)一樣響和峰值不超標(biāo)是兩個(gè)獨(dú)立目標(biāo)。把一首歌的響度拉到 -16 LUFS它的真峰值可能已經(jīng)超過(guò) 0 dBTP 了這時(shí)候在部分設(shè)備上會(huì)破音。所以標(biāo)準(zhǔn)化時(shí)必須同時(shí)約束兩個(gè)參數(shù)目標(biāo)響度和真峰值上限。廣播行業(yè)通行的做法是I-16 LUFS, TP-1.5 dBTP流媒體平臺(tái)多用I-14 LUFS, TP-1.0 dBTP。個(gè)人歸檔庫(kù)用前者更穩(wěn)妥留出的余量足夠應(yīng)付各種回放設(shè)備。2.3 元數(shù)據(jù)的三層結(jié)構(gòu)音頻元數(shù)據(jù)不是一層是三層。最內(nèi)層是容器/編碼層由文件格式本身決定比如 MP3 的 ID3v1/ID3v2、FLAC 的 Vorbis Comment、M4A 的 iTunes atoms中間層是文件系統(tǒng)層也就是文件名和目錄結(jié)構(gòu)最外層是外部清單比如一份 JSON 或一個(gè) SQLite 數(shù)據(jù)庫(kù)。三層各有優(yōu)劣。容器層跟著文件走改名移動(dòng)都不丟但字段表達(dá)能力有限文件系統(tǒng)層人類(lèi)可讀但一旦批量改名就容易亂外部清單最靈活可以隨便加自定義字段但和文件是分離的容易失同步。穩(wěn)妥的做法是三層都寫(xiě)容器層存標(biāo)準(zhǔn)字段標(biāo)題、藝術(shù)家、專(zhuān)輯、年份文件系統(tǒng)層用固定命名規(guī)范外部清單存自定義字段來(lái)源、原始格式、處理版本、校驗(yàn)和。這樣任何一層出問(wèn)題另外兩層還能兜底。2.4 轉(zhuǎn)碼與重采樣的取舍一個(gè)常見(jiàn)的誤區(qū)是統(tǒng)一轉(zhuǎn)成 WAV 最保險(xiǎn)。這個(gè)想法在存儲(chǔ)成本可以忽略的場(chǎng)景下成立但在幾百個(gè)文件、還要做備份的場(chǎng)景下就很痛苦。更合理的策略是分級(jí)母版層保留無(wú)損FLAC分發(fā)層用有損AAC 或 Opus預(yù)覽層可以用低碼率。重采樣同樣有講究。44.1kHz 轉(zhuǎn) 48kHz 不是簡(jiǎn)單插值需要經(jīng)過(guò)抗混疊濾波ffmpeg的aresample濾鏡默認(rèn)用的是 soxr 算法質(zhì)量足夠。但如果源頭是 8kHz 的老轉(zhuǎn)錄硬拉到 48kHz 只是把帶寬浪費(fèi)在空頻段上不會(huì)有任何信息增益。這種情況更合理的做法是保持原采樣率或者做帶限處理后再上采樣避免引入虛假的高頻成分。3. 環(huán)境準(zhǔn)備與前置條件這套流程對(duì)環(huán)境的依賴(lài)很輕一臺(tái)普通筆記本就夠。下面是推薦的組合具體版本請(qǐng)以你本機(jī)實(shí)際安裝的為準(zhǔn)本文重點(diǎn)演示通用思路不綁定特定版本號(hào)。組件用途說(shuō)明ffmpeg / ffprobe探測(cè)、轉(zhuǎn)碼、響度分析核心工具必須裝Python 3.9批量腳本、標(biāo)簽寫(xiě)入建議用虛擬環(huán)境mutagen讀寫(xiě)音頻標(biāo)簽純 Python 庫(kù)安裝簡(jiǎn)單任意現(xiàn)代瀏覽器驗(yàn)證播放效果需要支持 Web Audio APISQLite可選建索引、做檢索Python 內(nèi)置先確認(rèn) ffmpeg 是可用的并且?guī)в?loudnorm 濾鏡。這一步很多人會(huì)踩坑某些系統(tǒng)自帶的 ffmpeg 是精簡(jiǎn)編譯版本缺濾鏡。# 檢查 ffmpeg 版本與濾鏡支持 ffmpeg -version ffmpeg -hide_banner -filters | grep -E loudnorm|ebur128|aresample如果loudnorm沒(méi)有輸出說(shuō)明你的 ffmpeg 編譯時(shí)沒(méi)帶--enable-libebur128相關(guān)支持需要換一個(gè)完整構(gòu)建版本。Windows 上建議直接用官方推薦的靜態(tài)構(gòu)建包解壓后把bin目錄加進(jìn)PATH即可避免用包管理器裝到精簡(jiǎn)版。接著準(zhǔn)備 Python 環(huán)境python -m venv venv source venv/bin/activate # Windows 用 venv\Scripts\activate pip install mutagen目錄結(jié)構(gòu)建議這樣組織把原始文件和加工產(chǎn)物徹底隔離開(kāi)這是保護(hù)數(shù)據(jù)的底線audio-archive/ ├── raw/ # 原始文件只讀永不修改 │ ├── 1998/ │ └── unknown/ ├── work/ # 中間產(chǎn)物可隨時(shí)刪除重建 ├── out/ │ ├── master/ # 無(wú)損母版FLAC │ └── access/ # 分發(fā)版M4A/AAC ├── scripts/ │ ├── scan.py │ ├── normalize.sh │ └── tag.py └── manifest.jsonraw目錄要做成只讀在 Linux/macOS 上可以直接chmod -R a-w raw。這不是多此一舉我見(jiàn)過(guò)太多次因?yàn)槟_本寫(xiě)錯(cuò)路徑把原始文件覆蓋掉的案例。有只讀保護(hù)腳本報(bào)錯(cuò)總比數(shù)據(jù)沒(méi)了強(qiáng)。4. 核心流程拆解整個(gè)流程分七步每一步都有明確的輸入輸出可以單獨(dú)跑、單獨(dú)驗(yàn)證。不要試圖一步到位寫(xiě)個(gè)大腳本出問(wèn)題時(shí)你根本不知道是哪一環(huán)掛的。第一步掃描體檢。遍歷raw目錄用ffprobe提取每個(gè)文件的容器格式、編碼、采樣率、聲道數(shù)、時(shí)長(zhǎng)、碼率輸出一份 CSV 或 JSON 清單。這一步只讀不寫(xiě)絕對(duì)安全可以隨便重跑。第二步異常標(biāo)記。根據(jù)體檢結(jié)果打標(biāo)記時(shí)長(zhǎng)小于 10 秒的標(biāo)為片段采樣率低于 32kHz 的標(biāo)為低質(zhì)量源單聲道的標(biāo)為單聲道碼率低于 96kbps 的標(biāo)為高壓縮。這些標(biāo)記決定后續(xù)處理策略不是所有文件都值得走完整流程。第三步統(tǒng)一轉(zhuǎn)碼。把能處理的分成兩條線無(wú)損源進(jìn) FLAC 母版線有損源進(jìn) AAC 分發(fā)線。轉(zhuǎn)碼時(shí)統(tǒng)一采樣率到 48kHz低質(zhì)量源除外見(jiàn) 2.4 節(jié)的說(shuō)明統(tǒng)一位深到 24bitFLAC。第四步響度分析與標(biāo)準(zhǔn)化。用loudnorm的兩遍法第一遍只測(cè)量拿到 measured_I、measured_TP、measured_LRA、measured_thresh 四個(gè)值第二遍把這些值傳回去做精確線性歸一化。單遍法是動(dòng)態(tài)歸一化會(huì)破壞動(dòng)態(tài)范圍不適合歸檔。第五步元數(shù)據(jù)寫(xiě)入。把文件名、目錄、清單里的信息寫(xiě)進(jìn)標(biāo)簽。標(biāo)準(zhǔn)字段用 ID3/MP4 原生標(biāo)簽自定義字段用TXXXMP3或自由格式 atomM4A。第六步生成清單。匯總所有處理結(jié)果生成manifest.json包含每個(gè)文件的相對(duì)路徑、SHA-256、原始參數(shù)、處理后參數(shù)、響度值、處理時(shí)間。第七步播放驗(yàn)證。用瀏覽器搭一個(gè)最小播放器把清單喂進(jìn)去逐個(gè)試聽(tīng)重點(diǎn)聽(tīng)首尾有沒(méi)有被切、響度是否一致、有沒(méi)有爆音。這一步不能省自動(dòng)化處理一定要有人耳兜底。5. 完整示例代碼實(shí)現(xiàn)5.1 批量體檢腳本這個(gè)腳本負(fù)責(zé)第一步和第二步輸出一份帶異常標(biāo)記的 CSV。# 文件路徑scripts/scan.py import csv import json import subprocess import sys from pathlib import Path AUDIO_EXT {.mp3, .wav, .flac, .m4a, .aac, .ogg, .wma, .ape} def probe(path: Path) - dict: 調(diào)用 ffprobe 獲取音頻基礎(chǔ)參數(shù)失敗時(shí)返回空字典。 cmd [ ffprobe, -v, error, -show_entries, formatduration,bit_rate,format_name:streamcodec_name,sample_rate,channels,bits_per_raw_sample, -select_streams, a:0, -of, json, str(path), ] try: out subprocess.run(cmd, capture_outputTrue, textTrue, timeout30, checkTrue) return json.loads(out.stdout) except (subprocess.CalledProcessError, subprocess.TimeoutExpired, json.JSONDecodeError) as exc: print(f[WARN] probe failed: {path} - {exc}, filesys.stderr) return {} def classify(info: dict) - str: 根據(jù)參數(shù)打異常標(biāo)記多個(gè)標(biāo)記用分號(hào)連接。 flags [] fmt info.get(format, {}) stream (info.get(streams) or [{}])[0] try: duration float(fmt.get(duration, 0)) except (TypeError, ValueError): duration 0.0 if duration and duration 10: flags.append(片段) try: sr int(stream.get(sample_rate, 0)) except (TypeError, ValueError): sr 0 if sr and sr 32000: flags.append(低質(zhì)量源) try: ch int(stream.get(channels, 0)) except (TypeError, ValueError): ch 0 if ch 1: flags.append(單聲道) try: br int(fmt.get(bit_rate, 0)) except (TypeError, ValueError): br 0 if br and br 96000: flags.append(高壓縮) return ;.join(flags) if flags else ok def main(root: str raw, out_csv: str work/scan.csv) - None: root_path Path(root) Path(out_csv).parent.mkdir(parentsTrue, exist_okTrue) rows [] for path in sorted(root_path.rglob(*)): if path.suffix.lower() not in AUDIO_EXT or not path.is_file(): continue info probe(path) fmt info.get(format, {}) stream (info.get(streams) or [{}])[0] rows.append({ path: str(path), size_kb: round(path.stat().st_size / 1024, 1), format: fmt.get(format_name, ), codec: stream.get(codec_name, ), sample_rate: stream.get(sample_rate, ), channels: stream.get(channels, ), duration: fmt.get(duration, ), bit_rate: fmt.get(bit_rate, ), flags: classify(info), }) with open(out_csv, w, newline, encodingutf-8-sig) as fh: writer csv.DictWriter(fh, fieldnameslist(rows[0].keys()) if rows else [path]) writer.writeheader() writer.writerows(rows) print(f掃描完成共 {len(rows)} 個(gè)文件清單寫(xiě)入 {out_csv}) if __name__ __main__: main(*(sys.argv[1:] or []))這段代碼的關(guān)鍵點(diǎn)在classify函數(shù)。它把技術(shù)上能不能處理和值不值得處理分開(kāi)了一個(gè) 8 秒的廣告片段并不壞但它不應(yīng)該走完整的母版流程一個(gè) 8kHz 的轉(zhuǎn)錄文件也不是錯(cuò)但它上采樣到 48kHz 毫無(wú)意義。用標(biāo)記把它們分流比一刀切要合理得多。另外注意encodingutf-8-sig這是為了讓 Windows 上直接用 Excel 打開(kāi) CSV 時(shí)中文不亂碼實(shí)際項(xiàng)目里這個(gè)小細(xì)節(jié)能省不少事。運(yùn)行方式python scripts/scan.py raw work/scan.csv5.2 兩遍法響度標(biāo)準(zhǔn)化單遍法最大的問(wèn)題是它做的是動(dòng)態(tài)壓縮不是在保持動(dòng)態(tài)范圍的前提下調(diào)整整體增益。歸檔場(chǎng)景必須用兩遍法先用 JSON 輸出測(cè)量結(jié)果再帶著測(cè)量值做線性歸一化。#!/usr/bin/env bash # 文件路徑scripts/normalize.sh # 用法./normalize.sh input.wav output.flac set -euo pipefail INPUT${1:?需要輸入文件} OUTPUT${2:?需要輸出文件} WORK_DIR$(dirname $OUTPUT) mkdir -p $WORK_DIR MEASURE_JSON$(mktemp) cleanup() { rm -f $MEASURE_JSON; } trap cleanup EXIT echo [1/2] 測(cè)量響度$INPUT ffmpeg -hide_banner -nostdin -y -i $INPUT \ -af loudnormI-16:TP-1.5:LRA11:print_formatjson \ -f null - 21 | tail -n 20 $MEASURE_JSON # 從 JSON 中抽取四個(gè)測(cè)量值 MEASURED_I$(grep -oP input_i\s*:\s*\K[-0-9.] $MEASURE_JSON || true) MEASURED_TP$(grep -oP input_tp\s*:\s*\K[-0-9.] $MEASURE_JSON || true) MEASURED_LRA$(grep -oP input_lra\s*:\s*\K[-0-9.] $MEASURE_JSON || true) MEASURED_THRESH$(grep -oP input_thresh\s*:\s*\K[-0-9.] $MEASURE_JSON || true) if [ -z $MEASURED_I ]; then echo [ERROR] 響度測(cè)量失敗請(qǐng)確認(rèn) ffmpeg 是否帶 loudnorm 濾鏡 2 exit 1 fi echo [2/2] 應(yīng)用線性歸一化I${MEASURED_I} TP${MEASURED_TP} ffmpeg -hide_banner -nostdin -y -i $INPUT \ -af loudnormI-16:TP-1.5:LRA11:measured_I${MEASURED_I}:measured_TP${MEASURED_TP}:measured_LRA${MEASURED_LRA}:measured_thresh${MEASURED_THRESH}:lineartrue \ -ar 48000 -sample_fmt s32 -c:a flac -compression_level 8 \ $OUTPUT echo 完成$OUTPUT這里的lineartrue是核心。它告訴濾鏡用線性增益而不是動(dòng)態(tài)壓縮來(lái)達(dá)到目標(biāo)響度。副作用是如果源文件本身的動(dòng)態(tài)范圍超過(guò)目標(biāo) LRA線性模式會(huì)拒絕處理或者降級(jí)。所以跑完之后一定要看日志里有沒(méi)有normalization type的提示如果是dynamic說(shuō)明線性失敗了得回頭檢查源文件是不是動(dòng)態(tài)過(guò)大——老轉(zhuǎn)錄音源經(jīng)常有這個(gè)問(wèn)題。順帶一提-sample_fmt s32配合 FLAC實(shí)際存儲(chǔ)是 24bit這個(gè)組合在兼容性和體積上比較平衡。不要用-sample_fmt s1624bit 源轉(zhuǎn) 16bit 會(huì)損失信噪比而 FLAC 的壓縮率對(duì)位深并不敏感。5.3 元數(shù)據(jù)寫(xiě)入標(biāo)簽字段的設(shè)計(jì)要一次到位后面再改會(huì)牽連整個(gè)庫(kù)。# 文件路徑scripts/tag.py from pathlib import Path from mutagen.id3 import ID3, ID3NoHeaderError, TIT2, TPE1, TALB, TDRC, TCON, TXXX from mutagen.flac import FLAC from mutagen.mp4 import MP4 def tag_mp3(path: Path, meta: dict) - None: try: tags ID3(path) except ID3NoHeaderError: tags ID3() tags.delall(TIT2) and None tags.add(TIT2(encoding3, textmeta[title])) tags.add(TPE1(encoding3, textmeta[artist])) if meta.get(album): tags.add(TALB(encoding3, textmeta[album])) if meta.get(year): tags.add(TDRC(encoding3, textstr(meta[year]))) if meta.get(genre): tags.add(TCON(encoding3, textmeta[genre])) # 自定義字段來(lái)源、原始格式、處理版本 for key in (SOURCE, ORIG_FORMAT, PROC_VER): if meta.get(key.lower()): tags.add(TXXX(encoding3, desckey, textmeta[key.lower()])) tags.save(path) def tag_flac(path: Path, meta: dict) - None: audio FLAC(path) audio[TITLE] meta[title] audio[ARTIST] meta[artist] if meta.get(album): audio[ALBUM] meta[album] if meta.get(year): audio[DATE] str(meta[year]) if meta.get(source): audio[SOURCE] meta[source] if meta.get(orig_format): audio[ORIG_FORMAT] meta[orig_format] audio.save() def tag_m4a(path: Path, meta: dict) - None: audio MP4(path) audio[\xa9nam] [meta[title]] audio[\xa9ART] [meta[artist]] if meta.get(album): audio[\xa9alb] [meta[album]] if meta.get(year): audio[\xa9day] [str(meta[year])] if meta.get(source): audio[----:com.apple.iTunes:SOURCE] [meta[source].encode(utf-8)] audio.save() HANDLERS {.mp3: tag_mp3, .flac: tag_flac, .m4a: tag_m4a} def apply(path: Path, meta: dict) - None: handler HANDLERS.get(path.suffix.lower()) if handler is None: print(f[SKIP] 不支持的格式{path}) return handler(path, meta) print(f[OK] {path.name}) if __name__ __main__: apply(Path(out/master/demo.flac), { title: 示例曲目, artist: 示例藝術(shù)家, album: CM 歸檔 1998, year: 1998, source: 個(gè)人轉(zhuǎn)錄, orig_format: wav/44100/16, })TXXX這個(gè)幀是 MP3 里存自定義鍵值對(duì)的標(biāo)準(zhǔn)做法兼容性最好。注意desc字段必須大寫(xiě)且唯一否則不同播放器會(huì)互相覆蓋。M4A 那邊用的是自由格式 atom前綴----:com.apple.iTunes:是蘋(píng)果生態(tài)的約定俗成雖然看著別扭但這是目前跨播放器兼容性最好的寫(xiě)法。5.4 清單文件結(jié)構(gòu)清單是整個(gè)庫(kù)的索引層字段設(shè)計(jì)要留冗余寧可有空字段也別以后再加。{ schema_version: 1, generated_at: 2025-01-01T00:00:00Z, root: out/, items: [ { id: cm-1998-001, path: master/cm-1998-001.flac, access_path: access/cm-1998-001.m4a, sha256: 0000000000000000000000000000000000000000000000000000000000000000, title: 示例曲目, artist: 示例藝術(shù)家, year: 1998, duration_sec: 30.0, source: { type: 個(gè)人轉(zhuǎn)錄, orig_format: wav, orig_sample_rate: 44100, orig_channels: 2 }, processed: { sample_rate: 48000, codec: flac, integrated_lufs: -16.0, true_peak_dbtp: -1.5 }, flags: [], processed_at: 2025-01-01T00:00:00Z } ] }sha256這個(gè)字段看起來(lái)可有可無(wú)實(shí)際非常有用它讓你能在任何時(shí)候驗(yàn)證這個(gè)文件有沒(méi)有被意外修改過(guò)。幾百個(gè)文件里混進(jìn)一個(gè)被播放器寫(xiě)壞標(biāo)簽的靠肉眼是找不出來(lái)的靠哈希一跑就出來(lái)了。5.5 瀏覽器端驗(yàn)證播放器最后用一個(gè)最小頁(yè)面驗(yàn)證效果重點(diǎn)看響度表和頻譜是否異常。!DOCTYPE html html langzh-CN head meta charsetUTF-8 title音頻歸檔驗(yàn)證/title style body { font-family: system-ui, sans-serif; margin: 32px; max-width: 760px; } button { padding: 6px 14px; margin-right: 8px; } #meter { height: 18px; background: #eee; border-radius: 4px; overflow: hidden; margin-top: 12px; } #bar { height: 100%; width: 0; background: #2f855a; transition: width .05s linear; } #list { margin-top: 20px; } .item { padding: 8px 0; border-bottom: 1px solid #eee; } /style /head body h3歸檔音頻驗(yàn)證/h3 input typefile idpicker acceptaudio/* multiple div idmeterdiv idbar/div/div div idlist/div script const ctx new AudioContext(); const picker document.getElementById(picker); const bar document.getElementById(bar); const list document.getElementById(list); let current null; function playBuffer(buffer) { if (current) { current.stop(); } const src ctx.createBufferSource(); src.buffer buffer; const analyser ctx.createAnalyser(); analyser.fftSize 2048; const data new Uint8Array(analyser.fftSize); src.connect(analyser); analyser.connect(ctx.destination); src.start(); current src; (function tick() { analyser.getByteTimeDomainData(data); let peak 0; for (let i 0; i data.length; i) { const v Math.abs(data[i] - 128) / 128; if (v peak) peak v; } bar.style.width Math.min(100, peak * 100) %; bar.style.background peak 0.98 ? #c53030 : #2f855a; requestAnimationFrame(tick); })(); } picker.addEventListener(change, async (e) { list.innerHTML ; for (const file of e.target.files) { const row document.createElement(div); row.className item; row.textContent file.name → 加載中; list.appendChild(row); try { const buf await ctx.decodeAudioData(await file.arrayBuffer()); row.innerHTML b${file.name}/b · ${buf.duration.toFixed(2)}s · ${buf.sampleRate}Hz · ${buf.numberOfChannels}ch ; const btn document.createElement(button); btn.textContent 播放; btn.onclick () playBuffer(buf); row.appendChild(btn); } catch (err) { row.textContent file.name → 解碼失敗 err.message; } } }); /script /body /html這個(gè)頁(yè)面做了兩件關(guān)鍵的事一是用decodeAudioData直接解碼本地文件不需要上傳服務(wù)器隱私上沒(méi)問(wèn)題二是實(shí)時(shí)畫(huà)峰值紅色代表接近 0 dBFS。如果你看到標(biāo)準(zhǔn)化之后的文件在峰值表上頻繁頂?shù)郊t色說(shuō)明loudnorm的 TP 參數(shù)沒(méi)起效需要回頭檢查是不是源文件本身已經(jīng)削波了。6. 運(yùn)行結(jié)果與效果驗(yàn)證按順序跑一遍驗(yàn)證點(diǎn)如下。第一步掃描命令python scripts/scan.py raw work/scan.csv成功后會(huì)在work/下生成 CSV。用 Excel 或者column -s, -t work/scan.csv | head -20打開(kāi)重點(diǎn)看flags列如果超過(guò) 30% 的文件被標(biāo)為高壓縮說(shuō)明你的素材來(lái)源質(zhì)量普遍偏低這時(shí)候母版層用 FLAC就沒(méi)什么意義直接走 AAC 分發(fā)線更合理。第二步標(biāo)準(zhǔn)化跑./scripts/normalize.sh raw/sample.wav out/master/sample.flac。成功標(biāo)志是輸出文件存在、時(shí)長(zhǎng)和源文件一致誤差在 0.1 秒內(nèi)、日志里出現(xiàn)normalization type: linear。如果時(shí)長(zhǎng)明顯變短大概率是loudnorm后面的濾鏡鏈把首尾靜音吃掉了如果日志顯示dynamic說(shuō)明線性模式降級(jí)了需要人工介入。第三步驗(yàn)證響度。用ffmpeg的ebur128濾鏡復(fù)查一遍這是獨(dú)立于loudnorm的另一套實(shí)現(xiàn)用它交叉驗(yàn)證最可靠ffmpeg -hide_banner -nostdin -i out/master/sample.flac \ -af ebur128peaktrue -f null - 21 | tail -n 12預(yù)期輸出里I:應(yīng)該接近 -16.0 LUFS允許 ±0.5 浮動(dòng)Peak:應(yīng)該不超過(guò) -1.5 dBFS。如果I偏差超過(guò) 1 LU說(shuō)明源文件的動(dòng)態(tài)范圍太大線性歸一化被拒絕執(zhí)行了這時(shí)候要么接受動(dòng)態(tài)模式的結(jié)果要么先把源文件的動(dòng)態(tài)做適度壓縮。第四步播放驗(yàn)證。把out/access/里的文件拖進(jìn) 5.5 節(jié)的頁(yè)面連續(xù)播放三個(gè)來(lái)自不同來(lái)源的文件。判斷標(biāo)準(zhǔn)很樸素不需要?jiǎng)右袅啃o就說(shuō)明響度一致性達(dá)標(biāo)了。同時(shí)注意聽(tīng)首尾——CM 素材最容易在這里出問(wèn)題前奏被切掉半秒是很常見(jiàn)的故障。7. 常見(jiàn)問(wèn)題與排查思路問(wèn)題現(xiàn)象可能原因排查方式解決方案ffprobe報(bào)moov atom not foundM4A/MP4 文件寫(xiě)入中斷索引缺失用ffprobe -v error單獨(dú)測(cè)該文件嘗試ffmpeg -i bad.m4a -c copy fixed.m4a重建索引失敗則視為損壞loudnorm輸出為空f(shuō)fmpeg 精簡(jiǎn)構(gòu)建缺少濾鏡ffmpeg -filtersgrep loudnorm標(biāo)準(zhǔn)化后時(shí)長(zhǎng)變短首尾靜音被濾鏡鏈裁掉對(duì)比源與輸出的duration去掉silenceremove類(lèi)濾鏡或在鏈尾加apad日志顯示dynamic而非linear源動(dòng)態(tài)范圍超過(guò)目標(biāo) LRA看測(cè)量 JSON 里的input_lra放寬LRA到 15 或 20或先做輕度壓縮播放時(shí)爆音真峰值超標(biāo)ebur128peaktrue復(fù)查把TP下調(diào)到 -2.0重新歸一化中文標(biāo)簽亂碼ID3 編碼用了 latin1用mutagen讀回驗(yàn)證encoding3統(tǒng)一用 UTF-8ID3v2.4寫(xiě)入批量腳本中途退出單個(gè)文件損壞導(dǎo)致set -e觸發(fā)加日志看停在哪個(gè)文件改成set e逐文件容錯(cuò)記錄失敗清單FLAC 體積異常大源是 16bit 卻按 32bit 存儲(chǔ)ffprobe看bits_per_raw_sample強(qiáng)制-sample_fmt s16不要盲目上 24bit這張表里最值得展開(kāi)的是第一行和第四行。moov atom not found在下載中斷的 M4A 上極其常見(jiàn)很多人以為文件廢了其實(shí)只要容器索引缺失音頻數(shù)據(jù)往往還在-c copy重建一遍能救回大部分。而dynamic降級(jí)這件事很多人跑完腳本看沒(méi)報(bào)錯(cuò)就以為成功了實(shí)際上動(dòng)態(tài)范圍已經(jīng)被壓扁了必須查日志確認(rèn)。8. 最佳實(shí)踐與工程建議命名規(guī)范必須一次定死。推薦{年份}_{來(lái)源代碼}_{序號(hào)}_{簡(jiǎn)短標(biāo)識(shí)}.{ext}比如1998_tv_001_cm30s.flac。不要用空格、不要用中文、不要用超過(guò)三級(jí)的下劃線分隔。原因很現(xiàn)實(shí)一旦進(jìn)了命令行、進(jìn)了 URL、進(jìn)了正則任何特殊字符都會(huì)變成麻煩。標(biāo)題這類(lèi)人類(lèi)可讀信息一律放標(biāo)簽不放文件名。原始文件絕對(duì)只讀。除了chmod保護(hù)更穩(wěn)的做法是把raw放在一個(gè)獨(dú)立的物理或邏輯卷上處理腳本只從它讀取輸出永遠(yuǎn)寫(xiě)到out。如果是重要素材遵循 3-2-1 備份原則三份副本、兩種介質(zhì)、一份異地。音頻文件體積不小做備份前先用 FLAC 壓縮一輪通常能省 30% 到 50% 空間。處理流程要可重放。每個(gè)文件的處理參數(shù)響度目標(biāo)、采樣率、編碼器參數(shù)都必須記錄進(jìn)清單而不是散落在命令行歷史里。這樣半年后你想統(tǒng)一改成 -14 LUFS可以精確知道哪些文件需要重跑、哪些已經(jīng)是目標(biāo)值。沒(méi)有這份記錄所謂的標(biāo)準(zhǔn)化就是一次性的不可維護(hù)。響度目標(biāo)按用途分層。歸檔母版用 -16 LUFS個(gè)人試聽(tīng)用 -14 LUFS如果要做成播客或視頻配樂(lè)再按目標(biāo)平臺(tái)單獨(dú)出一版。不要試圖用一個(gè)響度值應(yīng)付所有場(chǎng)景那是妥協(xié)不是方案。每多一個(gè)分發(fā)版本就在清單里多加一個(gè)access_path字段結(jié)構(gòu)上不難難的是提前想到。版權(quán)邊界要在設(shè)計(jì)階段就處理。廣告 CM 的 BGM 涉及詞曲著作權(quán)和錄音制作者權(quán)即使你只是本地歸檔也要清楚自己的使用范圍。清單里加一個(gè)license_note字段記錄素材來(lái)源和授權(quán)狀態(tài)看起來(lái)是給自己添麻煩實(shí)際是在保護(hù)自己。任何對(duì)外分享、公開(kāi)播放、二次創(chuàng)作的行為都必須先獲得對(duì)應(yīng)授權(quán)這一點(diǎn)沒(méi)有技術(shù)手段可以替代。定期做完整性校驗(yàn)。寫(xiě)一個(gè)最簡(jiǎn)單的校驗(yàn)?zāi)_本遍歷清單里的sha256逐個(gè)比對(duì)。存儲(chǔ)介質(zhì)會(huì)靜默損壞SSD 的位翻轉(zhuǎn)不會(huì)報(bào)錯(cuò)只會(huì)讓你在三個(gè)月后打開(kāi)文件時(shí)發(fā)現(xiàn)是一段噪音。校驗(yàn)?zāi)_本跑一次幾秒鐘但能提前發(fā)現(xiàn)問(wèn)題。建議每季度跑一次把結(jié)果和上次對(duì)比。日志要能定位到具體文件。批量處理時(shí)print出來(lái)的信息往往不夠。每個(gè)處理步驟都應(yīng)該輸出開(kāi)始/成功/失敗 絕對(duì)路徑 耗時(shí)失敗時(shí)帶上完整的 stderr。這不是過(guò)度設(shè)計(jì)當(dāng)你半夜跑一個(gè) 500 文件的批處理第二天早上看到一行Error: invalid data found卻不知道是哪個(gè)文件時(shí)你會(huì)感謝自己當(dāng)初多寫(xiě)了兩行日志。9. 后續(xù)可以深入的方向如果這套流程跑通了接下來(lái)有幾個(gè)值得繼續(xù)做的方向。第一是自動(dòng)分類(lèi)用音頻特征時(shí)長(zhǎng)、頻譜質(zhì)心、節(jié)拍密度配合簡(jiǎn)單規(guī)則自動(dòng)區(qū)分完整曲目和廣告剪輯片段減少人工標(biāo)注量。第二是指紋比對(duì)用聲學(xué)指紋算法比如 Chromaprint判斷兩個(gè)文件是不是同一首曲子的不同版本這在處理重復(fù)素材時(shí)效率極高。第三是波形可視化檢索把每個(gè)文件的波形縮略圖生成出來(lái)做成一個(gè)網(wǎng)格視圖找素材的速度會(huì)比讀文件名快得多。第四是遷移到對(duì)象存儲(chǔ)如果庫(kù)的規(guī)模超過(guò)幾千個(gè)文件本地文件系統(tǒng)管理會(huì)變吃力用 MinIO 之類(lèi)的自建對(duì)象存儲(chǔ)配合元數(shù)據(jù)庫(kù)檢索和備份都會(huì)順暢很多。回到最開(kāi)始那個(gè)問(wèn)題這批老廣告曲、CM BGM 到底該怎么管。答案不是找個(gè)好用的播放器而是建立一套能被重復(fù)執(zhí)行的流程。播放器是消費(fèi)端流程才是資產(chǎn)。你今天花兩小時(shí)把腳本跑通三年后這批文件依然是可檢索、可驗(yàn)證、可遷移的——這才叫歸檔否則只是把文件從 A 文件夾挪到了 B 文件夾。建議把scripts/目錄單獨(dú)用 Git 管起來(lái)每次調(diào)整參數(shù)都提交一次。音頻文件不適合進(jìn)版本庫(kù)但處理邏輯非常適合。等到某天你發(fā)現(xiàn)某個(gè)批次處理錯(cuò)了能回滾到上一個(gè) commit 重跑這比什么都有用。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
婷婷五月天中文字幕| 99热这里只有精品99| 丁香操逼| 色婷婷电影网| 草综合14| 婷婷五月天日本无码| 男人天堂99| 亚洲妇女熟BBW| 这里只有精品视频| 久久五月天色| 五月婷婷激情四月| 三十路磁力链接| 991精品在线视频| 婷婷伊人久久无码色五月| 26UUU精品一区二区| 丁香五月亭亭六月综合激情网| 在线综合91| 亚洲天堂久久| 亚洲天天操| 噜噜色com| 丁香五月婷婷深五月| 婷婷香蕉视频| 亚州欧美黄色电影| 日韩AC在线免费观看| 五月丁香777| 天天狠狠干| 69婷婷丁香午夜| 大香蕉五月天婷婷| 日本综合久| 综合色影院| 97婷婷五月| 嫩草AV久久伊人妇女超级A | 99久久极情精品一区| 亚洲综合色五月| 六月丁香成人| 激情五月丁香色婷婷| 色久女| 99情色五月天| 日本人妻久久| 久9免费视频| 激情五月,激情综合网| 潘金莲AAAAAAAAAA| 91伦| 久99久视频免费观看| 91人妻人人操| 婷香狠狠爱五月| www.9操| 99精品国产在热久久| 人人97碰| 五月丁香狠狠爱| 亚洲av网站| 五月丁香婷婷视频| 婷婷在线精品| 精品人妻伦一二三区久久| 五月天狠狠| 高清视频一区| 粉嫩AV久久一区二区三区| 五月丁香六月婷综合成人综合| 婷婷五月天视频| jiqingliuyuetian| 伊人激情啪啪| 热91久| 538在线精品| 久久久天堂国产精品女人| 国产又爽又猛又粗的视频A片| 午夜不卡久久精品无码免费| 亚洲av成人一区二区电影在线| 碰99在线| 九九操操| 激情婷婷五月基地| 超碰人人操在线| 色五月激情| 开心激情五月天网| www.久久久久久久久久.com| 黄色三级日本| 深爱激情av| 综合成人小说婷婷| 99操逼| 国产婷婷色综合AV蜜臀AV| 少妇高潮呻吟A片免费看软件| 国产乱人偷精品人妻A片| 少妇被下春药玩弄A片| 熟女人妻一区二区三区免费看| 草草女人亚洲| 欧美在线视频99| 天天爱天天做天天舔| 欧美综合在线五月天色婷婷| 亚洲99在线| 色色色色五月| 日日操夜夜操中国无码| 久久丝丝热| 欧美美女国产日韩一区二区久| 丁香婷婷五月天色播| 日日做夜夜爱| 婷婷丁香五月综合| 五月婷婷|欧美| 亚洲综合激情五月久久| 97色在线观看视频| 另类婷婷五月天啪帕帕| www。88热在线视频免费观看| 亚洲九九99精品视频在线播放| 99亚州综合精品成人网| 中文幕无线码中文字蜜桃| 亚洲综合视频八| 91操网| 日在线V视频在线播放| 久久久五月四色| 激情五月综合网最新| av大香蕉| 狠狠色丁香| 国产另类综合| 亚洲情综合五月天| 丁香五月图片| 六月婷婷五月丁香| 色一情一乱一乱一区91| 婷婷无码五月天| 婷婷五月天伊人| 久久99精品久久久久久青青AR| 在线播放成人网站| 激情久久五月天| 九久久婷婷| 激情五月综合网最新| 夜夜爽天天日| 操人妻AV| 天天擼久久擼在线| 色色色九九九五月婷婷| 射久久丁香五月| 99热在线观看| 婷色成人| 欧美槡BBBB槡BBB少妇| 伊人婷婷大香蕉| 五月婷婷欲色| 九九精品9| VA婷婷| 亚洲欧美婷婷五月色综合| 久久A极片| 久久99热这里只有| 丁香五月天啪啪| AV在线观看网站| 神马欧美精| 国产探花一片区| 97色婷婷五月天| 亚洲精品久久久久AV无码| 色五月激情综合网| 97人人干| 丁香五月六月激情久久| 五他月天啪啪啪| 国产精品久久7777777精品无码| 国产婷婷色综合AV蜜臀AV| 99re66热这里只有精品| 最近免费中文字幕大全高清大全1| 色VA| 五月丁香婷婷钟和色图| 五月天激情亚洲| WWW.五月天9999| 99热官网| 六月婷色六月| 一级韩国产精品毛| AV五月婷婷露脸| 极品人妻VIDEOSSS人妻| 天天射天天射一道本日本社区 | 色综合久久天天综合网| a九九热www| 狠狠插狠狠操| 久热超碰91| 99热这里只有精品5| 日本三级成人秘书精品片| WWW、日本色丁香、co m| www.zbzhongsen.com| 超碰人人色| 色播六月| 99久久国产宗和精品1上映| 91精品久久久久久综合五月天| 一级二级色大片| 日本色综合| 欲色人妻| 五月停亭六月,六月停亭的英语| 天天爽人人综合免费7799| 99玖玖在线视频| 五月天停婷基地| 91九色国产熟女| 99久在线精品99re5热视频| 天天干天天干天天干天天干天天干| 麻豆忘忧草午夜| 久色资源| 99国产er热视频| 九月丁香| 夜夜操天天爽| 久婷婷五月丁香在线观看| 激情综合五月| 五月丁香在线综合| 色色五月婷| 色五月天在线观看| 五月激情六月宗合| 欧美日韩一a.无| 亚洲精品亚洲人成人网| 五月丁香六月婷婷a v| 超碰妻人人| 狠狠操狠狠操| 五月丁香六月婷婷不卡免费无码| www91久久| 99热在线播放| 小视频久久久aaa| 超碰人人91| 五月天婷婷久久| 激情99。| 国产精品久久..4399| 激情开心五月天| 日韩精品无码99| 亚洲网站999| 人人摸人人搞| 深爱婷婷网| 伊人久久大香网| 色色五月天婷婷| www.色窝| 天天做天天视天天谢| 久久综合66| 操操自拍| 亚洲情a| 99热线观看9| 六月激情综合| 六月婷婷综合激情| 可以直接看的av网站| 人人摸人人操人人爱| 天天综合精品| 成人性爱精品视频| 免费色色色| 日都一级A片| 激情综合五月天| 天天干天天拍| 久久激情天堂| 五月天 另类图片| 爱久综合| 九九色影视| 国内自拍97在线| 五月天婷婷丁香| 婷婷五月av| 五月花成人网| 天天操夜夜夜拍拍拍| 97精品自拍| 婷婷综合在线网| 色婷婷99| 在线99热| 欧美性爱五月天| 免费精品99| 影音先锋 91工厂| 色五月婷婷av| 九九这里只有精品在线视频| 中文字幕AV在线播放| 婷婷丁香五月天色色| EEUSS鲁片一区二区三区| 激情啪啪五月| 超碰三级片| 天天干天天色综合| 激情五月婷婷网| 色噜综| 国产白丝在线一区| 五月六月播婷婷| 99在线视频播放| 秋霞网在线免费基地五月婷婷丁香| 四LLL少妇BBBB槡BBBB| 91狠狠综合久久| 99视频精品在线| www.狠狠干com| 激情五月综合色婷婷| 91一起操| 久久人妻系列| 国产精品色婷婷AV综合色色| 久久婷婷六月综合综合色| 天天檫天天爽| 99热这里只有精品86| 日本成人噜噜| 九九亚洲| 久久99热这里只频精品6学生| 五月天综合视频| 色五月婷婷丁香五月| 九九色播五月丁香| 色吧五月婷婷| 国产欧美性成人精品午夜| 97色色色| 婷婷五月激情四射手| 无码激情AAAAA片-区区| www网站在线观看| 一区操| 免费超碰在线| 丁香激情久久| 狠狠干五月| 五月天丁香久久综合| 婷婷激情久久| 综合激情五月婷婷| 色五月丁香婷婷综合| www.五月婷婷久久.com| 色偷偷色婷婷| 人人摸人人| 五月丁香啪啪网| 五月天社区| 亚洲国产精品VA在线看黑人| 大香伊人婷婷| 国产阿姨日皮艹逼内射视频| 五月天婷婷在线观看| 色色色地址| 婷婷婷婷婷婷婷五月丁香| 日本天天色| 亚洲熟妇AV乱码在线观看| 日韩ww| 五月丁香视频色色| 97久久精品| 天天综合图片| 色玖玖综合网| 九九精品9| 欧美色偷拍| 国产婷婷色五月| 思思热在线视频99| www.婷婷五月| 无码一级片| 五月婷婷久久综合| 99国产这里只有精品| 玖玖午夜视频| 亚洲AV久久久久久久久久久久久久久久| 亚洲乱啪| 五月亭亭六月激情| 色偷偷综合| 五月激情影院| 色婷婷久久天天性爱| 亚洲婷婷丁香五月天激情小说| 日本成人噜噜噜| 99热这里有精品| 天天色中文字幕女优AV| 色色色色综合网| 婷婷六月色情| 丰满少妇猛烈A片免费看观看| 9超碰在线| 婷婷六月婷婷| www久久久| 激情精品久久| 99色热视频| 操91| 91色碰| 婷婷丁香激情五月天色色| 人人摸人人操人人爽| 开心色色五月天综合| 爱射综合| 丁香色色色| 2015在线中文字幕| 亚洲九九在线| 中文AⅤ大全| 91精品电影18T| 99色综合| 五月婷婷九| 亚洲va欧美va国产综合久久久| 五月天亭亭俺也| av第一二区| 婷婷丁香18| 亚洲六月色| 国产伊人五月天| 狠狠色丁香婷婷久久综合| 一区二区你懂的| 青青草蜜臀| 俺去也综合| 97视频.干com| 久热这里| 这里只有精品99视频| 婷婷色播婷婷| 亚洲最大在线| 91操操| 五月天久久网站| 五月丁香六月激情啪| 五月丁香综合色婷婷| 婷婷在线操| 97啪啪| 国产成人av在线| 99综合自拍| 韩国19 主播内部福利vip免费播放| 激情五月丁香六月婷婷| 久草 tingting| 天天做天天爱天天综合网| 九九婷婷五月天| 我爱va亚洲va52| 中文字幕无码人妻少妇免费视频| 亚洲五月婷天天操| 182无码| 亚洲激情区| 日本eVa一区=区视频| 婷婷五月精品中文字幕| 91丨人妻丨国产丨丝袜| 91久久综合亚洲鲁鲁五月天| site:901-07.com| 激情色色| 色色五月婷婷丁香| 日本黄色在线观看| 可以免费观看的AV| 婷婷五月伦理| 欧美三级黄色片久久| 91在线日| 99亚洲大片精品永久在线观看| 欧美精品在线观看| 国产精品色婷婷99久久精品| 激情五月图| 色五月激情五月| www.人人操人人看人人想人人摸 人人人人操,COM | 久久这里只精品| 色五月综合激情| 免费看欧美成人A片无码| 97干婷婷五月天| 亚洲成人日韩无码精品| 五月丁香 啪啪| 激情婷婷五月久久| 亚洲人人艹| 亚洲成人中心| 久久久久人妻中文| 色婷婷手机在线| 日日躁夜夜躁狠狠久久AV| 亚洲五月天婷婷在线| 亚洲国产色婷婷| 日韩在线视频网站| 99热大片| 婷婷五月天成人五月天| 91在线观看www| 亚洲黄色精品| 国产资源91在线| 欧美五月婷婷| 在线观看视频1区| 天天看A片| 五月激情综合婷婷| 久久与婷婷| 九九精品热| 色播激情五月天| 91爱操| 五月Huangsewang| 人人澡玖玖一| 婷婷开心六月| 免费精品66| 草榴视频网| 成人做爰高潮A片免费视频| 五月天婷婷无码视频| 超碰超碰在线| 91精品综合久久婷婷九色| 97在线观视频免费观看| 欧美人妻一区二区| 五月婷婷亚洲色视频| 99热6这里只有精品6| 国产精品视频网| 国产精品99久久久久久久女警| 久操大| 亚洲天天综合| 婷婷色丁香五月| 91狠狠综合久久久| 婷婷五月色综合| 婷婷.com| 免费无码毛片一区二区A片| 婷婷激情五月| 秋霞性爱AV| 丁香六月激情国产| 久久AV电影| 五月天婷婷一起草| 国产VA播放| 深夜男女福利刺激影院一区完整| 五月丁香成年黄色| 五月丁香婷婷啪啪综合| 婷婷五月丁香激情图片| 欧洲综合一区| 五月天网址在线刘玥| a网站免费观看| 大香网伊人久久综合| 婷婷五月天美女21p| 五月丁香六月婷婷在线播放| 婷婷丁香五月天狠狠| 五月丁香色婷婷伊人| 97自拍视频在线| 九九色影院| WWW.久久久久久久| www.精品99| 久久丝袜婷婷| 99操久久| 蜜臀丁香黄色婷婷五月天| 五月丁香爱婷婷深深| 日本色道视频网站| 中文久久久人妻| 激情精品久久| 九九视频精品在线免费| 久久精品永久免费| 亚洲最大视频| 五月丁香琪琪| 九九婷婷网五月天| 另类少妇人与禽zOZZ0性伦| 狠狠插狠狠插| 成人做爰高潮A片免费视频| 久热在线中文字幕色999舞| 精品影院| 99视频在线看| 五月玖玖| 99激| 丁香婷婷色情社区成人小说| 91碰在线| 丁香六月婷婷久久综合| 久久精品熟女亚洲AV麻豆| 五月丁香婷婷狠狠操| 亚洲传媒在线观看| 午夜成人综合| 丁香五月婷婷88在线| 欧美丁香五月天| cc精品国产性传播| 五月丁香久| 婷婷久久综合| 国产午夜成人AV在线播放| 婷婷五月综合免费在线| 狠狠第四色| 国产伦理精品高清在线观看网站一区二区 | 天天激情综合| 久久婷婷五月综合伊人| AV在线中文| 超碰国产在线| 婷婷五月成人社区| 五月丁香日本片| 五月开心婷婷| 中文字幕AV网址| 涩涩涩五月天| 韩国不卡AC视频| 日韩无码成人电影| 五月天色网站| www.久久久久| 亚洲无码性爱| 丁香五月天在线观看视频| 综合五月天天天天天五月| 国产精品色婷婷久久久精品| 性无码专区无码| 综合久久首页| 久久国产精品乱子伦_靑青草…| 丁香五月天的网址。| 激情亚洲婷婷| 97婷婷久久丁香| 天天做天天要天天爱| 美英法精品无码免费视频| 丁香五月婷婷五月天| 91狠狠综合久久久| 偷拍91九色| 天天爽天天做| 少妇高潮A片无套内谢麻豆传| 激情五月婷婷她| 久久久久久久综合狠狠综合| www.狠狠| 精品国婬伦V无码久久久| 婷婷五月天成人动漫| 五月婷婷丁香五月婷婷丁香| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 超碰色色综合| 26uuu欧美激情另类| 99在线精品视频| 日韩欧洲亚洲| 九月丁香八月婷婷加勒比| 色五月婷婷操逼| 五月成人网站| 天天综合网~91综合网| 亚洲人人操BD| 激情五月丁香五月综合| 亚洲天堂AV免费片| 依人大香蕉| 婷婷色五月天色| 26uuu激情五月天| 99色免费观看全部| 欧美日本99| 激情黄色小说五月天| 性做爰1一7伦| 婷婷六月丁香综合| 色色色综合网| 色五月婷婷天天干| 少妇性按摩无码中文A片| 久久激情五月婷婷| 中文字幕成人| 丁香五月天啪啪| 久久久性爱视频| 丁香五月综合婷婷| 99热这里全都是精品| 日韩 中文 欧美| 天天肏在线观看| 人人插9| 看全色黄大色大片| 超碰男人色| 亚洲AV成人精品日韩在线播放| 五月天婷婷狠狠| 九九热婷婷| 五月丁香少妇| 亚洲激情婷婷| 99久99热| 久久看九九90| 丁香五月天AV| 1024亚洲| 色色a| 久久婷婷六月天| 99色色| wwW天天干| 疯狂做受XXXX高潮A片| 五月激激网w'w'w| 熟女人妻一区二区三区免费看| 九九热视频网站| 202丰满熟女妇大| 五月六月播婷婷| 午夜天堂一区人妻| 丁香婷婷视频一区二区| 我想看国产大学生口爆吞精的视频| 婷婷伊人五月天| 婷婷六月综合基地| 五月天婷婷久久| 开心五月婷婷激情网| 丁香五月狠狠在线观看| 99性色| 五月丁香六月激情综合| 拍真实国产伦偷精品| 先锋av性爱成人电影| 激情综合丁香| 成人婷99最新| 大狠狠在线| 久久五月天丁香花| 五月天色色网站| 激情五月天婷婷激情| 色婷丁香91| 五月丁香婷婷爱| 秋霞免费三级片| 人妻体体内射精一区二区| 九九热这里只有精品9| 国产色视频网站2| 丁香六月久久| 天天天摸夜夜夜玩| 久久婷狠狠色| 亚洲精品国产A久久久久久| 丁香五月天电影| 丁香五月网站| 婷婷五月天首页激情| 91啪啪视频| 久久综合婷婷| 五月天怕怕| 99热这里只有精品8| 久久久久思思热| 色综合久久天天综合网| 综合99在线| www.五月天| 九九热在线精品| 五月天婷婷久久日| 玖玖婷婷视频| 丁香婷婷浪潮AV久久综合| 久久人人看| 欧美婷婷五月天综合| 久青操| 婷婷在线网| 99热首页| 99丁香五月婷| 草逼大片| 九九热在线观看视频网站| 色色色色色热| 国产操B视频| 开心五月婷婷伊人| 婷婷五月天成人| 天天色丁香| 亚洲va欧美va天堂v国产综合| 玖玖在线资源视频| 国产激情视频在线观看| 婷婷六月色情| 成人资源在线| 婷婷五月乱交换| 在线观看国产高清视频免费网站| 亚洲五月婷婷| 日韩在线99| 99热这里有精力| 五月停停直播| 色欲香综合网| 另类图片五月天婷婷| 综合色99| 97视频.干com| 狠狠综合网| 七七色色综合| 色婷婷91| 色五月自偷自拍婷婷婷婷| 午夜福利成人AV91| 亚洲永远av在线播放| 情欲禁地| 久99999热视频在线观看免费| 激情五月影院| 公的粗大挺进了我的密道| 天天色宗合| 九九九色综合| 在线色色| 色综合五月天| 色区久久| 8090在线影视少妇| 国产XXXX搡XXXXX搡麻豆| 天堂伊人干| 久久一级AV| 香蕉久久av一区二区三区| 99热国产| 婷婷丁香六月| chaopengdaxiangjiao| 666555。COm毛片| 久久五月天激情| 色综合激情图区| 色婷婷第四色| 97干在线播放| 色综合激情| AV激情五月| 色综合色综合色综合高潮| 国产寻花在线| 精品草原久久视频| 婷婷五月天视频| 色色五月婷| 伊人久久艹| 欧美成人精品三区综合A片| 99热这里有精品| 日逼影音先锋男人AV资源站| 99热99在线精品| 9久热在线视频精品| 五月婷婷丁香| 天堂五月婷婷| 黄色一级影片| 99久久99久久综合| 色婷婷狠狠久久综合五月| 色色网91| 秋霞午夜理论| 婷婷五月天在线综合| 亚洲综合色网| 99无码精品| 亚洲人成网站999综合| 久久婷婷丁香五月宗合| 五月天色色激情综合| 爱草视频在线| 97久久精品| 久久丁香五月婷婷| 丁香五月天亚洲综合| 九九亚洲综合| 婷婷五月美女直播| www.操.com| av不卡网站| 久久婷婷色色| 五月天激情亚洲| 五月丁香综合激情| 五月丁香久久综合91| 大香蕉伊人爱在线| 996日日爱| 九九这里都是精品| 五他月天啪啪啪| 久99久视频| 色五月婷婷亚洲| 日本九九九九| 五月天停停日日| 色欲日日躁| 色欲色香综合网| 五月色情精品| 99久久66| 色色五月天婷婷丁香| 野战J办公桌椅H| 91丨九色丨高潮丰满日本| 亚洲瑟瑟精品在线| 99热18| 啪啪操超碰| 婷婷五月色网| 99热在线观看| 超碰人人91| xxx.色婷婷| 在线理论片| 97干在线| 色激情五月| 婷综合六月| 好好干av| 婷婷色色五月天| 婷婷导航| 大香蕉婷婷五月| 免费色婷婷| 成人五月天在线视频在线观看| www夜夜| 97色永久免费视频| 五月天色丁香| 日韩AV在线影片| 六月丁香婷啪射| 99视频只有精品| 日本99在线| 中文AV网| www.五月天色色色| 婷婷五月天AV| 91欧美日韩| 狠狠狠狠狠狠狠狠草| 国产精品99久久久久久久女警| 97碰久久| 狠狠色五月| 五月婷婷丁香大陆免费| 美欧成人视频| 99精品高潮| 综合一本道| 久久九九一區| 九九99精品视频在线观看| 六月丁花香啪啪激情欧美| 欧美丁香六月在线观看视频| 三男玩一女三A片| 天天天操天天天爰| 99综合网| 开心五月激情站| 碰99在线| 亚洲成人在线五月天| 色婷婷狠狠禁久久| 国产精品美女| 丁香五月六月综合激情| 婷婷玖玖五月天| 日本毛片内射| 丁香婷婷网| 99色在线观看| 色99在线观看| 五月婷综合性中心| 九九婷婷热| 久久婷婷五月天综合| 五月丁香另类网| 色丁香五月婷婷| 91精品婷婷国产综合| 日韩在线99| 日本3级片偷拍网站| 久久99热这里只频精品6学生| 五月色亭丁香| 五月日韩中文字幕| 丁香六月婷| 久操无码| wwwss在线观看| 综合在线丁香五月| 久啪欧美| 久久久婷| 婷婷一本和五月丁香| 欧美啪啪网| 97色婷| 密臀久久| 日本英国美国欧美亚洲国产精亚洲日韩精品在线观看 | 五月天久久激情| 色墦五月丁香| 丁香五月综合图片在线观看| 亚洲天堂碰碰婷婷| 色色色婷婷五月| 五月婷婷就去色| AV在线免费观看不卡| 激情五月天婷婷在线网址发给我| 99爱爱| 江苏少妇性BBB搡BBB爽爽爽| 久草五月天| 五月天堂色| 激情综合网激情五月婷婷| 综合婷婷五月天| 看黄的网站18禁| 婷婷五月丁香基| 九色七七| 婷婷五月天影视| 2013AV天堂| 亚洲精品V天堂中文字幕| 色色色免费视频| 综合网色| 激情九月丁香婷婷| 亚洲无码成人| www.亚洲激情| 综合色99| 97人妻碰碰碰久久| 激情久久久| 国产精品VA在线| 日在线V视频在线播放| 久久91久久91色欲精品| 中文成人在线| 日日干夜夜干| 色婷婷六月天在线| 大香蕉AV在线| 9久久网| 色婷婷很很丝袜| 99精品在线观看| 国产婷婷色综合AV蜜臀AV| 婷婷五月天,影院| 五月天婷婷基地综合网| 九九热狼人| 99热官网| 婷婷99狠狠| 五月丁香色婷婷| 另类激情五月| 婷婷五月丁香五月丁香| 97婷婷丁香| 九九色video| 亚洲狠狠色丁香婷婷综合久久| 丁香婷婷色五月| www.久热| 久久在线人妻| 天天综合色丁香| 婷婷五月天久久久| 天天干,天天操,天天射| 亚洲成AV人片在线观看| 日韩AV免费电影在线播放| 丁香五月五月婷婷| 婷婷丁香宗合888| 五月天婷婷视频30| 狠狠干五码| 激情六月五月婷婷综合网| 99视频久久| 日韩影院三级| 在线网黄| 婷婷九月亚洲| 久久总和99| 九九热在线99| 丁香五月婷婷亚洲激情四射| 九九九九无码| 久久38视频| 91妻人人爽人人看片| 久久精品A片777777| 成AV人片一区二区三区久久| 五月丁香在线观看| 婷综合| 丁香五月人妻| 五月天婷婷操逼视频| 无月播播激情在线观看视频| 久久精品亚洲热| 夜夜做夜夜愛| 五月天另类图片| 国产在这里只有精品| 五月天国产婷婷精品视频在线| 激情5月天天天| 五月丁香婷婷俺| 五月婷婷六月综合| 99免费在线| 97在线刺激| 97人人操在线| 丁香五月综合| 成功精品影院| 97caop| 在线超碰免费| 五月天婷婷社区久久综合| 日韩 中文 欧美| 亚洲综合久| 婷婷五月丁香在线观看| 色综合性视频| 五月丁香婷婷俺| 久久婷五月综合| 五月婷婷无码| 婷婷久草| 亚洲国产黄色电影| 婷婷内射视频在线| 日本三级黄色大片| 六月婷婷色宗合| 色婷婷色五月天| 开心五月激情网| 婷婷丁香人妻天天爽| 激情五月天色播| 97啪在线观看视频| 亚洲色激情| 久久这里只精品66| 这里只有精品99www| 色婷婷五月天久久| 91天天操天天干天天射| 99自拍视频在线| yiqicaoav| 国产67194| 婷婷色系婷色| 九九热精品视频在线观看| 欧洲亚洲精品| 淫视馆av三区| 亚洲婷婷视频| 日日撸日日操| 站长推荐无码播放| 激情久久伊人| 99视频在线播放大全| 99热只有国产在线精品| 久久五月天网| 中文字幕在线免费观看视频| 啪啪五月综合| 77799热| 国产成人99久久亚洲综合精品| 色色五月婷| 91麻豆国产三级精品福利在线观看| 免费看片操逼| 九九视频精品在线免费| 殴美综合激情五月天免费视频| 丁香婷婷影院| 999久久久国产精品| 色婷婷成人在线| av人人干| 国产精品成av人在线视午夜片| 91色逼| 月婷婷亚洲| 大香蕉五月天| 五月丁香激情综合网官网| 小视频在线亚洲| 五月婷在线| 久久久一级AAA| 激情五月天在线观看色婷婷| 精品久久久人妻| 亚洲综合激情五月久久| 欧美在线操| 噜噜色com| 激情99| 五月丁香六月激情综合网| 九九热在线观看视频| 国产成人精品一区二三区熟女在线| 伊人婷婷综合| 热99这就是精品视频| 成人美女网| 丁香六月婷婷久久综合| 天天综合网站| 国产中文字幕在线视频免费观看| 狠狠色综合777| 九九热超碰| 九色91视频| www.狠狠艹| 最近韩国日本免费高清观看| 日韩欧美五月丁综合| 天天爱天天秀天天做| 99婷婷色| 天天草天天日| 中文字幕无码人妻少妇免费视频| 他改变了拜占庭| 五月婷婷色播| 久久婷婷六月综合综合| 99久久玖玖| 不卡在线视频| 天天更新天天亚洲| 五月丁香激情综合| 色区久久| 另类小说色婷婷| 五月天婷婷久久| 五月婷婷激情| 色婷婷色99国产综合精品| 麻豆雪千夏| 婷婷99视频精品| 亚洲人人操| 91天堂网综合| 狠狠色丁香婷婷久久综合| 超碰在线观看caop| 99秘 在线| 玖玖@三月天天丁香婷婷| 六月婷婷国产| 激情五月天婷婷丁香| 五月婷婷丁香瑟瑟视频| 99国产97在线,| 婷婷丁香五月天激情| 超碰京东热av男人的天堂| 五月婷婷影院| 91要啪| 丁香五月网址| 2015好吊操| 婷婷五月天AV| 蜜桃婷婷丁香| 97在线日韩| 99这里只有精品视频| 色婷婷9| 久久综合中文| 国产精品五月丁香| 亚洲三A| 五月天 另类图片| 久久性刺激| 91九色精品熟女内射| 97操碰在线视频| 99无码黄色视频| 99热6这里之有精品| 欧美一级a | 五月婷婷综合潮喷| Caoub青青超碰 | 91精品综合久久久久久五月丁香| 丁香五月婷婷网| 丁香五月冃欧美| 99人妻碰碰碰久久久久| 五月丁香五月婷婷| 五月婷婷 六月丁香| 精品久9| 91热在线| 就99这里只有精品| 热996精品在线观看| caop在线视频| 久久久久久久久久久久久久人妻视频| 婷婷五月丁香青青草在线| 99热这里只有精品首页| 欧美日本黄色| 婷婷精品| 激情五月婷婷丁香综合网| 97精品欧美91久久久久久久| 五月丁香大香蕉| 婷婷狠狠操| 五月丁香六月色婷婷综合五月天| 日本不卡高字幕在线2019| 天天日天天操心| 激情六月下句是什么| 99视频在线观看视频| 美女五月天| 五月涩涩网| 六月丁香久久| 久草丁香婷婷1024| 亚洲精品大片| 丁香成人色情五月天| 久九色| 狠狠色婷婷色| 五月天伊人| 超碰在线综合| 丁香五月天人体| 夜夜躁婷婷AV| 亚洲电影在线观看| www.五月天色色.com| 婷婷丁香五月天中文字幕| 啪啪婷婷五月天激情| 91人妻人人操| 五月丁香六月婷婷网| 五月花激情| 成人五月天在线视频在线观看| 婷婷丁香综合| avh片在线观看| 色五月婷婷基地| 久久婷狠狠色| 这里只有精品免费观看网占| 久色网址| 日韩黄色网络| 91制片厂久久久国产电影| 九月婷婷| 91婷婷色五月| 色婷婷日本| 丁香五月丁香伊人| 亚洲AV成人在线| 日本久久爽| 二区成人视频| 激情婷婷丁香| 激情深爱五月天| 久久草大香蕉| 日日噜噜夜夜狠狠久久丁香六月| 婷婷五月色亚洲| site:minyis.com| 91视频一起草| 五月天激情久久| 久久9热综合| 午夜激情四射影院| av高清无码| 少妇性按摩无码中文A片| 草草视频91| 丁香五月六月婷婷综合| 婷婷激情5月| 中文字幕簧片| 五月丁香婷中文字幕 | 婷婷成人av| 五月婷婷久草| 欧美三9久九观看| 91超级碰| 99在线观看| 99婷婷国产最新视频| 无码动漫av| 操一操干一干| 亚洲五月婷婷| 久久丁香五月天| 日本女人久久| 久久色9| 色色激情网| 成人一级片| 伊人91| 九九色精品| 99欧美| 夜夜爽天天爽| 成人精品在线| 欧美激情综合色综合啪啪五月| 婷婷综合在线| 色播五月丁香| 欧美性猛交 XXXX 乱大交| 超碰成人公开| 五月天天丁香婷婷| 东京热人妻一区二区三区在线| 拍色综合| 婷婷丁香成人五月天| 婷婷色色欧美| 五月天激情四射| 亚洲色涩视频| 五月天婷婷色小说| 丁香六月激情蜜桃| 六月婷婷影院| 人人干av| 亚洲色夜| 久久婷婷亚洲| 无码激情AAAAA片-区区| 色色色丁香| 欧美日本高清视频99| 色色色国产| 成人五月天在线观看| 亚洲、热| 色欲色香伊人| 中文激情网| 久久激情五月| 91在线看片| 视频一二区| sS丁香五月婷婷| 深爱五月天 开心网| 激情综合五| 99精品在这里| 久久久久久久久久久久久久久久一道本| 久久月天堂| 丁香婷婷久久 | 99热在线免费| 日韩另类在线观看| 色婷婷呢狠禁久禁| 五月婷久久| 午夜性做爰电影| 伊人热婷婷| 爆乳熟妇一区二区三区爆乳照片| 久久99热这里| 五月激情婷婷开心| 国产密乳av一区二区三区四区| www久久久| 亚洲日韩操B| 色婷婷欧美| 五月婷婷久久内射| 亚州操操| 国产一区二区三区影院| 久久精品系列| 免费九九热| 这里只有精品免费视频| 99热大香蕉| H亚洲| 激情五月天综合网| 日韩AV色色色| 女人被男人吃奶到高潮| AA片在线观看视频在线播放| 国产在线激情视频| 精品久久99码| 国产精品久久久丁香五月八戒视频| 婷婷五月天激情网| 亚洲精品V天堂中文字幕| 五月天婷婷免费| 亚洲丁香婷婷五月天综合色| 五月综合激情网| 精品一二三区久久AAA片| 五月天丁香综合久久国产| 婷婷成人丁香色情基地30 | 超碰在线中文字幕| 五月婷婷色欲| 99九九在线| 五月丁香婷婷基地| 成人综合网站| www.久久爱| 五月婷婷成人| 五六月婷婷久久| 五月天婷a在线| 99热国产| 久久婷婷五月综合色天| www婷婷色情网| 91天天操天天干天天射| 久久狠婷婷| 玖玖精品资源| 99国产精品久久久久久久久久久| 91AV视频| 色99热| 欧美熟女99| 婷婷婷久久久| 色香欲综合| 日本视频不卡123区| 天天爽夜夜爽夜夜爽精| 丁香五月手机在线| 视频1区2区| 五月成人综合| 久久免费高| 欧美丁香六月在线观看视频| 色五月婷婷综合| www.五月天婷婷| 五月天激情综合| 91色欲综合| 天天爽天天做| 人操91在线| 人妻VideOssS人妻| 黃色三级三级三级三级 qixing300.shrkbk.com www.jinbozs.com tianmiaosw.com | 五月婷婷乱| 97精品人人A片免费看| 丁香五月在线人妻| 日日撸夜夜操| 全亚洲最大的婷婷五月天网站COM| 综合色影| 婷婷人人操| 超碰高清在线| 五月丁香六月色| 五月天停婷基地| 色色免费网站| 亚洲激情视频网|