42 lines
1.1 KiB
Bash
42 lines
1.1 KiB
Bash
#!/bin/bash
|
||
|
||
extensions=("mp4" "avi" "mov" "mkv" "flv" "wmv")
|
||
|
||
echo "开始批量转码(H.264 MP4)..."
|
||
echo
|
||
|
||
for ext in "${extensions[@]}"; do
|
||
for file in *."$ext"; do
|
||
[ -f "$file" ] || continue
|
||
|
||
# 👉 提取类似 1 (12).mp4 → 12
|
||
base=$(echo "$file" | sed -E 's/^1 \(([0-9]+)\)\.[^.]+$/\1/')
|
||
|
||
# 👉 如果匹配成功,就用纯数字,否则用原文件名
|
||
if [[ "$base" =~ ^[0-9]+$ ]]; then
|
||
output="${base}-h264.mp4"
|
||
else
|
||
output="${file%.*}-h264.mp4"
|
||
fi
|
||
|
||
if [ ! -f "$output" ]; then
|
||
echo "正在转码: $file --> $output"
|
||
|
||
ffmpeg -i "$file" \
|
||
-c:v libx264 -preset medium -crf 23 \
|
||
-c:a copy \
|
||
"$output"
|
||
|
||
if [ $? -eq 0 ]; then
|
||
echo "完成: $file"
|
||
else
|
||
echo "转码失败: $file"
|
||
fi
|
||
echo
|
||
else
|
||
echo "跳过 $file,因为 $output 已存在。"
|
||
fi
|
||
done
|
||
done
|
||
|
||
echo "所有任务执行完毕。" |