欢迎回来

登录 EAKE AI,继续您的智能之旅

忘记密码?
还没有账号?立即注册

ASCII 视频

ASCII 视频

ASCII 视频:将视频/音频转换为彩色 ASCII 动画

ASCII 视频制作流水线

使用场景

当用户提出以下请求时使用:ASCII 视频、文本艺术视频、终端风格视频、字符艺术动画、复古文本可视化、ASCII 音频可视化、将视频转换为 ASCII 艺术、矩阵风格特效,或任何动画 ASCII 输出。

内部内容

ASCII 艺术视频的制作流水线——支持任意格式。可将视频/音频/图像/生成式输入转换为彩色 ASCII 字符视频输出(MP4、GIF、图像序列)。涵盖:视频转 ASCII、音频响应式音乐可视化、生成式 ASCII 艺术动画、视频+音频混合响应、文本/歌词叠加、实时终端渲染。

创意标准

这是视觉艺术。ASCII 字符是媒介;电影是标准。

在编写任何一行代码之前,先阐明创意概念。氛围是什么?它讲述了怎样的视觉故事?是什么让「这个」项目不同于其他任何 ASCII 视频?用户的提示词只是起点——用创意野心去诠释它,而不是逐字照搬。

首次渲染即达卓越,绝无妥协。输出必须无需多轮修改即具有视觉冲击力。如果画面看起来平庸、平淡,或像「AI 生成的 ASCII 艺术」,那就是错的——在交付前重新思考创意概念。

超越参考词汇表。参考中的特效目录、着色器预设和调色板库只是起始词汇。每个项目都应组合、修改并创造新的模式。目录只是一盒颜料——画作由你来完成。

主动发挥创意。当项目需要时,扩展技能的词汇表。如果参考中没有视觉构想所需的内容,就亲手构建它。至少加入一个用户没有要求但会欣赏的视觉瞬间——一个转场、一个特效、一个能提升整体作品的色彩选择。

美学整体性高于技术正确性。视频中的所有场景必须由统一的视觉语言联系在一起——共享的色温、相关联的字符调色板、一致的运动词汇。一个技术上正确但每个场景都使用随机不同特效的视频,在美学上是失败的。

致密、分层、深思熟虑。每一帧都应值得细看。绝不使用纯黑背景。始终采用多网格构图。始终进行逐场景变化。始终有意图地运用色彩。

模式

模式输入输出参考
**视频转 ASCII**视频文件对源素材的 ASCII 再现`references/inputs.md` § 视频采样
**音频响应式**音频文件由音频特征驱动的生成式视觉`references/inputs.md` § 音频分析
**生成式**无(或种子参数)程序化 ASCII 动画`references/effects.md`
**混合模式**视频 + 音频带音频响应式叠加的 ASCII 视频两份输入参考
**歌词/文本**音频 + 文本/SRT带视觉特效的定时文本`references/inputs.md` § 文本/歌词

技术栈

每个项目使用一个独立的 Python 脚本。无需 GPU。

**TTS 旁白**文本引言 + TTS API带打字文本的旁白引言/名言视频`references/inputs.md` § TTS 集成
工具用途
核心Python 3.10+、NumPy数学运算、数组操作、向量化特效
信号SciPyFFT、峰值检测(音频模式)
成像Pillow (PIL)字体光栅化、帧解码、图像 I/O
视频 I/Offmpeg (CLI)解码输入、编码输出、混流音频
并行concurrent.futuresN 个 worker 用于批量/片段渲染
TTSElevenLabs API(可选)生成旁白音频片段

流水线架构

每种模式都遵循相同的 6 阶段流水线:


