wav格式的音頻壓縮,WAV 轉 MP3 VBR 體積縮減比為 13.5%、多個 MP3 格式音頻合并為一個、文件夾存在則刪除重建,不存在則直接建立

🥇 版權: 本文由【墨理學AI】原創首發、各位讀者大大、敬請查閱、感謝三連
🎉 聲明: 作為全網 AI 領域 干貨最多的博主之一,?? 不負光陰不負卿 ??

0-9

文章目錄

  • 問題一:wav格式的音頻壓縮為哪些格式,網絡傳輸給用戶播放會快
    • 回答
      • 一、精選推薦方案
        • 1. **Opus**(首選方案)
        • 2. **AAC-LC**(兼容性最優)
        • 3. **MP3 VBR**(最廣泛支持)
      • 二、性能對比數據(WAV→目標格式) - 體積壓縮比
      • 三、場景化參數指南
        • 語音場景(電話級音質)
        • 音樂場景(CD級音質)
      • 四、進階優化技巧
      • 五、格式選擇決策樹
      • 六、實時監控建議
    • 使用 ffmpeg 工具 將 WAV 音頻格式進行轉換命令總結
    • WAV 與 m4a、mp3、opus 格式音頻大小實測對比
      • WAV 與 m4a、mp3、opus 格式音頻 碼率、聲道、采樣率分析
      • 碼率 大小,很大程度影響了 音頻體積大小
  • 問題二 : MP3格式音頻,碼率、采樣率、聲道數 可以設置為多少,音質也不會下降太多 ?
    • 回答
      • 1. 核心參數推薦組合
      • 2. 參數詳解與優化指南
        • **? 碼率(Bitrate)**
        • **? 采樣率(Sample Rate)**
        • **? 聲道數(Channels)**
      • 3. 黃金參數組合
  • 多個 MP3 格式音頻合并為一個
    • 文件夾存在則刪除重建,不存在則直接建立
    • FFmpeg : 管道拼接的方式 【目前采用】
    • FFmpeg : 創建臨時文件列表(FFmpeg專用格式)
  • 📙 精選專欄

問題一:wav格式的音頻壓縮為哪些格式,網絡傳輸給用戶播放會快

  • 有請 deepseek 來告訴我們答案

回答

以下是針對網絡傳輸優化的音頻格式轉換方案,按優先級排序:

一、精選推薦方案

1. Opus(首選方案)
ffmpeg -i input.wav -c:a libopus -b:a 48k -vbr on output.opus

優勢

  • 超低延遲(最小5ms)
  • 最佳壓縮率(相同音質下體積比MP3小30%)
  • 支持動態碼率調節(6kbps到510kbps)
  • 完美支持WebRTC實時傳輸

適用場景:視頻會議、直播、在線教育

2. AAC-LC(兼容性最優)
ffmpeg -i input.wav -c:a aac -b:a 64k -profile:a aac_low output.m4a

優勢

  • 100%兼容iOS/Android
  • 支持HLS流媒體協議
  • 可硬件解碼降低設備功耗

適用場景:移動端APP、短視頻平臺

3. MP3 VBR(最廣泛支持)
ffmpeg -i input.wav -c:a libmp3lame -q:a 2 output.mp3

優勢

  • 兼容所有老舊設備
  • q=2參數對應170-210kbps動態碼率
  • 支持ID3元數據標簽

適用場景:音樂網站、播客平臺


二、性能對比數據(WAV→目標格式) - 體積壓縮比

格式碼率體積縮減比解碼CPU占用瀏覽器支持率
WAV1411kbps100%5%100%
Opus48kbps3.3%8%92%
AAC-LC64kbps4.5%10%100%
MP3 VBR190kbps13.5%15%100%

三、場景化參數指南

語音場景(電話級音質)
ffmpeg -i input.wav -c:a libopus -b:a 16k -compression_level 10 \-application voip output.opus
  • 單聲道模式
  • 采樣率降為16kHz
  • 開啟語音優化算法
音樂場景(CD級音質)
ffmpeg -i input.wav -c:a aac -b:a 192k -cutoff 20000 \-movflags +faststart output.m4a
  • 保持44.1kHz采樣率
  • 開啟高頻保留(cutoff)
  • 添加MP4快速播放頭

