本帖最后由 hjk 于 2025-4-10 16:35 编辑
@axiuge
这种cmd命令 需要什么工具打包? 是不是也可以?
ANSI编码模式无乱码
[PowerShell] 纯文本查看 复制代码 @echo off
setlocal enabledelayedexpansion
REM 设置代码页为中文GBK以正确显示字符
chcp 936 >nul
REM 检查是否拖放了文件夹
if "%~1"=="" (
echo 错误:请将文件夹拖放到此脚本上。
pause
exit /b
)
REM 验证路径是否存在且为文件夹
if not exist "%~1\" (
echo 错误:路径不存在或不是文件夹。
pause
exit /b
)
REM 设置输入输出路径
set "input_dir=%~1"
if "!input_dir:~-1!"=="\" set "input_dir=!input_dir:~0,-1!"
set "output_dir=!input_dir!_out"
REM 创建输出目录
if not exist "!output_dir!\" mkdir "!output_dir!" >nul 2>&1
echo 正在扫描视频文件,请稍候...
REM 定义视频扩展名列表
set "extensions=*.avi *.mp4 *.mkv *.mov *.wmv *.flv *.webm *.m4v *.3gp *.ts"
REM 获取文件总数并生成临时列表
set "temp_file=%temp%\%random%.tmp"
type nul > "%temp_file%"
set /a total=0
for /r "%input_dir%" %%f in (%extensions%) do (
echo %%f >> "%temp_file%"
set /a total+=1
)
if !total! equ 0 (
echo 未找到任何视频文件。
del "%temp_file%" >nul 2>&1
pause
exit /b
)
echo 共找到 !total! 个视频文件
echo ----------------------------
REM 字幕配置区域
set "FONT=font.ttf"
set "TEXT1=集集集集集集集集 ,"
set "TEXT2=信信信信信信信信:"
set "TEXT3=+8+8+8+8+8+8"
set "SPEED=10"
set "SPACING=100"
REM 处理文件并显示进度
set /a processed=0
for /f "usebackq delims=" %%f in ("%temp_file%") do (
set /a processed+=1
set "input_file=%%f"
set "output_path=!input_file:%input_dir%=%output_dir%!"
REM 创建子目录结构(保留空格)
for %%A in ("!output_path!") do set "out_dir=%%~dpA"
if not exist "!out_dir!" (
mkdir "!out_dir!" >nul 2>&1 || (
echo [错误] 无法创建目录: "!out_dir!"
pause
exit /b 1
)
)
echo [处理中] [!processed!/!total!] 正在处理 "!input_file!"
REM 执行FFmpeg命令
ffmpeg -hwaccel auto -i "!input_file!" ^
-vf "drawtext=fontfile='!FONT!':text='!TEXT1!':fontsize=min(w\,h)/10:fontcolor=red:x='w - mod(t-2\,!SPEED!)*(w + text_w)/!SPEED!':y='h/2 - text_h - !SPACING!':enable='gte(t,2)*lte(t,2147483647)',drawtext=fontfile='!FONT!':text='!TEXT2!':fontsize=min(w\,h)/10:fontcolor=red:x='w - mod(t-2\,!SPEED!)*(w + text_w)/!SPEED!':y='h/2':enable='gte(t,2)*lte(t,2147483647)',drawtext=fontfile='!FONT!':text='!TEXT3!':fontsize=min(w\,h)/10:fontcolor=red:x='w - mod(t-2\,!SPEED!)*(w + text_w)/!SPEED!':y='h/2 + text_h + !SPACING!':enable='gte(t,2)*lte(t,2147483647)'" ^
-c:a copy -f mp4 "!output_path!" -y >nul 2>&1
REM 错误处理
if errorlevel 1 (
echo [错误] 处理失败:!input_file!
) else (
echo 成功生成:!output_path!
)
)
del "%temp_file%" >nul 2>&1
echo ----------------------------
echo 所有文件处理完成!
echo 输出目录:!output_dir!
pause
|