wav格式的音频压缩,WAV 转 MP3 VBR 体积缩减比为 13.5%、多个 MP3 格式音频合并为一个、文件夹存在则删除重建,不存在则直接建立
🥇 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连
🎉 声明: 作为全网 AI 领域 干货最多的博主之一,❤️ 不负光阴不负卿 ❤️
文章目录
- 问题一: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占用 | 浏览器支持率 |
---|---|---|---|---|
WAV | 1411kbps | 100% | 5% | 100% |
Opus | 48kbps | 3.3% | 8% | 92% |
AAC-LC | 64kbps | 4.5% | 10% | 100% |
MP3 VBR | 190kbps | 13.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快速播放头
四、进阶优化技巧
- 分片传输:
# 使用MP4分段
ffmpeg -i input.wav -c:a aac -f segment -segment_time 10 output_%03d.m4s
- 预加载策略:
<audio preload="metadata"><source src="audio.opus" type="audio/ogg; codecs=opus">
</audio>
- 压缩加速:
# 启用多线程编码
ffmpeg -threads 4 -i input.wav -c:a libopus -b:a 48k output.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 和 语音数据集:数据集整理
-
🍊 点赞 👍 收藏 ⭐留言 📝 都是博主坚持写作、更新高质量博文的最大动力!
相关文章:

wav格式的音频压缩,WAV 转 MP3 VBR 体积缩减比为 13.5%、多个 MP3 格式音频合并为一个、文件夹存在则删除重建,不存在则直接建立
🥇 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连 🎉 声明: 作为全网 AI 领域 干货最多的博主之一,❤️ 不负光阴不负卿 ❤️ 文章目录 问题一:wav格式的音频压缩为哪些格式,网络传输给用户播放…...

面试问题——如何解决移动端1px 边框问题?
面试问题——如何解决移动端1px 边框问题? 最近,不少小伙伴向我反映,他们在面试中频繁被问到关于1px边框的问题。这个看似老生常谈的话题,没想到在面试中的出现率依然这么高,着实让我有些意外。对于那些对这个问题感到…...

鸿蒙开发第4篇__关于在鸿蒙应用中使用Java语言进行设计
本博文很重要 HarmonyOS从 API8 开始不再支持使用Java作为开发语言,未来的新功能将在ArkTS中实现. API 8对应的是HarmonyOS 3.0.0版本。请看下图: 因此, 读者如果看到类似《鸿蒙应用程序开发》(2021年版本 清华大学出版计)书 还使用Java语言…...
什么是Ollama?什么是GGUF?二者之间有什么关系?
一、Ollama:本地化大模型运行框架 Ollama 是一款开源工具,专注于在本地环境中快速部署和运行大型语言模型(LLM)。它通过极简的命令行操作简化了模型管理流程,支持离线运行、多模型并行、私有化部署等场景。 核心特性 本地化运行:无需依赖云端API,用户可在个人电脑或服务…...

kubernetes 初学命令
基础命令 kubectl 运维命令常用: #查看pod创建过程以及相关日志 kubectl describe pod pod-command -n dev #查看某个pod,以yaml格式展示结果 kubectl get pod nginx -o yaml #查看pod 详情 以及对应的集群IP地址 kubectl get pods -o wide 1. kubetc…...
useLayoutEffect和useEffect有什么区别?
在 React 中,useEffect 和 useLayoutEffect 是两个用于处理副作用的 Hook。虽然它们在用法上相似,但在执行时间和适用场景上有显著的区别。以下是对这两个 Hook 的详细比较和解释。 1. 基本概念 useEffect 定义:useEffect 是一个 Hook&…...
Docker迁移/var/lib/docker之后镜像容器丢失问题
迁移/var/lib/docker时,如果目标目录少写一个/,/etc/docker/daemon.json中的data-root后面需要多加一级目录docker。 若迁移命令如下 rsync -avz /var/lib/docker /home/docker/ 在/etc/docker/daemon.json中添加如下内容 "data-root": &q…...

ProfiNet转EtherCAT 网关:助力工业设备 “对话”的神奇纽带
在工业自动化的世界里,通信协议就像不同的语言,而稳联技术ProfiNet转EtherCAT网关(WL-PN-ECATM)则是那个精通多国语言的“翻译官”。它不仅能打破协议壁垒,还能让设备之间的沟通更加高效、精准。今天,我们就…...

TCP基本入门-简单认识一下什么是TCP
部分内容来源:小林Coding TCP的特点 1.面向连接 一定是“一对一”才能连接,不能像 UDP 协议可以一个主机同时向多个主机发送消息,也就是一对多是无法做到的 2.可靠的 无论的网络链路中出现了怎样的链路变化,TCP 都可以保证一个…...