四、進階優化技巧

  1. 分片傳輸
# 使用MP4分段
ffmpeg -i input.wav -c:a aac -f segment -segment_time 10 output_%03d.m4s
  1. 預加載策略
<audio preload="metadata"><source src="audio.opus" type="audio/ogg; codecs=opus">
</audio>
  1. 壓縮加速
# 啟用多線程編碼
ffmpeg -threads 4 -i input.wav -c:a libopus -b:a 48k output.opus

五、格式選擇決策樹

蘋果設備
老舊設備
現代瀏覽器
需要WebRTC支持?
Opus
目標設備類型?
AAC
MP3
Opus

六、實時監控建議

部署音頻傳輸質量監控:

# 使用Web Audio API檢測卡頓
const audioCtx = new AudioContext();
const analyser = audioCtx.createAnalyser();
analyser.addEventListener('audioprocess', (e) => {if(e.timeStamp - lastTime > 200) {console.warn('Audio jitter detected');}
});

最終推薦方案:優先使用Opus格式,配合AAC作為兼容性備選。對于音樂類內容推薦AAC 192kbps,語音場景使用Opus 32kbps,可兼顧音質與傳輸效率。

使用 ffmpeg 工具 將 WAV 音頻格式進行轉換命令總結

1. Opus(首選方案)

ffmpeg -i input.wav -c:a libopus -b:a 48k -vbr on output.opusffmpeg -i 20250226_102045_416_1.wav -c:a libopus -b:a 48k -vbr on output.opus

2. AAC-LC(兼容性最優)


ffmpeg -i input.wav -c:a aac -b:a 64k -profile:a aac_low output.m4a

3. MP3 VBR(最廣泛支持)

ffmpeg -i input.wav -c:a libmp3lame -q:a 2 output.mp3

WAV 與 m4a、mp3、opus 格式音頻大小實測對比

原因是我在音頻轉換時,指定的碼率不一致

du -sh *1.2M    20250226_112605_801_1.wav
764K    20250226_112605_801_2.wav
840K    20250226_112605_801_3.wav
652K    20250226_112605_801_4.wav
948K    20250226_112605_801_5.wav
952K    20250226_112605_801_6.wav232K    20250226_141132_332_1.m4a
148K    20250226_141132_332_2.m4a
164K    20250226_141132_332_3.m4a
128K    20250226_141132_332_4.m4a
184K    20250226_141132_332_5.m4a
188K    20250226_141132_332_6.m4a100K    20250226_141716_930_1.mp3
64K     20250226_141716_930_2.mp3
72K     20250226_141716_930_3.mp3
56K     20250226_141716_930_4.mp3
80K     20250226_141716_930_5.mp3
80K     20250226_141716_930_6.mp3224K    20250226_142256_236_1.opus
140K    20250226_142256_236_2.opus
156K    20250226_142256_236_3.opus
120K    20250226_142256_236_4.opus
180K    20250226_142256_236_5.opus
176K    20250226_142256_236_6.opus

WAV 與 m4a、mp3、opus 格式音頻 碼率、聲道、采樣率分析

代碼如下

