ffmpeg批量转换脚本
批量转换video/*.mp4中的所有视频到对应视频目录中,脚本与video目录同级。
linux脚本
#!/bin/bash
# 设置视频目录(默认为当前目录下的 video 文件夹)
VIDEO_DIR="./video"
# 检查 video 目录是否存在
if [ ! -d "$VIDEO_DIR" ]; then
echo "错误:目录 '$VIDEO_DIR' 不存在!"
exit 1
fi
# 检查 ffmpeg 是否可用
if ! command -v ffmpeg &> /dev/null; then
echo "错误:未找到 ffmpeg,请确保已安装并加入 PATH。"
exit 1
fi
echo "使用命令:ffmpeg"
# 遍历 video 目录下所有 .mp4 文件
for file in "$VIDEO_DIR"/*.mp4; do
# 如果没有匹配到任何文件,则退出(避免处理字面量 "*.mp4")
if [ ! -f "$file" ]; then
echo "没有找到任何 .mp4 文件。"
break
fi
# 提取文件名(不含扩展名)
filename=$(basename "$file" .mp4)
# 目标输出目录:video/文件名/
output_dir="$VIDEO_DIR/$filename"
# 如果目标目录已存在,则跳过该文件(避免重复转换)
if [ -d "$output_dir" ]; then
echo "跳过:$filename(目标目录已存在)"
echo "------------------------"
continue
fi
# 创建目标目录
mkdir -p "$output_dir"
echo "正在处理:$file -> $output_dir/index.m3u8"
# 执行 ffmpeg 转换
ffmpeg -i "$file" \
-c:v libx264 \
-c:a copy \
-hls_time 2 \
-hls_list_size 0 \
"$output_dir/index.m3u8"
# 检查转换是否成功
if [ $? -eq 0 ]; then
echo "转换成功:$filename"
else
echo "转换失败:$filename"
# 可选:若转换失败,可删除空目录或保留以便排查
fi
echo "------------------------"
done
echo "批量转换完成。"windows脚本
@echo off
setlocal enabledelayedexpansion
set "VIDEO_DIR=video"
if not exist "%VIDEO_DIR%" (
echo ERROR: Directory '%VIDEO_DIR%' does not exist!
pause
exit /b 1
)
where ffmpeg >nul 2>nul
if errorlevel 1 (
echo ERROR: ffmpeg not found in PATH.
pause
exit /b 1
)
echo Using ffmpeg...
echo.
:: Count how many .mp4 files exist
set "count=0"
for %%f in ("%VIDEO_DIR%\*.mp4") do set /a count+=1
if %count% equ 0 (
echo No .mp4 files found in '%VIDEO_DIR%'.
pause
exit /b 0
)
echo Found %count% .mp4 file(s). Starting conversion...
echo.
for %%f in ("%VIDEO_DIR%\*.mp4") do (
set "outdir=%VIDEO_DIR%\%%~nf"
echo Processing: %%~nf
:: Check if output directory already exists
if exist "!outdir!" (
echo Output directory already exists. Skipping.
)
:: Convert only if output directory does NOT exist
if not exist "!outdir!" (
echo Creating directory "!outdir!" ...
mkdir "!outdir!"
echo Running ffmpeg ...
ffmpeg -i "%%f" -c:v libx264 -c:a copy -hls_time 2 -hls_list_size 0 "!outdir!\index.m3u8"
if errorlevel 1 (
echo Conversion FAILED.
)
if not errorlevel 1 (
echo Conversion SUCCESS.
)
)
echo ------------------------
)
echo Batch conversion completed.
pause