首页
Search
1
欢迎使用 Typecho
25 阅读
2
MYSQL主从复制
21 阅读
3
Git的指令大全
16 阅读
4
Linux常用命令
16 阅读
5
自动剪辑视频精彩片段
13 阅读
全部
前端
后端
MYSQL
其他
登录
Search
小酒馆
累计撰写
7
篇文章
累计收到
1
条评论
首页
栏目
全部
前端
后端
MYSQL
其他
页面
搜索到
7
篇与
的结果
2026-01-06
音频中双人声音分离
import soundfile as sf import librosa from modelscope.pipelines import pipeline from modelscope.utils.constant import Tasks import numpy as np # 1. 初始化语音分离 pipeline print("正在加载模型...") separation_pipeline = pipeline( Tasks.speech_separation, model='damo/speech_mossformer2_separation_temporal_8k' ) # 2. 准备音频文件 input_audio_path = '1.6.WAV' # 这里改成你的文件名 temp_8k_file = 'temp_input_8k.wav' # 临时文件 print(f"正在读取并重采样音频: {input_audio_path} ...") # === 关键步骤:使用 librosa 读取并强制重采样为 8000Hz === # sr=8000 会自动把 44.1k/48k 的音频转为 8k audio_data, sr = librosa.load(input_audio_path, sr=8000) # 保存一个临时的 8k 文件给模型读取(这样最稳妥,防止格式报错) sf.write(temp_8k_file, audio_data, 8000) # 3. 执行分离 print("正在进行盲源分离 (这可能需要一点时间)...") result = separation_pipeline(temp_8k_file) # # result['output_pcm_list'] 包含分离后的两个音频数据 # # 这里的关键是:先取出来,然后用 .squeeze() 去掉多余的维度 # audio_track_1 = result['output_pcm_list'][0].squeeze() # audio_track_2 = result['output_pcm_list'][1].squeeze() # === 修复重点:将 bytes 转为 numpy 数组 === raw_bytes_1 = result['output_pcm_list'][0] raw_bytes_2 = result['output_pcm_list'][1] print(f"获取到数据,数据类型: {type(raw_bytes_1)}") print(f"数据长度: {len(raw_bytes_1)} 字节") # 使用 np.frombuffer 将字节流转为数组 # ModelScope 的 PCM 输出通常是 16-bit 整数 (int16) audio_track_1 = np.frombuffer(raw_bytes_1, dtype=np.int16) audio_track_2 = np.frombuffer(raw_bytes_2, dtype=np.int16) # === 调试信息:打印一下形状 === print(f"音轨1 形状: {audio_track_1.shape}") # 正常应该是 (N,) 比如 (80000,) print(f"音轨2 形状: {audio_track_2.shape}") # 如果形状是 (Channels, Time) 例如 (1, 80000),squeeze 会把它变成 (80000,) # 如果形状是 (Time, Channels) 例如 (80000, 1),squeeze 也会把它变成 (80000,) # 4. 保存结果 print("正在保存分离后的音轨...") # 这里的 .T 是为了防止万一 squeeze 没生效,数据是 (1, N) 的话,转置成 (N, 1) 比较保险 # 但通常 squeeze() 就足够了。我们加一个保险判断: # if audio_track_1.ndim == 2 and audio_track_1.shape[0] < audio_track_1.shape[1]: # audio_track_1 = audio_track_1.T # if audio_track_2.ndim == 2 and audio_track_2.shape[0] < audio_track_2.shape[1]: # audio_track_2 = audio_track_2.T sf.write('output_speaker_A.wav', audio_track_1, 8000) sf.write('output_speaker_B.wav', audio_track_2, 8000) print("成功!已生成 output_speaker_A.wav 和 output_speaker_B.wav") # --------------------------------------------------------- # 5. (可选) 自动区分男女 # --------------------------------------------------------- # def detect_gender(y, sr=8000): # # 提取音高 # f0, voiced_flag, voiced_probs = librosa.pyin(y, fmin=50, fmax=300, sr=sr) # valid_f0 = f0[~np.isnan(f0)] # if len(valid_f0) == 0: # return 0 # return np.mean(valid_f0) def detect_gender(y, sr=8000): print(f"正在分析音频片段,数据类型: {y.dtype}") # === 关键修复:如果数据是整数 (int16),强制转为浮点数 (float32) === # librosa 要求输入必须是 float,且范围在 -1 到 1 之间 if not np.issubdtype(y.dtype, np.floating): y = y.astype(np.float32) / 32768.0 # 提取音高 (fmin=50, fmax=300 涵盖了男女生的正常语调范围) f0, voiced_flag, voiced_probs = librosa.pyin(y, fmin=50, fmax=300, sr=sr) # 去掉无效值 (nan) valid_f0 = f0[~np.isnan(f0)] if len(valid_f0) == 0: return 0 return np.mean(valid_f0) pitch_a = detect_gender(audio_track_1) pitch_b = detect_gender(audio_track_2) print(f"音轨A 平均频率: {pitch_a:.1f} Hz") print(f"音轨B 平均频率: {pitch_b:.1f} Hz") if pitch_a > pitch_b: # print("推测: A是女性, B是男性") else: # print("推测: A是男性, B是女性")
2026年01月06日
13 阅读
0 评论
0 点赞
2025-11-20
javascript 数组从后面取第N个值
类似Python的arr[-1] // 取最后一位// 代理数组 可使用 arr[-1] 来获取最后一个元素Array.prototype.proxy = function(){return new Proxy(this, { get: (t, p, r) => Reflect.get(t, parseInt(p) < 0 ? t.length + parseInt(p) : p, r) });}var a = [1,2,3,4,5,6];var b = a.proxy();// 取最后1位var last1 = b[-1];console.log(last1); // 6// 取倒数第4位var last4 = b[-4];console.log(last4); // 3关于js中的Proxy及Reflect,找到相关的说明,正确与否不做辩解,也可自己去查阅相关js中的Proxy_拾玥花开的博客-CSDN博客_js proxyjs中的Reflect入门讲解_yunchong_zhao的博客-CSDN博客_js reflect
2025年11月20日
10 阅读
0 评论
0 点赞
2025-11-20
自动剪辑视频精彩片段
AutoClip的搭建项目地址:https://github.com/zhouxiaoka/autoclip.git本地部署操作系统: macOS / Linux / Windows (WSL)Python: 3.8+ (推荐 3.9+)Node.js: 16+ (推荐 18+)Redis: 6.0+ (推荐 7.0+)FFmpeg: 视频处理依赖内存: 最少 4GB,推荐 8GB+存储: 最少 10GB 可用空间创建Docker容器docker run -itd --name ubuntu-autoclip -p 3000:3000 -p 8000:8000 ubuntu查看容器IDdocker ps进入容器命令窗口docker exec -it 容器ID /bin/bash更新aptapt-get update安装Gitapt install -y git克隆项目cd /home # 目录位置随便git clone https://github.com/zhouxiaoka/autoclip.git进入项目cd autoclip安装python环境DEBIAN_FRONTEND=noninteractive apt install -y python3 python3.12-venvapt install -y python3选时区 默认全选1, 可自选安装虚拟环境要用apt install -y python3.12-venv创建虚拟环境python3 -m venv venv # 项目需要使用虚拟环境激活环境source ./venv/bin/activate安装pytz 获取projects接口报错 需要安装这个库pip install pytz安装Node使用nvm管理工具下载nvmcurl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash激活命令source ~/.bashrc安装最新版Nodenvm install node下载Redisapt install -y redis-server下载FFmpegapt install -y ffmpeg进入到前端文件安装不手动安装 运行程序,前端无法启动cd ./frontendnpm installnpm audit fixnpm audit fix --force退回cd ..增加.envcp env.example .env安装其他库source ./venv/bin/activatepip install openai-whisperpip install dashscopepip install openaipip install google-generativeai运行程序一键启动(推荐,包含完整检查和监控)./start_autoclip.sh快速启动(开发环境,跳过详细检查)./quick_start.sh检查系统状态./status_autoclip.sh停止系统./stop_autoclip.sh
2025年11月20日
13 阅读
0 评论
0 点赞
2025-11-20
Linux常用命令
一、文件与目录操作这是最基础也最常用的命令组,用于管理服务器上的文件和文件夹。ls:列出目录内容。ls -l:以长格式显示,包含权限、大小、修改时间等详细信息。ls -a:显示所有文件,包括以 “.” 开头的隐藏文件。cd:切换当前工作目录。cd /home:切换到/home目录。cd ..:切换到上一级目录。cd ~:切换到当前用户的家目录。pwd:显示当前工作目录的绝对路径。mkdir:创建新目录。mkdir test:创建名为test的目录。mkdir -p /a/b/c:递归创建多级目录,即使上级目录不存在。rm:删除文件或目录。rm file.txt:删除file.txt文件(需确认)。rm -f file.txt:强制删除文件,无需确认。rm -rf dir:强制递归删除目录及其所有内容,使用时务必谨慎。cp:复制文件或目录。cp file1.txt file2.txt:将file1.txt复制为file2.txt。cp -r dir1 dir2:递归复制dir1目录及其内容到dir2。mv:移动或重命名文件 / 目录。mv file1.txt /home:将file1.txt移动到/home目录。mv oldname.txt newname.txt:将oldname.txt重命名为newname.txt。二、系统信息查看用于了解服务器的硬件、系统版本、资源使用等状态。uname:查看系统内核信息。uname -r:显示内核版本,如3.10.0-1160.el7.x86_64。uname -a:显示完整的系统信息,包括内核、主机名、架构等。cat /etc/centos-release:查看 CentOS 的具体版本,如CentOS Linux release 7.9.2009 (Core)。free:查看内存使用情况。free -h:以人类可读的格式(如 GB、MB)显示内存信息。df:查看磁盘分区使用情况。df -h:以人类可读的格式显示各分区的容量、已用、可用空间。top:实时查看系统进程和资源占用(CPU、内存)。按q键退出top界面。ps:查看当前运行的进程。ps aux:显示所有用户的所有进程详细信息。三、用户与权限管理用于创建用户、分配权限,保障系统安全。useradd:创建新用户。useradd testuser:创建名为testuser的用户。passwd:设置或修改用户密码。passwd testuser:为testuser设置密码(输入时密码不显示)。userdel:删除用户。userdel testuser:删除testuser用户(默认不删除家目录)。userdel -r testuser:删除用户的同时,删除其家目录。chmod:修改文件或目录的权限。chmod 755 file.sh:设置file.sh的权限为所有者可读可写可执行,其他用户可读可执行。chmod +x file.sh:为file.sh添加执行权限。chown:修改文件或目录的所有者和所属组。chown testuser:testuser file.txt:将file.txt的所有者和所属组都改为testuser。四、软件包管理(YUM)CentOS 7 及以下默认使用 YUM 包管理器,用于安装、更新、卸载软件。yum install:安装软件包。yum install nginx:安装 Nginx 服务。yum update:更新软件包。yum update nginx:仅更新 Nginx。yum update:更新系统中所有可更新的软件包。yum remove:卸载软件包。yum remove nginx:卸载 Nginx 服务。yum list:列出已安装或可安装的软件包。yum list installed:列出所有已安装的软件包。yum search:搜索软件包。yum search redis:搜索与redis相关的软件包。五、服务管理(systemctl)CentOS 7 及以上使用systemctl管理系统服务,替代了传统的service命令。启动服务:systemctl start nginx停止服务:systemctl stop nginx重启服务:systemctl restart nginx查看服务状态:systemctl status nginx设置开机自启:systemctl enable nginx取消开机自启:systemctl disable nginx六、网络操作用于配置和查看服务器的网络信息。ifconfig:查看或配置网卡信息(部分系统需安装net-tools包)。ip addr:查看网卡 IP 地址(CentOS 7 及以上推荐使用)。ping:测试与目标主机的网络连通性。ping www.baidu.com:测试与百度的连通性,按Ctrl+C停止。netstat:查看网络连接状态(需安装net-tools包)。netstat -tuln:查看所有监听中的 TCP 和 UDP 端口。curl/wget:下载文件或测试 URL。curl www.baidu.com:获取百度首页的 HTML 内容。wget https://xxx.com/file.tar.gz:下载指定 URL 的文件。七、文件内容操作cat:查看文件内容(适合小文件)。cat file.txt:直接显示文件全部内容。cat -n file.txt:显示内容并带行号。more/less:分页查看大文件内容。more largefile.txt:按页显示,按空格翻页,q退出。less largefile.txt:支持上下滚动、搜索(输入/关键词查找,n下一个),更灵活。head/tail:查看文件开头或结尾内容。head -n 10 file.txt:显示文件前 10 行。tail -n 20 file.txt:显示文件后 20 行。tail -f /var/log/messages:实时跟踪文件新增内容(常用于查看日志,Ctrl+C退出)。grep:在文件中搜索关键词(强大的文本过滤工具)。grep "error" /var/log/nginx/error.log:在 Nginx 错误日志中搜索包含 “error” 的行。grep -i "Error" file.txt:忽略大小写搜索。grep -r "test" /home:递归搜索/home目录下所有文件中包含 “test” 的内容。sed:文本替换(非交互式编辑)。sed -i 's/old/new/g' file.txt:将文件中所有 “old” 替换为 “new”(-i直接修改原文件,谨慎使用)。touch:创建空文件或更新文件时间戳。touch newfile.txt:创建空文件。touch -d "2023-01-01" file.txt:修改文件的修改时间为指定日期。八、压缩与解压tar:打包 / 解压文件(常用与.tar、.tar.gz、.tar.bz2等格式)。打包并压缩为.tar.gz:tar -zcvf archive.tar.gz dir/(z用 gzip 压缩,c创建,v显示过程,f指定文件名)。解压.tar.gz:tar -zxvf archive.tar.gz(x解压)。解压.tar.bz2:tar -jxvf archive.tar.bz2(j用 bzip2 压缩)。zip/unzip:处理.zip格式。压缩:zip -r archive.zip dir/(-r递归压缩目录)。解压:unzip archive.zip(解压到当前目录)。查看压缩包内容:unzip -l archive.zip。gzip/gunzip:压缩 / 解压单个文件(仅支持.gz格式,会删除原文件)。压缩:gzip file.txt(生成file.txt.gz,删除file.txt)。解压:gunzip file.txt.gz(生成file.txt,删除file.gz)。九、进程管理进阶kill:终止进程(需知道进程 ID,可通过ps或top获取)。kill 1234:发送终止信号给 ID 为 1234 的进程(默认信号 15,优雅终止)。kill -9 1234:强制终止进程(信号 9,用于无法优雅终止的进程,谨慎使用)。pkill:按进程名终止进程。pkill nginx:终止所有名为nginx的进程。pgrep:按名称查找进程 ID。pgrep nginx:返回所有nginx进程的 ID。nohup:后台运行进程,断开终端后不终止。nohup ./script.sh &:后台运行script.sh,输出日志到nohup.out。nohup ./my_script.sh > my_log.log 2>&1 & 指定日志文件&:将命令放入后台运行(即使不加 nohup,& 也能让命令在后台运行,但终端关闭后会终止)。两者结合:实现 “后台运行 + 终端关闭不终止”。2>&1:将标准错误(stderr,如错误信息)也重定向到 my_log.log(与 stdout 合并)。nohup ./my_script.sh > /dev/null 2>&1 & 不输出日志文件十、磁盘与存储管理du:查看文件 / 目录占用的磁盘空间。du -sh /home:以人类可读格式显示/home目录总大小(s汇总,h人性化)。du -h --max-depth=1 /var:显示/var下一级子目录的大小。fdisk:磁盘分区管理(需 root 权限)。fdisk -l:列出所有磁盘及分区信息。fdisk /dev/sda:对/dev/sda磁盘进行分区操作(进入交互模式)。mount/umount:挂载 / 卸载文件系统。挂载 U 盘(假设设备为/dev/sdb1):mount /dev/sdb1 /mnt/usb。卸载:umount /mnt/usb(卸载前确保无程序使用该目录)。lsblk:查看磁盘分区布局(更直观的树形结构)。lsblk:列出所有块设备(磁盘、分区)的名称、大小、挂载点等。十一、系统日志与时间管理查看系统日志:/var/log/messages:系统通用日志(需 root 权限)。/var/log/secure:用户登录、权限相关日志(如 SSH 登录失败记录)。journalctl:CentOS 7 + 的日志管理工具(替代传统日志文件)。journalctl -u nginx:查看 Nginx 服务的日志。journalctl --since "1 hour ago":查看 1 小时内的日志。时间管理:date:显示当前系统时间。date -s "2025-10-24 15:30:00":手动设置系统时间(需 root)。timedatectl:查看 / 设置时区和时间同步。timedatectl set-timezone Asia/Shanghai:设置时区为上海。timedatectl set-ntp yes:开启网络时间同步(NTP)。十二、其他实用命令clear:清空终端屏幕(快捷键Ctrl+L也可)。history:查看历史命令记录。history | grep "yum":搜索包含 “yum” 的历史命令。!123:执行历史记录中第 123 条命令。ln:创建链接文件(类似 Windows 快捷方式)。软链接(推荐):ln -s /usr/local/bin/python3 /usr/bin/python(删除原文件后链接失效)。硬链接:ln file.txt file_link(与原文件共享 inode,删除原文件不影响链接)。scp:远程复制文件(基于 SSH)。本地到远程:scp localfile.txt user@remote_ip:/home/。远程到本地:scp user@remote_ip:/home/file.txt ./。ssh:远程登录服务器。ssh user@remote_ip:通过用户名 + IP 登录。ssh -p 2222 user@remote_ip:指定端口(默认 22)登录。查看端口netstat -tulnp | grep 8080查看进程ps aux | grep python
2025年11月20日
16 阅读
1 评论
0 点赞
2025-11-20
Git的指令大全
参考文章配置初始化操作 [config]$ git config -global user.name #设置提交者名字 $ git config -global user.email #设置提交者邮箱 $ git config -global core.editor #设置默认文本编辑器 $ git config -global merge.tool #设置解决合并冲突时差异分析工具 $ git config --list #检查已有的配置信息git config --global init.defaultBranch # 设置创建新版本库 [init]$ git clone #克隆远程版本库 $ git init #初始化本地版本库 $ git init --bare # 裸仓库必须加 --bare,否则无法接收 push修改和提交 [add/mv/rm/commit]$ git add . #添加所有改动过的文件 $ git add #添加指定的文件 $ git mv #文件重命名 $ git rm #删除文件 $ git rm -cached #停止跟踪文件但不删除 $ git commit -m #提交指定文件 $ git commit -m “commit message” #提交所有更新过的文件 $ git commit -amend #修改最后一次提交 $ git commit -C HEAD -a -amend #增补提交(不会产生新的提交历史纪录)查看提交历史 [log/status/diff]$ git log #查看提交历史 $ git log -p #查看指定文件的提交历史 $ git blame #以列表方式查看指定文件的提交历史 $ gitk #查看当前分支历史纪录 $ gitk #查看某分支历史纪录 $ gitk --all #查看所有分支历史纪录 $ git branch -v #每个分支最后的提交 $ git status #查看当前状态 $ git diff #查看变更内容撤消操作 [reset/checkout/revert]$ git reset -hard HEAD #撤消工作目录中所有未提交文件的修改内容 $ git checkout HEAD #撤消指定的未提交文件的修改内容 $ git checkout HEAD. #撤消所有文件 $ git revert #撤消指定的提交分支与标签 [branch/checkout/tag]$ git branch #显示所有本地分支 $ git checkout <branch/tagname> #切换到指定分支或标签 $ git branch #创建新分支 $ git branch -d #删除本地分支 $ git tag #列出所有本地标签 $ git tag #基于最新提交创建标签 $ git tag -d #删除标签合并与衍合 [merge/rebase]$ git merge #合并指定分支到当前分支 $ git rebase #衍合指定分支到当前分支远程操作 [remote/fetch/pull/push]$ git remote -v #查看远程版本库信息 $ git remote show #查看指定远程版本库信息 $ git remote add #添加远程版本库 $ git fetch #从远程库获取代码 $ git pull #下载代码及快速合并 $ git push #上传代码及快速合并 $ git push : / #删除远程分支或标签 $ git push -tags #上传所有标签
2025年11月20日
16 阅读
0 评论
0 点赞
1
2