"""Audio format analysistime python audio_format_analysis.py
"""import os
import subprocess
import csv
from collections import defaultdictdef get_audio_metadata(file_path):"""使用ffprobe獲取音頻元數據"""cmd = ['ffprobe', '-v', 'error','-select_streams', 'a:0','-show_entries', 'stream=channels,sample_rate : format=bit_rate,duration','-of', 'default=noprint_wrappers=1',file_path]try:result = subprocess.run(cmd, capture_output=True, text=True, check=True)metadata = {}for line in result.stdout.split('\n'):if '=' in line:key, value = line.split('=', 1)metadata[key] = valuereturn {'channels': int(metadata.get('channels', 0)),'sample_rate': int(metadata.get('sample_rate', 0)),'bit_rate': int(metadata.get('bit_rate', 0)),'duration': float(metadata.get('duration', 0))}except Exception as e:print(f"分析失敗: {file_path} - {str(e)}")return Nonedef analyze_audio_directory(directory):results = []for filename in os.listdir(directory):if filename.lower().endswith(('.wav', '.m4a', '.mp3', '.opus')):file_path = os.path.join(directory, filename)metadata = get_audio_metadata(file_path)if metadata:file_size = os.path.getsize(file_path) / 1024  # KBresults.append({'filename': filename,'format': os.path.splitext(filename)[1][1:].upper(),'size_kb': round(file_size, 1),'channels': metadata['channels'],'bit_rate_kbps': round(metadata['bit_rate'] / 1000),'duration_sec': round(metadata['duration'], 1),'sample_rate': metadata['sample_rate']})return resultsdef save_to_csv(data, output_file):with open(output_file, 'w', newline='') as csvfile:fieldnames = ['filename', 'format', 'size_kb', 'channels', 'bit_rate_kbps', 'duration_sec', 'sample_rate']writer = csv.DictWriter(csvfile, fieldnames=fieldnames)writer.writeheader()for row in data:writer.writerow(row)if __name__ == '__main__':# 使用示例audio_dir = './tts_save_audios'  # 替換為實際路徑output_csv = 'audio_analysis.csv'analysis_data = analyze_audio_directory(audio_dir)save_to_csv(analysis_data, output_csv)# 打印統計摘要format_stats = defaultdict(list)for item in analysis_data:format_stats[item['format']].append(item)print("\n格式統計摘要:")for fmt, items in format_stats.items():avg_bitrate = sum(i['bit_rate_kbps'] for i in items) / len(items)avg_channels = sum(i['channels'] for i in items) / len(items)print(f"{fmt}格式:")print(f"  ? 平均碼率:{avg_bitrate:.1f} kbps")print(f"  ? 平均聲道數:{avg_channels:.1f}")print(f"  ? 文件數量:{len(items)}")print("  ? 采樣率分布:" + ', '.join(str(i['sample_rate']) for i in items))

碼率 大小,很大程度影響了 音頻體積大小

輸出如下

time python audio_format_analysis.py格式統計摘要:
M4A格式:? 平均碼率:74.5 kbps? 平均聲道數:1.0? 文件數量:6? 采樣率分布:24000, 24000, 24000, 24000, 24000, 24000
WAV格式:? 平均碼率:384.0 kbps? 平均聲道數:1.0? 文件數量:6? 采樣率分布:24000, 24000, 24000, 24000, 24000, 24000
MP3格式:? 平均碼率:32.0 kbps? 平均聲道數:1.0? 文件數量:6? 采樣率分布:24000, 24000, 24000, 24000, 24000, 24000
OPUS格式:? 平均碼率:70.7 kbps? 平均聲道數:1.0? 文件數量:6? 采樣率分布:48000, 48000, 48000, 48000, 48000, 48000real    0m0.936s

問題二 : MP3格式音頻,碼率、采樣率、聲道數 可以設置為多少,音質也不會下降太多 ?

  • 核心答案:【| 語音錄音 | 64kbps VBR / 32kHz / Mono | 清晰人聲
    | 0.5MB/分鐘 |】

回答

在保證音質的前提下優化MP3文件體積時,參數設置建議如下(附技術原理說明):


1. 核心參數推薦組合

參數類型推薦值適用場景
碼率128-192kbps (CBR) 或 VBR V0-V2音樂/語音通用
采樣率44.1kHz(保持源文件采樣率)所有場景
聲道數立體聲(Stereo) / 單聲道(Mono)音樂用立體聲,語音用單聲道

2. 參數詳解與優化指南

? 碼率(Bitrate)
  • 128kbps:基礎閾值(CD音質的1/11體積),人耳可感知輕微細節損失
  • 160kbps:平衡點(適合流行音樂),文件體積比128kbps大25%
  • 192kbps:準無損閾值(古典音樂適用),高頻保留更完整
  • VBR模式:動態碼率(推薦V0=~245kbps峰值),比CBR節省30%體積

技術原理

MP3采用聽覺掩蔽效應編碼,當碼率≥128kbps時:

  • 保留20Hz-16kHz頻率范圍(人類聽覺范圍20Hz-20kHz)
  • 16kHz以上的高頻細節會逐漸丟失

