Compare commits

...

3 Commits

Author SHA1 Message Date
sophon a4501d7bea modify scripts 2026-08-01 12:27:03 +08:00
sophon 5a9e7f8251 Merge branch 'master' of git.easyprompt8.com:backend/devops 2026-08-01 12:25:46 +08:00
sophon ab5ca94f17 modify scripts 2025-12-26 11:16:38 +08:00
3 changed files with 129 additions and 15 deletions
+112
View File
@@ -0,0 +1,112 @@
#!/bin/bash
# 功能:智能WMV批量转MP4脚本(自动检测硬件编码,适配低性能NAS)
# 特性:1. 自动检测QSV/NVENC硬件编码;2. 支持自定义画质/线程;3. 跳过已转换文件;4. 后台执行友好
# 使用方法:1. 赋予执行权限 chmod +x wmv2mp4_batch.sh2. 放到WMV文件目录执行 ./wmv2mp4_batch.sh
# 自定义参数(可根据需求修改)
CRF_VALUE="23" # 画质参数(20-25最佳,数值越小画质越好、体积越大)
THREADS_NUM="4" # 线程数(适配NAS CPU核心数,4核填4,8核填8)
PRESET_MODE="fast" # 编码预设(ultrafast最快,fast平衡,slow画质最好)
AUDIO_BITRATE="128k" # 音频码率(128k足够日常使用,音质要求高可设192k)
# 定义颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # 恢复默认颜色
# -------------------------- 步骤1:检测FFmpeg是否安装 --------------------------
if ! command -v ffmpeg &> /dev/null; then
echo -e "${RED}错误:未检测到FFmpeg,请先安装FFmpeg${NC}"
exit 1
fi
echo -e "${GREEN}✅ 已检测到FFmpeg,版本:$(ffmpeg -version | head -n1 | awk '{print $3}')${NC}"
# -------------------------- 步骤2:自动检测硬件编码支持 --------------------------
VIDEO_ENCODER="libx264" # 默认软编
ENCODER_TYPE="软件编码"
echo -e "${BLUE}正在检测硬件编码支持...${NC}"
# 检测Intel QSV硬编(绿联NAS Intel机型适用)
if ffmpeg -encoders 2>&1 | grep -q "h264_qsv"; then
VIDEO_ENCODER="h264_qsv"
ENCODER_TYPE="Intel QSV硬件编码"
echo -e "${GREEN}✅ 检测到Intel QSV硬件编码,将使用该编码提速${NC}"
# 检测NVIDIA NVENC硬编(台式机/高性能NAS适用)
elif ffmpeg -encoders 2>&1 | grep -q "h264_nvenc"; then
VIDEO_ENCODER="h264_nvenc"
ENCODER_TYPE="NVIDIA NVENC硬件编码"
echo -e "${GREEN}✅ 检测到NVIDIA NVENC硬件编码,将使用该编码提速${NC}"
else
echo -e "${YELLOW}⚠️ 未检测到硬件编码,将使用libx264软件编码(CPU占用较高)${NC}"
fi
# -------------------------- 步骤3:查找WMV文件 --------------------------
WMV_FILES=($(find . -maxdepth 1 -type f -iname "*.wmv"))
if [[ ${#WMV_FILES[@]} -eq 0 ]]; then
echo -e "${RED}错误:当前目录未找到WMV格式文件!${NC}"
exit 1
fi
echo -e "${BLUE}✅ 共找到 ${#WMV_FILES[@]} 个WMV文件,准备开始转换${NC}"
echo -e "${YELLOW}📌 编码配置:${ENCODER_TYPE} | 画质CRF${CRF_VALUE} | 线程数:${THREADS_NUM} | 编码预设:${PRESET_MODE}${NC}"
echo -e "${YELLOW}📌 转换后文件将保留原文件名,后缀改为.mp4,已存在的MP4文件将跳过${NC}"
read -p "是否开始转换?(y/n) " choice
[[ "$choice" != "y" && "$choice" != "Y" ]] && echo -e "${GREEN}操作已取消${NC}" && exit 0
# -------------------------- 步骤4:批量转换 --------------------------
total_success=0
total_failed=0
failed_files=()
echo -e "${GREEN}=====================================${NC}"
echo -e "${GREEN}开始批量转换(按文件顺序执行)${NC}"
echo -e "${GREEN}=====================================${NC}"
for wmv_file in "${WMV_FILES[@]}"; do
# 生成输出文件名(替换后缀为mp4,保留原文件名)
mp4_file="${wmv_file%.*}.mp4"
# 跳过已存在的MP4文件
if [[ -f "$mp4_file" ]]; then
echo -e "${YELLOW}⚠️ $mp4_file 已存在,跳过转换${NC}"
continue
fi
echo -e "${BLUE}正在转换:$wmv_file$mp4_file${NC}"
echo -e "${BLUE}编码类型:${ENCODER_TYPE},预计耗时取决于文件大小...${NC}"
# 执行转换命令(根据编码类型调整参数)
if [[ "$VIDEO_ENCODER" == "h264_qsv" || "$VIDEO_ENCODER" == "h264_nvenc" ]]; then
# 硬件编码命令(无需preset和threads,硬编自动优化)
ffmpeg -i "$wmv_file" -c:v "$VIDEO_ENCODER" -crf "$CRF_VALUE" -c:a aac -b:a "$AUDIO_BITRATE" -y "$mp4_file" > /dev/null 2>&1
else
# 软件编码命令(指定线程和预设)
ffmpeg -i "$wmv_file" -c:v "$VIDEO_ENCODER" -crf "$CRF_VALUE" -threads "$THREADS_NUM" -preset "$PRESET_MODE" -c:a aac -b:a "$AUDIO_BITRATE" -y "$mp4_file" > /dev/null 2>&1
fi
# 检查转换结果
if [[ $? -eq 0 && -f "$mp4_file" ]]; then
echo -e "${GREEN}$wmv_file 转换成功!输出:$mp4_file${NC}"
total_success=$((total_success + 1))
else
echo -e "${RED}$wmv_file 转换失败!${NC}"
total_failed=$((total_failed + 1))
failed_files+=("$wmv_file")
# 删除转换失败的残缺文件
[[ -f "$mp4_file" ]] && rm -f "$mp4_file"
fi
echo -e "${GREEN}-------------------------------------${NC}"
done
# -------------------------- 步骤5:转换总结 --------------------------
echo -e "${GREEN}=====================================${NC}"
echo -e "${GREEN}批量转换完成!${NC}"
echo -e "${GREEN}✅ 成功转换:$total_success 个文件${NC}"
echo -e "${RED}❌ 转换失败:$total_failed 个文件${NC}"
if [[ ${#failed_files[@]} -gt 0 ]]; then
echo -e "${RED}失败文件列表:${NC}"
for file in "${failed_files[@]}"; do
echo " - $file"
done
fi
echo -e "${GREEN}=====================================${NC}"
echo -e "${YELLOW}提示:转换后的MP4文件可直接在NAS上流畅播放(硬件解码支持)${NC}"
+7 -9
View File
@@ -16,16 +16,14 @@ PING sophonfuture.com (101.33.230.186): 56 data bytes
64 bytes from 101.33.230.186: icmp_seq=1 ttl=51 time=11.783 ms 64 bytes from 101.33.230.186: icmp_seq=1 ttl=51 time=11.783 ms
[广州,轻量服务器,“1Panel Linux 面板” 镜像,Ubuntu Server 22.04 LTS 64bit] 广州服务器(1Panel, ubuntu)
[server] 119.91.233.22
101.33.230.186
ubuntu
Tester@123 Tester@123
面板地址: http://119.91.233.22:8090/tencentcloud
[1Panel] 面板用户: 5f88qokyu8
Panel address: http://101.33.230.186:8090/tencentcloud 面板密码: oos3wkqmlj
Panel user: d0zr0t8lr4 提示: 修改密码可执行命令: 1pctl update password
Panel password: rnxsxygays ------------------------------------------------------------
[openresty] [openresty]
监听 80 和 433 端口,对外服务,并把请求转发到内部的 docker 应用中 监听 80 和 433 端口,对外服务,并把请求转发到内部的 docker 应用中
+10 -6
View File
@@ -1,10 +1,14 @@
硅谷服务器(ubuntu, 1panel镜像, aigrammar 的后台)
170.106.191.35 硅谷服务器(1Panel, ubuntu)
49.51.188.125
ubuntu
Tester@123 Tester@123
Panel address: http://170.106.191.35:8090/tencentcloud 面板地址: http://49.51.188.125:8090/tencentcloud
Panel user: kk31vxjro3 面板用户: 5ll0w5e5ka
Panel password: gki2zr6z1b 面板密码: 6v0ufugkz7
Tip: To change the password, you can execute the command: 1pctl update password 提示: 修改密码可执行命令: 1pctl update password
----------------------------------------------------------
[mysql] [mysql]
root root