能否在CMD提示符可靠运行ASCII文本视频 如何实现帧率同步
CMD ASCII视频播放问题修复方案
原实现梳理
你已完成的操作如下:
- 用FFMPEG提取视频帧为JPG文件,对应脚本
JPEGCompiler.bat(拆帧脚本):
@echo off set /p video=Drag Video into Console (Currently Limited to C:/): ffmpeg -i %video% -an -f image2 "output_%%05d.jpg"
需提前安装FFMPEG并配置环境变量。
2. 生成JPG帧列表脚本Jpglist.bat:
dir /B *.jpg >> JPEGList.txt
- 批量转换JPG为ASCII文本脚本
JPEGCompiler.bat:
@echo off setlocal enableextensions enabledelayedexpansion set cycles=0 cd> CD.txt for /F "delims=" %%i in (CD.txt) do set "CD=%%i" for /F "delims=" %%i in (CDD.txt) do set "CD=%%i" type cd.txt | sed "s/C://">> CDD.txt :startpoint set "xprvar=" for /F "skip=%cycles% delims=" %%i in (JPEGList.txt) do if not defined xprvar set "xprvar=%%i" set /a cycles=cycles+1 ascii-image-converter.exe %CDD%%xprvar% --save-txt . goto startpoint
- 生成ASCII文本帧列表脚本
Textlist.bat:
dir /B *.txt >> TextList.txt
- 原始播放脚本
TEXTCompiler.bat存在卡顿、不同步问题。
问题修复方案
1. 固定播放位置+避免帧截断
弃用cls清屏命令,改用VT100转义序列移动光标到屏幕左上角,直接覆盖上一帧内容,既不会触发清屏闪烁截断,也不会出现内容滚动。Win10 1511及以上版本CMD默认支持该特性,无需额外安装工具。
2. 帧率同步+稳定播放
- 弃用
skip遍历文件列表的逻辑,该逻辑每次循环都要重新读取列表跳过已读行,耗时随播放进度增加,是速度不稳定的核心原因,改为一次性读取所有帧文件名到数组遍历 - 弃用
waitfor做延迟,改用毫秒级精准延迟,同时加时间校验抵消累积误差,保证播放速度和原视频帧率一致
修复后的播放脚本
@echo off setlocal enableextensions enabledelayedexpansion :: 配置参数:原视频帧率、控制台宽高(和ASCII帧尺寸匹配即可) set "fps=30" set /a "frame_interval=1000/fps" mode con cols=100 lines=35 color 02 :: 获取ESC转义字符 for /F %%a in ('echo prompt $E ^| cmd') do set "ESC=%%a" :: 隐藏光标避免闪烁 echo !ESC