? 采樣率(Sample Rate)
  • 44.1kHz:CD標準(最高還原22.05kHz聲音)
  • 48kHz:影視工業標準(不建議轉換已有音頻)
  • 32kHz:電話語音質量(文件體積減少27%)

優化技巧
保持原始采樣率,避免重復采樣轉換造成的相位失真。


? 聲道數(Channels)
  • 立體聲→單聲道:文件體積直接減半(適合播客/語音)
  • 聯合立體聲(Joint Stereo):比普通立體聲節省15%體積

音質對比
音樂用立體聲(空間感保留),語音用單聲道(無感知差異)


3. 黃金參數組合

場景推薦參數音質評價文件體積對比
音樂存儲192kbps CBR / 44.1kHz / Stereo接近CD品質5MB/分鐘
語音錄音64kbps VBR / 32kHz / Mono清晰人聲0.5MB/分鐘
移動設備128kbps CBR / 44.1kHz / Stereo通用兼容方案3MB/分鐘
高保真存檔320kbps VBR / 48kHz / Stereo專業級保留7.5MB/分鐘

最終結論
對大多數用戶而言,192kbps VBR + 44.1kHz + 立體聲是最佳平衡點,可在保持90%以上音質的同時,將文件體積控制在原始WAV的10%左右。

多個 MP3 格式音頻合并為一個

文件夾存在則刪除重建,不存在則直接建立

import os
import shutilres_folder = 'results'
if os.path.exists(res_folder):shutil.rmtree(res_folder)	
os.makedirs(res_folder)

FFmpeg : 管道拼接的方式 【目前采用】

import os
import subprocess
from datetime import datetime"""
# 管道拼接的方式要求輸入的音頻,通道數、碼率、采樣率等 指標格式一致type(concat_input) : <class 'str'>concat_input : tts_save_audios/20250226_180203_807/20250226_180203_807_1.mp3|tts_save_audios/20250226_180203_807/20250226_180203_807_6.mp3
"""# ---------- 關鍵修復步驟 ----------
def merge_audios_with_ffmpeg(input_files, output_file):"""使用FFmpeg合并音頻文件"""# 1. 檢查所有輸入文件是否存在for file in input_files:if not os.path.exists(file):raise FileNotFoundError(f"音頻文件不存在: {file}")# 2. 轉義路徑中的特殊字符(如空格、括號等)# 將路徑中的反斜杠統一為正斜杠(避免Windows路徑問題)escaped_files = [f.replace('\\', '/') for f in input_files]concat_input = '|'.join(escaped_files)print(f'\n?type(concat_input) : {type(concat_input)} \n?concat_input : {concat_input}\n')# 3. 構建FFmpeg命令(保持編碼一致)cmd = ['ffmpeg','-y',  # 覆蓋輸出文件'-i', f'concat:{concat_input}','-acodec', 'copy',  # 直接復制流,不重新編碼'-loglevel', 'error',  # 僅輸出錯誤信息output_file]# 4. 執行并捕獲錯誤詳情try:result = subprocess.run(cmd,stderr=subprocess.PIPE,stdout=subprocess.PIPE,text=True  # 兼容Python 3.7+)if result.returncode != 0:raise RuntimeError(f"FFmpeg合并失敗: {result.stderr}")except Exception as e:raise RuntimeError(f"合并異常: {str(e)}")if __name__ == "__main__":sorted_audio_list = ['tts_save_audios/20250226_180203_807/20250226_180203_807_1.mp3', 'tts_save_audios/20250226_180203_807/20250226_180203_807_2.mp3', 'tts_save_audios/20250226_180203_807/20250226_180203_807_3.mp3', 'tts_save_audios/20250226_180203_807/20250226_180203_807_4.mp3', 'tts_save_audios/20250226_180203_807/20250226_180203_807_5.mp3', 'tts_save_audios/20250226_180203_807/20250226_180203_807_6.mp3']# 獲取當前時間(含微秒)now = datetime.now()timestamp = now.strftime("%Y%m%d_%H%M%S_%f")[:-3]save_dir = 'tts_save_audios'# 確保目錄存在(自動創建多層目錄)os.makedirs(save_dir, exist_ok=True)output_merged_mp3 = os.path.join(save_dir, f'{timestamp}.mp3')# 調用合并函數merge_audios_with_ffmpeg(sorted_audio_list, output_merged_mp3)print(f"\n?音頻合并成功,保存至: {output_merged_mp3}")