INPUT → ANALYZE → SCENE_FN → TONEMAP → SHADE → ENCODE
  • INPUT —— 加载/解码源素材(视频帧、音频采样、图像,或无)
  • ANALYZE —— 提取逐帧特征(音频频段、视频亮度/边缘、运动向量)
  • SCENE_FN —— 场景函数渲染到像素画布(uint8 H,W,3)。通过 _render_vf() + 像素混合模式组合多个字符网格。参见 references/composition.md
  • TONEMAP —— 基于百分位的自适应亮度归一化。参见 references/composition.md § 自适应色调映射
  • SHADE —— 通过 ShaderChain + FeedbackBuffer 进行后处理。参见 references/shaders.md
  • ENCODE —— 将原始 RGB 帧通过管道传给 ffmpeg 进行 H.264/GIF 编码
  • 创意指导

    美学维度

    可选OpenCV视频帧采样、边缘检测
    维度选项参考
    **字符调色板**密度阶梯、块元素、符号、文字系统(片假名、希腊字母、卢恩字母、盲文)、项目专属`architecture.md` § 调色板
    **色彩策略**HSV、OKLAB/OKLCH、离散 RGB 调色板、自动生成和谐色、单色、色温`architecture.md` § 色彩系统
    **背景纹理**正弦场、fBM 噪声、域扭曲、voronoi、反应扩散、元胞自动机、视频`effects.md`
    **主要特效**圆环、螺旋、隧道、涡流、波浪、干涉、极光、火焰、SDF、奇怪吸引子`effects.md`
    **粒子**火花、雪花、雨、气泡、符文、轨道、群集 boids、流场跟随者、拖尾`effects.md` § 粒子
    **着色器氛围**复古 CRT、简洁现代、故障艺术、电影感、梦幻、工业、迷幻`shaders.md`
    **网格密度**xs(8px) 至 xxl(40px),逐层混合`architecture.md` § 网格系统
    **坐标空间**笛卡尔、极坐标、平铺、旋转、鱼眼、莫比乌斯、域扭曲`effects.md` § 变换
    **反馈**缩放隧道、彩虹拖尾、幽灵回声、旋转曼陀罗、色彩演化`composition.md` § 反馈
    **遮罩**圆形、圆环、渐变、文本模板、动画光圈/擦除/溶解`composition.md` § 遮罩

    逐段落变化

    绝不对整段视频使用同一配置。对每个段落/场景:

  • 不同的背景特效(或组合 2-3 种)
  • 不同的字符调色板(契合氛围)
  • 不同的色彩策略(至少换一种色相)
  • 变化着色器强度(高潮段落增加 bloom,安静段落增加颗粒感)
  • 如果启用了粒子,则使用不同类型的粒子
  • 项目专属创新

    每个项目至少创造以下之一:

  • 一套契合主题的自定义字符调色板
  • 一种自定义背景特效(组合/修改现有构建块)
  • 一套自定义色彩调色板(契合品牌/氛围的离散 RGB 集合)
  • 一套自定义粒子字符集
  • 一种新颖的场景转场或视觉瞬间
  • 不要只是从目录中挑选。目录只是词汇——诗由你来写。

    工作流程

    第 1 步:创意构想

    在编写任何代码之前,先阐明创意概念:

  • 情绪/氛围:观众应该感受到什么?充满活力、冥想宁静、混乱无序、优雅、不祥?
  • 视觉故事:在整段时间里发生了什么?累积张力?转变?消解?
  • 色彩世界:暖色调/冷色调?单色?霓虹?大地色系?主导色相是什么?
  • 字符质感:密集的数据?稀疏的星点?有机的圆点?几何的方块?
  • 是什么让「这个」与众不同:让这个项目独一无二的那一件事是什么?
  • 情感弧线:场景如何推进?以能量开场,推向高潮,然后收束?
  • 将用户的提示词映射为美学选择。一个「轻松的 lo-fi 可视化」与一个「故障赛博朋克数据流」对一切的要求都截然不同。

    第 2 步:技术设计

  • 模式 —— 上述 6 种模式中的哪一种
  • 分辨率 —— 横屏 1920x1080(默认)、竖屏 1080x1920、方形 1080x1080 @ 24fps
  • 硬件检测 —— 自动检测核心数/内存,设置质量档位。参见 references/optimization.md
  • 段落划分 —— 将时间戳映射到场景函数,每个场景拥有自己的特效/调色板/色彩/着色器配置
  • 输出格式 —— MP4(默认)、GIF (640x360 @ 15fps)、PNG 序列
  • 第 3 步:构建脚本

    单个 Python 文件。组件(附参考):

  • 硬件检测 + 质量档位 —— references/optimization.md
  • 输入加载器 —— 取决于模式;references/inputs.md
  • 特征分析器 —— 音频 FFT、视频亮度或合成特征
  • 网格 + 渲染器 —— 带位图缓存的多密度网格;references/architecture.md
  • 字符调色板 —— 每个项目多套;references/architecture.md § 调色板
  • 色彩系统 —— HSV + 离散 RGB + 和谐色生成;references/architecture.md § 色彩
  • 场景函数 —— 每个返回 canvas (uint8 H,W,3)references/scenes.md
  • 色调映射 —— 自适应亮度归一化;references/composition.md
  • 着色器流水线 —— ShaderChain + FeedbackBufferreferences/shaders.md
  • 场景表 + 分发器 —— 时间 → 场景函数 + 配置;references/scenes.md
  • 并行编码器 —— 使用 ffmpeg 管道的 N-worker 片段渲染
  • 主程序 —— 编排完整流水线
  • 第 4 步:质量验证

  • 先测试帧:在完整渲染前,先在关键时间戳渲染单帧
  • 亮度检查:所有 ASCII 内容满足 canvas.mean() > 8。如果偏暗,降低 gamma
  • 视觉一致性:所有场景看起来是否属于同一部视频?
  • 创意构想检查:输出是否符合第 1 步的概念?如果看起来平庸,回到上一步
  • 关键实现注意事项

    亮度 —— 使用 `tonemap()`,而非线性乘数

    这是头号视觉问题。黑底上的 ASCII 天生偏暗。绝不使用 canvas * N 乘数——它们会裁剪高光。使用自适应色调映射:

    
    def tonemap(canvas, gamma=0.75):
        f = canvas.astype(np.float32)
        lo, hi = np.percentile(f[::4, ::4], [1, 99.5])
        if hi - lo < 10: hi = lo + 10
        f = np.clip((f - lo) / (hi - lo), 0, 1) ** gamma
        return (f * 255).astype(np.uint8)
    

    流水线:scene_fn() → tonemap() → FeedbackBuffer → ShaderChain → ffmpeg

    逐场景 gamma:默认 0.75,负片化(solarize)0.55,色调分离(posterize)0.50,明亮场景 0.85。深色图层使用 screen 混合(而非 overlay)。

    字体单元格高度

    macOS 上的 Pillow:textbbox() 返回的高度不正确。请使用 font.getmetrics()cell_height = ascent + descent。参见 references/troubleshooting.md

    ffmpeg 管道死锁

    绝不与长时间运行的 ffmpeg 一起使用 stderr=subprocess.PIPE——缓冲区在 64KB 处填满并导致死锁。请重定向到文件。参见 references/troubleshooting.md

    字体兼容性

    并非所有 Unicode 字符都能在所有字体中渲染。在初始化时验证调色板——渲染每个字符,检查是否有空白输出。参见 references/troubleshooting.md

    逐片段架构

    对于分段视频(引言、场景、章节),将每段渲染为独立的片段文件,以便并行渲染和选择性重渲染。参见 references/scenes.md

    性能目标

    **转场**交叉淡入淡出、擦除、溶解、故障切换、光圈、基于遮罩的揭示`shaders.md` § 转场
    组件预算
    特征提取1-5ms
    特效函数2-15ms
    字符渲染80-150ms(瓶颈)
    着色器流水线5-25ms

    参考资料

    **总计**约 100-200ms/帧
    文件内容
    `references/architecture.md`网格系统、分辨率预设、字体选择、字符调色板(20+ 套)、色彩系统(HSV + OKLAB + 离散 RGB + 和谐色生成)、`_render_vf()` 辅助函数、GridLayer 类
    `references/composition.md`像素混合模式(20 种)、`blend_canvas()`、多网格合成、自适应 `tonemap()`、`FeedbackBuffer`、`PixelBlendStack`、遮罩/模板系统
    `references/effects.md`特效构建块:值场生成器、色相场、噪声/fBM/域扭曲、voronoi、反应扩散、元胞自动机、SDF、奇怪吸引子、粒子系统、坐标变换、时间相干性
    `references/shaders.md``ShaderChain`、`_apply_shader_step()` 分发、38 种着色器目录、音频响应式缩放、转场、色调预设、输出格式编码、终端渲染
    `references/scenes.md`场景协议、`Renderer` 类、`SCENES` 表、`render_clip()`、节拍同步剪辑、并行渲染、设计模式(图层层级、方向弧线、视觉隐喻、构图技法)、各个复杂度级别的完整场景示例、场景设计检查清单
    `references/inputs.md`音频分析(FFT、频段、节拍)、视频采样、图像转换、文本/歌词、TTS 集成(ElevenLabs、语音分配、音频混音)
    `references/optimization.md`硬件检测、质量档位、向量化模式、并行渲染、内存管理、性能预算

    ---

    创意发散(仅在用户要求实验性/创意性/独特输出时使用)

    如果用户要求创意性、实验性、令人惊喜或非常规的输出,请选择最合适的策略,并在生成代码之前推演其步骤。

  • 强制关联——当用户想要跨领域灵感时(「让它看起来有机」「工业美学」)
  • 概念融合——当用户点名要组合两种事物时(「海洋遇上音乐」「太空 + 书法」)
  • 斜向策略——当用户完全开放时(「给我惊喜」「我从没见过的东西」)
  • 强制关联

  • 选择一个与视觉目标无关的领域(天气系统、微生物学、建筑学、流体力学、纺织编织)
  • 列出其核心视觉/结构元素(侵蚀 → 渐进揭示;有丝分裂 → 分裂复制;编织 → 互锁图案)
  • 将这些元素映射到 ASCII 字符和动画模式上
  • 综合——「侵蚀」或「结晶」在字符网格中是什么样子?
  • 概念融合

  • 命名两个不同的视觉/概念空间(例如:海浪 + 乐谱)
  • 建立对应关系(波峰 = 高音,波谷 = 休止符,泡沫 = 断音)
  • 有选择地融合——保留最有趣的映射,舍弃牵强的
  • 发展只存在于融合之中才会显现的涌现属性
  • 斜向策略

  • 抽取一条:「将错误视为隐藏的意图加以尊重」/「使用一个旧想法」/「你最亲密的朋友会怎么做?」/「强调缺陷」/「把它倒过来」/「只要一部分,不要全部」/「反转」
  • 针对当前的 ASCII 动画挑战解读该指令
  • 在编写代码之前,将这一横向洞见应用于视觉设计
  • `references/troubleshooting.md`NumPy 广播陷阱、混合模式坑、多进程/序列化、亮度诊断、ffmpeg 问题、字体问题、常见错误

    安装指南

    复制下方命令,在终端运行即可安装:

    # 安装到当前项目
    npx skills add ascii-video
    # 全局安装 — 所有项目可用
    npx skills add ascii-video -g
    ⚡ 一键安装到 GenHub

    需已安装 GenHub 桌面端

    使用指南

    安装完成后,在对话框中直接使用此技能。

    基本信息
    作者 Community 分类 agent 难度 Intermediate 时长 1 hour
    🛠️ 安装命令
    # 安装到当前项目
    npx skills add ascii-video
    # 全局安装
    npx skills add ascii-video -g

    发表评论