Compare commits
4 Commits
2b0e1c0413
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 1420c12d90 | |||
| a4501d7bea | |||
| 5a9e7f8251 | |||
| ab5ca94f17 |
@@ -0,0 +1,112 @@
|
||||
#!/bin/bash
|
||||
# 功能:智能WMV批量转MP4脚本(自动检测硬件编码,适配低性能NAS)
|
||||
# 特性:1. 自动检测QSV/NVENC硬件编码;2. 支持自定义画质/线程;3. 跳过已转换文件;4. 后台执行友好
|
||||
# 使用方法:1. 赋予执行权限 chmod +x wmv2mp4_batch.sh;2. 放到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
@@ -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
|
||||
|
||||
|
||||
[广州,轻量服务器,“1Panel Linux 面板” 镜像,Ubuntu Server 22.04 LTS 64bit]
|
||||
[server]
|
||||
101.33.230.186
|
||||
ubuntu
|
||||
广州服务器(1Panel, ubuntu)
|
||||
119.91.233.22
|
||||
Tester@123
|
||||
|
||||
[1Panel]
|
||||
Panel address: http://101.33.230.186:8090/tencentcloud
|
||||
Panel user: d0zr0t8lr4
|
||||
Panel password: rnxsxygays
|
||||
面板地址: http://119.91.233.22:8090/tencentcloud
|
||||
面板用户: 5f88qokyu8
|
||||
面板密码: oos3wkqmlj
|
||||
提示: 修改密码可执行命令: 1pctl update password
|
||||
------------------------------------------------------------
|
||||
|
||||
[openresty]
|
||||
监听 80 和 433 端口,对外服务,并把请求转发到内部的 docker 应用中
|
||||
|
||||
+10
-6
@@ -1,10 +1,14 @@
|
||||
硅谷服务器(ubuntu, 1panel镜像, aigrammar 的后台)
|
||||
170.106.191.35
|
||||
|
||||
硅谷服务器(1Panel, ubuntu)
|
||||
49.51.188.125
|
||||
ubuntu
|
||||
Tester@123
|
||||
Panel address: http://170.106.191.35:8090/tencentcloud
|
||||
Panel user: kk31vxjro3
|
||||
Panel password: gki2zr6z1b
|
||||
Tip: To change the password, you can execute the command: 1pctl update password
|
||||
面板地址: http://49.51.188.125:8090/tencentcloud
|
||||
面板用户: 5ll0w5e5ka
|
||||
面板密码: 6v0ufugkz7
|
||||
提示: 修改密码可执行命令: 1pctl update password
|
||||
----------------------------------------------------------
|
||||
|
||||
|
||||
[mysql]
|
||||
root
|
||||
|
||||
Reference in New Issue
Block a user