FFmpeg : 創建臨時文件列表(FFmpeg專用格式)

import os
import subprocess
from datetime import datetimedef merge_audios_with_ffmpeg(input_files, output_file):"""使用FFmpeg合并音頻文件(修復版)"""# 1. 檢查所有輸入文件是否存在for file in input_files:if not os.path.exists(file):raise FileNotFoundError(f"音頻文件不存在: {file}")# 2. 創建臨時文件列表(FFmpeg專用格式)list_filename = "file_list.txt"with open(list_filename, "w", encoding="utf-8") as f:for file in input_files:# 轉義路徑中的特殊字符(統一使用正斜杠)file_escaped = file.replace("\\", "/")f.write(f"file '{file_escaped}'\n")# 3. 構建FFmpeg命令(使用 -f concat 和文件列表)# cmd = [#     'ffmpeg',#     '-y',                  # 覆蓋輸出文件#     '-f', 'concat',        # 指定concat格式#     '-safe', '0',          # 允許非安全路徑#     '-i', list_filename,   # 輸入文件列表#     '-c', 'copy',          # 直接復制流,不重新編碼#     '-loglevel', 'error',  # 僅輸出錯誤信息#     output_file# ]# 構建優化后的FFmpeg命令cmd = ["ffmpeg","-y",  # 覆蓋輸出文件"-f", "concat","-safe", "0","-i", str(list_filename),"-c:a", "libmp3lame","-b:a", "32k",  # 固定碼率模式"-ac", "1",  # 單聲道"-ar", "24000",  # 采樣率"-joint_stereo", "0",  # 禁用聯合立體聲"-compression_level", "0",  # 禁用額外壓縮"-write_xing", "0",  # 移除Xing頭"-id3v2_version", "0",  # 保留原始ID3標簽"-fflags", "+bitexact",str(output_file)]print(f'\n\n cmd : {cmd}\n\n')# 4. 執行并捕獲錯誤try:result = subprocess.run(cmd,stderr=subprocess.PIPE,stdout=subprocess.PIPE,text=True)if result.returncode != 0:raise RuntimeError(f"FFmpeg合并失敗: {result.stderr}")finally:# 無論成功與否,刪除臨時文件列表if os.path.exists(list_filename):os.remove(list_filename)if __name__ == "__main__":sorted_audio_list = ['tts_save_audios/20250226_180203_807/20250226_180203_807_1.mp3', 'tts_save_audios/20250226_180203_807/20250226_180203_807_2.mp3', 'tts_save_audios/20250226_180203_807/20250226_180203_807_3.mp3', 'tts_save_audios/20250226_180203_807/20250226_180203_807_4.mp3', 'tts_save_audios/20250226_180203_807/20250226_180203_807_5.mp3', 'tts_save_audios/20250226_180203_807/20250226_180203_807_6.mp3']# 獲取當前時間(含微秒)now = datetime.now()timestamp = now.strftime("%Y%m%d_%H%M%S_%f")[:-3]save_dir = 'tts_save_audios'# 確保目錄存在(自動創建多層目錄)os.makedirs(save_dir, exist_ok=True)output_merged_mp3 = os.path.join(save_dir, f'{timestamp}.mp3')# 調用合并函數merge_audios_with_ffmpeg(sorted_audio_list, output_merged_mp3)print(f"音頻合并成功,保存至: {output_merged_mp3}")

📙 精選專欄


  • 🍊 深度學習模型訓練推理——基礎環境搭建推薦博文查閱順序【基礎安裝—認真幫大家整理了】——【1024專刊】

計算機視覺領域 八大專欄、不少干貨、有興趣可了解一下

  • ?? 圖像風格轉換 —— 代碼環境搭建 實戰教程【關注即可閱】!
  • 💜 圖像修復-代碼環境搭建-知識總結 實戰教程 【據說還行】
  • 💙 超分重建-代碼環境搭建-知識總結 解秘如何讓白月光更清晰【脫單神器】
  • 💛 YOLO專欄,只有實戰,不講道理 圖像分類【建議收藏】!
  • 🍊 深度學習:環境搭建,一文讀懂

  • 🍊 深度學習:趣學深度學習

  • 🍊 落地部署應用:模型部署之轉換-加速-封裝

  • 🍊 CV 和 語音數據集:數據集整理

  • 🍊 點贊 👍 收藏 ?留言 📝 都是博主堅持寫作、更新高質量博文的最大動力!

