You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

bat批处理颜色代码异常 全屏/终止ffmpeg错乱及代码优化求助

故障原因

颜色错乱核心是两个问题:

  1. ANSI颜色转义码写法不规范:代码里直接写[32m、[0m这类片段,缺少最关键的ESC前缀(ASCII值为27的不可见控制字符),导致cmd终端无法正确识别颜色指令,设置的样式属性无法被正常解析、清除。
  2. 缺少样式重置逻辑:调用ffmpeg前手动开启了绿底高亮样式,但既没有在ffmpeg运行结束后主动重置终端默认样式,也没有处理用户按Ctrl+C终止脚本、窗口切换全屏触发控制台重绘的场景,残留的颜色属性会直接应用到整个窗口,出现满屏异色的错乱效果。

终端颜色错乱异常效果

修复&优化方案
  • 脚本开头预先获取ESC控制字符,定义好常用颜色常量和全局重置指令,避免手写转义码出错
  • 兼容Windows终端VT100转义规则,保证颜色指令在Win10/11的cmd环境下正常生效
  • 增加兜底重置逻辑:不管ffmpeg是正常跑完、还是被用户手动终止,都第一时间输出重置指令还原终端默认样式
  • 精简原代码冗余逻辑(比如重复的@echo off、无效分支判断),修复原日期时间拼接在不同系统区域设置下失效的问题,预留其他浏览器分支扩展位置
优化后完整代码
@echo off
setlocal enabledelayedexpansion
:: 初始化ANSI转义支持
for /f %%a in ('echo prompt $E ^| cmd') do set "ESC=%%a"
set "RESET=%ESC%[0m"
set "GREEN=%ESC%[32m"
set "BLUE=%ESC%[34m"
set "YELLOW=%ESC%[33m"
set "RED=%ESC%[31m"
set "BRIGHT_RED=%ESC%[1;31m"
set "BG_GREEN_BOLD=%ESC%[1;42m"

title Stream Recorder
cls
:: 启动时先重置终端样式,清历史残留
echo %RESET%Stream Recorder
echo(
echo %GREEN%1. Chrome%RESET%
echo %BLUE%2. Edge%RESET%
echo %YELLOW%3. Firefox%RESET%
echo %RED%4. Opera%RESET%
echo %BRIGHT_RED%5. Vivaldi%RESET%

:choice
set "choice="
set /p "choice=* Pick your browser (between 1-5): "
if not defined choice (
    echo Invalid input, try again.
    echo(
    goto choice
)
set "choice=%choice:~0,1%"
if "%choice%"=="1" goto chrome
:: 其余浏览器分支可参照chrome逻辑自行补全
echo "%choice%" is not valid, try again.
echo(
goto choice

:chrome
set "address="
set /p "address=* M3U8 Url: "
:: 校验URL连通性
for /f %%G In ('%__AppDir__%curl.exe -s -o NUL "%address%" -w "%%{http_code}\n"') Do set "response=%%G"
echo %response%
if not "%response%"=="200" (
    echo %RED%URL is not valid, try again.%RESET%
    echo(
    goto chrome
)
echo %GREEN%URL check was successful.%RESET%

:username
set "filename="
set /p "filename=* Streamer Name: "
echo(
:: 生成通用时间戳,规避系统区域设置差异导致的文件名错误
for /f "tokens=2 delims==" %%a in ('wmic os get localdatetime /value') do set "dt=%%a"
set "timestamp=%dt:~6,2%-%dt:~4,2%-%dt:~0,4%_%dt:~8,2%-%dt:~10,2%-%dt:~12,2%"
set "savepath=%~dp0%filename%_%timestamp%.mp4"

echo * Recording:%BG_GREEN_BOLD%
:: 调用ffmpeg,运行结束/中断后强制重置颜色
ffmpeg -v warning -hide_banner -stats -user_agent "" -i "%address%" -c copy "%savepath%"
echo %RESET%
pause
:: 脚本退出前最后一次重置,彻底避免样式残留
echo %RESET%
endlocal

内容的提问来源于stack exchange,提问作者Lary David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 23:48:23