wav格式的音频压缩,WAV 转 MP3 VBR 体积缩减比为 13.5%、多个 MP3 格式音频合并为一个、文件夹存在则删除重建,不存在则直接建立

news2025/5/16 20:38:35

🥇 版权: 本文由【墨理学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.opus

ffmpeg -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.wav

232K    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.m4a

100K    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.mp3

224K    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 analysis
 time python audio_format_analysis.py
"""


import os
import subprocess
import csv
from collections import defaultdict

def 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] = value
        
        return {
            '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 None

def 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  # KB
                results.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 results

def 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, 48000

real    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 shutil


res_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 datetime

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. 创建临时文件列表(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.coloradmin.cn/o/2307990.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux权限 -- 开发工具(一)

文章目录 包管理器yumyum具体操作 Linux编辑器 - vim的使用vimvim的多模式 包管理器yum Linux中安装软件&#xff1a; 1.源码安装 2. 软件包安装 – rpm 3. 包管理器yum(centos) apt/apt-get(ubuntu) 为什么有包管理器&#xff1f; 包管理器会自动帮我们解决包依赖的问题 2. 什…

【leetcode】二分查找专题

文章目录 1.二分查找1.题目2.解题思路3. 解题代码 2.在排序数组中查找元素的第一个和最后一个位置1.题目2.算法原理3. 代码 3.x的平方根1.题目2.代码 4.搜索插入位置1.题目2.解题思路3.解题代码 5.山脉数组的索引1.题目2.解题思路3. 代码 6.寻找峰值1.题目2.解题思路3.代码 7. …

《Python实战进阶》No 7: 一个AI大模型聊天室的构建-基于WebSocket 实时通信开发实战

第7集&#xff1a; 一个AI大模型聊天室的构建-基于WebSocket 实时通信开发实战 在现代 Web 开发中&#xff0c;实时通信已经成为许多应用的核心需求。无论是聊天应用、股票行情推送&#xff0c;还是多人协作工具&#xff0c;WebSocket 都是实现高效实时通信的最佳选择之一。本…

vector习题

完数和盈数 题目 完数VS盈数_牛客题霸_牛客网 一个数如果恰好等于它的各因子(该数本身除外)之和&#xff0c;如&#xff1a;6321。则称其为“完数”&#xff1b;若因子之和大于该数&#xff0c;则称其为“盈数”。 求出2到60之间所有“完数”和“盈数”。 输入描述&#xff…

unity学习59: 滑动条 和 滚动条 滚动区域

目录 1 滑动条 slider 1.1 创建slider 1.2 构成的子物体 1.2.1 找到 某个UI的 方法 1.3 构成的component&#xff0c;主体就是 slider 2 核心属性 2.1 value 2.2 direction 3 作用 3.1 由于是fill back 可以实现血条效果 3.2 可以取得 slider.value 数值 1 滑动条…

基于vue框架的游戏博客网站设计iw282(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,博客信息,资源共享,游戏视频,游戏照片 开题报告内容 基于FlaskVue框架的游戏博客网站设计开题报告 一、项目背景与意义 随着互联网技术的飞速发展和游戏产业的不断壮大&#xff0c;游戏玩家对游戏资讯、攻略、评测等内容的需求日…

UWB人员定位:精准、高效、安全的智能管理解决方案

在现代企业管理、工业生产、安全监测等领域&#xff0c;UWB&#xff08;超宽带&#xff09;人员定位系统正逐步成为高精度定位技术的首选。相较于传统的GPS、Wi-Fi、蓝牙等定位方式&#xff0c;UWB具备厘米级高精度、低延迟、高安全性、抗干扰强等突出优势&#xff0c;能够实现…

在ubuntu 24.04.2 通过 Kubeadm 安装 Kubernetes v1.31.6

文章目录 1. 简介2. 准备3. 配置 containerd4. kubeadm 安装集群5. 安装网络 calico 插件 1. 简介 本指南介绍了如何在 Ubuntu 24.04.2 LTS 上安装和配置 Kubernetes 1.31.6 集群&#xff0c;包括容器运行时 containerd 的安装与配置&#xff0c;以及使用 kubeadm 进行集群初始…

DO-254航空标准飞行器电机控制器设计注意事项

DO-254航空标准飞行器电机控制器设计注意事项 1.核心要求1.1 设计保证等级(DAL)划分1.2生命周期管理1.3验证与确认2.电机控制器硬件设计的关键注意事项2.1需求管理与可追溯性2.2冗余与容错设计2.3验证与确认策略2.4元器件选型与管理2.5环境适应性设计2.6文档与配置管理3.应用…

解决Deepseek“服务器繁忙,请稍后再试”问题,基于硅基流动和chatbox的解决方案

文章目录 前言操作步骤步骤1&#xff1a;注册账号步骤2&#xff1a;在线体验步骤3&#xff1a;获取API密钥步骤4&#xff1a;安装chatbox步骤5&#xff1a;chatbox设置 价格方面 前言 最近在使用DeepSeek时&#xff0c;开启深度思考功能后&#xff0c;频繁遇到“服务器繁忙&am…

python-leetcode-使用最小花费爬楼梯

746. 使用最小花费爬楼梯 - 力扣&#xff08;LeetCode&#xff09; 解法 1&#xff1a;动态规划&#xff08;O(n) 时间&#xff0c;O(n) 空间&#xff09; class Solution:def minCostClimbingStairs(self, cost: List[int]) -> int:n len(cost)dp [0] * (n 1) # 额外多…

ChatGPT 提示词框架

作为一个资深安卓开发工程师&#xff0c;我们在日常开发中经常会用到 ChatGPT 来提升开发效率&#xff0c;比如代码优化、bug 排查、生成单元测试等。 但要想真正发挥 ChatGPT 的潜力&#xff0c;我们需要掌握一些提示词&#xff08;Prompt&#xff09;的编写技巧&#xff0c;并…

【构建工具】Gradle 8中Android BuildConfig的变化与开启方法

随着Gradle 8的发布&#xff0c;Android开发者需要注意一个重要变化&#xff1a;BuildConfig类的生成现在默认被关闭了&#xff01;&#xff01;&#xff01;。这个变化可能会影响许多依赖于BuildConfig的项目&#xff08;别问&#xff0c;问就是我也被影响了&#xff0c;多好用…

性能测试测试策略制定|知名软件测评机构经验分享

随着互联网产品的普及&#xff0c;产品面对的用户量级也越来越大&#xff0c;能抗住指数级增长的瞬间访问量以及交易量是保障购物体验是否顺畅的至关重要的一环&#xff0c;而我们的性能测试恰恰也是为此而存在的。 性能测试是什么呢&#xff1f;性能测试要怎么测呢&#xff1f…

SAP-ABAP:SAP数据库视图(Database View)详解-创建

在SAP系统中&#xff0c;数据库视图&#xff08;Database View&#xff09; 是一种基于物理数据库表的虚拟表&#xff0c;通过关联多个表&#xff08;使用INNER JOIN&#xff09;生成逻辑数据集。它存储在数据库中&#xff0c;但本身不存储数据&#xff0c;仅通过查询动态生成结…

BUG: 解决新版本SpringBoot3.4.3在创建项目时勾选lombok但无法使用的问题

前言 当使用Spring Boot 3.4.3创建新项目时&#xff0c;即使正确勾选Lombok依赖&#xff0c;编译时仍出现找不到符号的错误&#xff0c;但代码中Lombok注解的使用完全正确。 原因 Spring Boot 3.4.3在自动生成的pom.xml中新增了maven-compiler-plugin的配置&#xff0c;该插件…

登录次数限制

文章目录 一、应用场景与设计目的1. 应用场景2. 设计目的 二、功能设计1. 登录限制规则2. 解锁机制3. 适用维度 三、技术实现1. 数据存储2. 逻辑流程3. 实现代码示例4. 动态锁定时间 四、安全增强与扩展1. 防止用户名枚举2. 加入验证码3. 监控与报警4. 分布式支持 五、设计思考…

CMU15445(2023fall) Project #2 - Extendible Hash Index 匠心分析

胡未灭&#xff0c;鬓已秋&#xff0c;泪空流 此生谁料 心在天山 身老沧州 ——诉衷情 完整代码见&#xff1a; SnowLegend-star/CMU15445-2023fall: Having Conquered the Loftiest Peak, We Stand But a Step Away from Victory in This Stage. With unwavering determinati…

【Java面试】JVM汇总

目录 1.JVM为什么能跨平台&#xff1f; 2.JVM由哪些部分构成&#xff1f;每个部分起到什么作用&#xff1f; 3.什么是双亲委派&#xff1f;双亲委派的两大作用是什么&#xff1f; 举个例子&#x1f330;&#xff1a; 为什么要有这种“家族规矩”&#xff1f; 破坏双亲委派…

【SpringBoot】Spring 一站式解决方案:融合统一返回结果、异常处理与适配器模式

前言 ???本期讲解关于统一功能处理的详细介绍~~~ ??感兴趣的小伙伴看一看小编主页&#xff1a;-CSDN博客 ?? 你的点赞就是小编不断更新的最大动力 ??那么废话不多说直接开整吧~~ 目录 ???1.适配器模式? ??1.1适配器模式定义 ?编辑 ??1.2适配器模式角…