finnmckenty/NTSCRT

GitHub: finnmckenty/NTSCRT

一款 macOS 原生应用,通过集成 ntsc-rs 信号模拟和 RetroArch CRT 着色器,将图像与视频转换为八十年代模拟电视/VHS 风格。

Stars: 3 | Forks: 0

# NTSCRT ![NTSCRT — 左侧为完整的 VHS + CRT pipeline,右侧为原始素材](https://static.pigsec.cn/wp-content/uploads/repos/cas/18/18b2fb464754515466db388c538f23071bd59a290c81e70b145c2eeb339fc210.webp) **让任何图像或视频看起来就像是在 20 世纪 80 年代的电视上播放的一样。** NTSCRT 会将你的媒体通过真实的模拟信号模拟([ntsc-rs](https://github.com/ntsc-rs/ntsc-rs) —— 复合伪影、磁带噪点、磁头切换),然后再通过 RetroArch 的 CRT shader(通过 [librashader](https://github.com/SnowflakePowered/librashader) —— 扫描线、荧光粉掩模、辉光),其帧画面效果与 RetroArch 本身完全一致。 事先声明:**这是由两个更加出色的项目拼凑而成的。** 所有真正的图像魔法都归功于 ntsc-rs 和 RetroArch shader 社区;NTSCRT 只是一个原生的 Mac 界面,将它们连接到了一个 pipeline 中: ``` your image/video → NTSC/VHS signal degradation (full res) → downscale to retro resolution → CRT shader → screen ``` ## 下载 从 [**Releases**](../../releases/latest) 获取 DMG 文件,打开它,然后将 **NTSCRT** 拖入“应用程序”。 **系统要求:** macOS 14 或更高版本,Apple Silicon(M1 或更新机型)。 ## 使用应用 所有选项都位于左侧边栏中,从上到下按 pipeline 顺序排列: - **Source** — 打开或拖入图像(PNG/JPEG/HEIC)或视频(MP4/MOV)。视频会显示帧滑动条和一个 ▶ 播放按钮,可在应用所有特效的情况下预览播放。 - **Downscale** — CRT shader 看到的复古分辨率(SNES 256×224,VGA 320×240,或自定义)以及重采样方法。Nearest 保持像素的锐利感;Area 是平滑的中性选择。 - **VHS (ntsc-rs)** — 模拟信号阶段:复合噪点、色度溢出、磁头切换、循迹噪点、磁带速度、边缘波动以及其他大约六十多种设置。这些是 ntsc-rs 自带的设置 —— 其预设 JSON 可以与 [ntsc-rs 桌面应用](https://github.com/ntsc-rs/ntsc-rs/releases)双向复制/粘贴。 - **Shader** — 七种 RetroArch CRT 预设(crt-royale、crt-hyllian、crt-aperture、crt-easymode、两种 crtglow 变体、crtsim),并公开了所有 runtime 参数。灰色的控件会告诉你需要激活哪个开关才能使用它们 —— 许多 CRT 参数仅在其对应功能(曲率、掩模、几何模式等)开启时才生效。 - **View** — **Compare** 会拆分预览:分割线左侧为完整的 pipeline 效果,右侧为原始素材;可以拖动该分割线。**Integer scale** 将图像锁定为整数像素倍数,以获得完美均匀的扫描线。**Animate** 会持续运行预览,使得磁带噪点、抖动和交错效果能够真实地运动 —— 开启它以获得最真实的体验。使用滑动条(或 ⌥-滚动)进行缩放,放大时按住空格键可平移画面。 - **Export** — 静态图像导出为 PNG,视频导出为 MP4(包含音频),分辨率任你选择。导出是确定性的:相同的设置 + 相同的帧 = 相同的像素。 - **Look** — 将你的整个配置(downscale + VHS + shader + view)保存为 JSON 文件,以便日后重新加载。 **提示** - 滑动条旁边的每个数值实际上都是一个文本框 —— 点击即可输入精确的数字。 - 这种特效在游戏美术风格的内容上表现最佳:深色场景、明亮的精灵图、硬边缘。照片也可以,但模拟伪影在对比度强的地方最明显。 - 高分辨率素材:在 VHS 面板中开启 **Scale → Scale with video size**,以便伪影大小能匹配你的输入,同时预计 NTSC 阶段处理每一帧的时间会更长。 ## 限制 - **仅限 Apple Silicon**,macOS 14+。无 Intel 版本。 - NTSC 阶段会在 CPU 上以你素材的完整分辨率运行 —— 如果开启 **Animate** 或在播放视频期间,4K+ 素材会明显降低预览帧率。但在导出时,始终会完整渲染每一帧。 - 视频预览播放重准确性而轻速度,在处理高强度画面时帧率可能低于原生 fps;导出的 MP4 则是全画质的。 - 少数 crt-royale 参数在 shader 本身中被编译期禁用了(标记为“static in this shader build”) —— 这些参数在 RetroArch 中同样不起作用。 - 没有撤销功能 —— 在进行大幅度的实验调整前,请务必先保存 Look。 ## 从源码构建 请参阅 [DEVELOPMENT.md](DEVELOPMENT.md) 了解完整的开发者设置(Swift + Rust 工具链、 vendored 依赖项、CLI 工具、release pipeline)。 ## 鸣谢 - [ntsc-rs](https://github.com/ntsc-rs/ntsc-rs) — NTSC/VHS 信号模拟(MIT/ISC/Apache-2.0) - [librashader](https://github.com/SnowflakePowered/librashader) 作者 SnowflakePowered — 兼容 RetroArch 的 shader runtime(MPL-2.0) - [libretro/slang-shaders](https://github.com/libretro/slang-shaders) 以及 RetroArch 社区 — CRT shader 本身:crt-royale 作者 TroggleMonkey,crt-easymode 和 crt-aperture 作者 EasyMode,crt-hyllian 作者 Hyllian,crtsim,crtglow(各种许可协议,主要为 GPL)
标签:CRT着色器, macOS应用, Rust, SwiftUI, 可视化界面, 图像处理, 复古滤镜, 网络流量审计, 视频处理