本地快速搭建一套AI人脸识别技术研究学习的实验环境
如果你想在本地搭建一套学习和研究AI人脸识别技术的框架,建议使用开源工具和框架进行实验,因为它们通常提供了较为丰富的文档和社区支持,能够帮助你深入理解人脸识别的核心原理。以下是一套可行性强且综合性的方案,涵盖了人脸检测…...
DeepSeek:面向效率与垂直领域的下一代大语言模型技术解析
本文将深入剖析DeepSeek模型的核心算法架构,揭示其在神经网络技术上的突破性创新,并与主流大模型进行全方位技术对比。文章涵盖模型设计理念、训练范式优化、应用场景差异等关键维度,为读者呈现大语言模型领域的最新发展图景。 一、DeepSeek…...

【easy视频 | day01】项目了解 + 登录注册 + 使用 token 作为客户端请求令牌
文章目录 前言完成任务1. 项目了解2. 登录注册2.1 创建数据表2.2 验证码如果使用 Session 存储验证码:不用 Session 存储验证码,用 Redis 会有什么问题? 2.3 注册功能2.4 登录功能2.5 自动登录2.6 退出登录 总结 前言 本项目非原创,我只是个…...
使用elasticdump导出/导入 -- ES数据
导出指定索引数据到指定文件夹: ./elasticdump --inputhttp://用户:密码IP:9201/索引名字 --output导出路径/out.json --typedata 将导出的文件导入 ./elasticdump --input路径/out.json --outputhttp://账号:密码IP:9201/索引名称 --typedata --fileTypejson 【el…...
React + TypeScript 复杂布局开发实战
React TypeScript 复杂布局开发实战 一、项目架构设计(基于最新技术栈) 1.1 技术选型与工程创建 # 使用Vite 5.x React 19 TypeScript 5.4 npx create-vitelatest power-designer-ui --template react-ts cd power-designer-ui && npm inst…...
工业AR眼镜的‘芯’动力:FPC让制造更智能【新立电子】
随着增强现实(AR)技术的快速发展,工业AR智能眼镜也正逐步成为制造业领域的重要工具。它不仅为现场工作人员提供了视觉辅助,还极大地提升了远程协助的效率、优化了仓储管理。新立电子其高性能的FPC产品在AI眼镜中的应用,…...
mapbox实现添加历史轨迹,并进行动画播放效果
1、引入播放插件类 https://download.csdn.net/download/qq_48795482/90437319 2、添加图层 drawRouteLine(resData, layerType) {console.log("调用了轨迹线函数", resData);var jsondata {type: "FeatureCollection",features: [],};var linejsondat…...

最好Wordpree+Apache+PHP安装教程
前提需要 PHP的安装最少需要7.4以上Mysql的安装,直接默认最新版就行APache服务器(HTTP服务器,只有用这个你的软件才能在服务器上运行) 安装apache 安装 sudo apt install apache2查看防火墙 sudo ufw app list如果有 Apache那…...

Windows搭建jenkins服务
jenkins下载 官网:https://www.jenkins.io 中文文档:Jenkins 直接可下载网址:Jenkins 的安装和设置 安装前准备 在安装 jenkins 之前要先确保电脑上是否已配置过 Java 的环境变量,可调出命令窗口(win R 再输入 cmd&…...
鸿蒙-AVPlayer
compileVersion 5.0.2(14) 音频播放 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…...

解决单元测试 mock final类报错
文章目录 前言解决单元测试 mock final类报错1. 报错原因2. 解决方案3. 示例demo4. 扩展 前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。 而且听说点赞的人每天的运气都不会太差࿰…...

龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...

shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...

什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...

【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

Element-Plus:popconfirm与tooltip一起使用不生效?
你们好,我是金金金。 场景 我正在使用Element-plus组件库当中的el-popconfirm和el-tooltip,产品要求是两个需要结合一起使用,也就是鼠标悬浮上去有提示文字,并且点击之后需要出现气泡确认框 代码 <el-popconfirm title"是…...

免费批量Markdown转Word工具
免费批量Markdown转Word工具 一款简单易用的批量Markdown文档转换工具,支持将多个Markdown文件一键转换为Word文档。完全免费,无需安装,解压即用! 官方网站 访问官方展示页面了解更多信息:http://mutou888.com/pro…...
IP选择注意事项
IP选择注意事项 MTP、FTP、EFUSE、EMEMORY选择时,需要考虑以下参数,然后确定后选择IP。 容量工作电压范围温度范围擦除、烧写速度/耗时读取所有bit的时间待机功耗擦写、烧写功耗面积所需要的mask layer...