9-9

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/72042.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/72042.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/72042.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MFC線程

創建線程 HANDLE m_hThread; m_hThread CreateThread(NULL, 0, save_snapshot, (LPVOID)this, 0, &iThreadId);開啟線程循環等待 DWORD WINAPI save_snapshot(LPVOID pVoid) {while (true){//持續循環等待事件到達。接收到事件信號后才進入if。if (::WaitForSingleObjec…

賦能農業數字化轉型 雛森科技助力“聚農拼”平臺建設

賦能農業數字化轉型&#xff0c;雛森科技助力“聚農拼”平臺建設 在數字化浪潮席卷各行業的今天&#xff0c;農業領域也在積極探索轉型升級之路。中農集團一直以“根植大地&#xff0c;服務三農”為核心&#xff0c;以“鄉村振興&#xff0c;農民增收”為目標&#xff0c;及時…

千峰React:Hooks(上)

什么是Hooks ref引用值 普通變量的改變一般是不好觸發函數組件的渲染的&#xff0c;如果想讓一般的數據也可以得到狀態的保存&#xff0c;可以使用ref import { useState ,useRef} from reactfunction App() {const [count, setCount] useState(0)let num useRef(0)const h…

Ubuntu20.04安裝Redis

1.切換到root用戶 如果沒有切換到root用戶的&#xff0c;切換到root用戶。 2.使用 apt install redis 安裝redis 遇到y/n直接y即可。 redis安裝好之后就自動啟動起來了&#xff0c;因此我們可以通過netstat -anp | grep redis命令來查看是否安裝成功。 6379是Redis的默認端…

鴻蒙-AVPlayer

compileVersion 5.0.2&#xff08;14&#xff09; 音頻播放 import media from ohos.multimedia.media; import common from ohos.app.ability.common; import { BusinessError } from ohos.base;Entry Component struct AudioPlayer {private avPlayer: media.AVPlayer | nu…

機器學習數學通關指南——泰勒公式

前言 本文隸屬于專欄《機器學習數學通關指南》&#xff0c;該專欄為筆者原創&#xff0c;引用請注明來源&#xff0c;不足和錯誤之處請在評論區幫忙指出&#xff0c;謝謝&#xff01; 本專欄目錄結構和參考文獻請見《機器學習數學通關指南》 正文 一句話總結 泰勒公式是用多…

游戲引擎學習第124天

倉庫:https://gitee.com/mrxiao_com/2d_game_3 回顧/復習 今天是繼續完善和調試多線程的任務隊列。之前的幾天&#xff0c;我們已經介紹了多線程的一些基礎知識&#xff0c;包括如何創建工作隊列以及如何在線程中處理任務。今天&#xff0c;重點是解決那些我們之前沒有注意到…

在MacOS上打造本地部署的大模型知識庫(一)

一、在MacOS上安裝Ollama docker run -d -p 3000:8080 --add-hosthost.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main 最后停掉Docker的ollama&#xff0c;就能在webui中加載llama模…

(八)Java-Collection

一、Collection接口 1.特點 Collection實現子類可以存放多個元素&#xff0c;每個元素可以是Object&#xff1b; 有些Collection的實現類&#xff0c;可以存放重復的元素&#xff0c;有些不可以&#xff1b; 有些Collection的實現類&#xff0c;有些是有序的&#xff08;Li…

大模型RAG(檢索增強)創新--SELF-RAG

檢索增強生成 (RAG) 提供了一種將 ChatGPT/GPT-4 等大型語言模型與自定義數據集成的途徑&#xff0c;但存在局限性。讓我們看看 RAG 最近的研究是如何解決一些問題。 大語言模型(LLM)將改變整個金融領域。其中一個場景是大語言模型可以學習大量文檔&#xff0c;并在很短的時間內…

《AI和人工智能和編程日報》

OpenAI&#xff1a;將深度研究擴展到 ChatGPT Plus、Team、Edu 和 Enterprise 用戶&#xff0c;每月 10 次查詢&#xff1b;Pro 用戶每月有 120 次查詢&#xff0c;ChatGPT 語音模式向免費用戶開放。DeepSeek&#xff1a;R1 大模型宣布降價&#xff0c;調用價格將至四分之一&am…

【音視頻】編解碼相關概念總結

NALU RTP PS流 三者總體關系 NALU在RTP中的應用&#xff1a;視頻流的RTP傳輸通常將NALU作為基本的單元進行傳輸。每個RTP包攜帶一個或多個NALU&#xff0c;這些NALU包含了視頻編碼數據。RTP協議通過其頭部信息&#xff08;如時間戳、序列號等&#xff09;幫助接收端重新排列和…

端口映射/內網穿透方式及問題解決:warning: remote port forwarding failed for listen port

文章目錄 需求&#xff1a;A機器是內網機器&#xff0c;B機器是公網服務器&#xff0c;想要從公網&#xff0c;訪問A機器的端口方式&#xff1a;端口映射&#xff0c;內網穿透&#xff0c;使用ssh打洞端口&#xff1a;遇到問題&#xff1a;命令執行成功&#xff0c;但是端口轉發…

11特殊函數

一、遞歸函數 遞歸概念&#xff1a;如果一個函數內部&#xff0c;包含了對自身的調用&#xff0c;則該函數稱為遞歸函數。要點&#xff1a; 只有能被表達為遞歸的問題&#xff0c;才能用遞歸函數解決。遞歸函數必須有一個可直接退出的條件&#xff0c;否則會進入無限遞歸。遞歸…

如何使用useContext進行全局狀態管理?

在 React 中&#xff0c;使用 useContext 進行全局狀態管理是一種有效的方法&#xff0c;尤其在需要在多個組件之間共享狀態時。useContext 允許你在組件樹中傳遞數據&#xff0c;而無需通過每個組件的 props 逐層傳遞。以下是關于如何使用 useContext 進行全局狀態管理的詳細指…

鴻蒙 ArkUI 實現敲木魚小游戲

敲木魚是一款具有禪意的趣味小游戲&#xff0c;本文將通過鴻蒙 ArkUI 框架的實現代碼&#xff0c;逐步解析其核心技術點&#xff0c;包括動畫驅動、狀態管理、音效震動反饋等。 一、架構設計與工程搭建 1.1 項目結構解析 完整項目包含以下核心模塊&#xff1a; ├── entry…

神經性肺纖維的預防方法

神經性肺纖維的預防方法 一、引言 神經性肺纖維化是一種慢性進行性肺部疾病&#xff0c;其病因復雜&#xff0c;包括遺傳、環境等多種因素。該病不僅影響患者的呼吸功能&#xff0c;還可能對神經系統造成損害。因此&#xff0c;預防神經性肺纖維化顯得尤為重要。本文將詳細介…

azure sql 網絡安全組 網絡安全sql注入

&#x1f345; 點擊文末小卡片 &#xff0c;免費獲取網絡安全全套資料&#xff0c;資料在手&#xff0c;漲薪更快 SQL注入 1、原理 針對注入的攻擊行為可描述為通過用戶可控參數中注入SQL語法&#xff0c;破壞原有SQL結構&#xff0c;達到編寫程序意料之外結果的攻擊行為。 其…

【Day50 LeetCode】圖論問題 Ⅷ

一、圖論問題 Ⅷ 1、dijkstra算法 堆優化 采用堆來優化&#xff0c;適合節點多的稀疏圖。代碼如下&#xff1a; # include<iostream> # include<vector> # include<list> # include<queue> # include<climits>using namespace std;class myco…

利用node.js搭配express框架寫后端接口(一)

Node.js 憑借其高效的非阻塞 I/O 操作、事件驅動架構以及輕量級的特點&#xff0c;成為了開發高性能服務器應用的熱門選擇。Express 框架作為 Node.js 上最流行的 Web 應用框架之一&#xff0c;以其簡潔的 API 和豐富的中間件生態系統&#xff0c;極大地簡化了 Web 后端開發流程…