İçeriğe geç
Tüm projeler
AraçlarAçık kaynak

Rust ASCII Terminal Video Engine

Medya akışlarını yakalayan, FFmpeg ile donanım hızlandırmalı kare (frame) çıkarımı yapan ve terminal üzerinde izole bir ses thread'i ile senkronize edilmiş gerçek zamanlı ASCII render işlemi gerçekleştiren multithreaded Rust CLI motoru.

Teknoloji yığını

Diller
Çatılar & kütüphaneler

Performans & metrikler

  • Sıfır GUI ek yükü; render verimi (throughput) GPU hızlandırmasından ziyade tamamen CPU'ya bağlıdır (CPU-bound) ve terminal stdout buffer'ını boşaltma (flush) hızına dayanır
  • Saf sabit aralıklı thread bloklamaları yerine (naive fixed-interval), geçen epoch deltalarını (duration_since(start)) sürekli olarak yeniden hesaplayıp dengeleyerek audio drift (ses kayması) problemini elimine eder

Neden geliştirdim?

Standart GUI medya oynatıcıları, basit medya tüketimi için devasa render ek yükleri (overhead) oluşturur. Bu aracı, terminal tabanlı render operasyonlarını ve eşzamanlı Ses/Görüntü (A/V) senkronizasyonunu (synchronization) düşük seviyede (low-level) incelemek için geliştirdim. Ağ üzerinden indirme aşamasından kare ayrıştırmasına kadar olan hattı otomatikleştirip, ham pikselleri ASCII karakterlerine haritalamak için özel bir luma (parlaklık) matrisi kullanarak geleneksel OS grafik işleme hatlarını tamamen bypass eder.

Mimari & kararlar

Orkestratör, medya I/O işlemleri ve ayrıştırma için sistem kancaları (system hooks) ile yt-dlp ve ffmpeg alt süreçlerini (subprocess) yönetir. Kusursuz A/V senkronizasyonu için mimari, execution'ı işletim sistemi thread'lerine böler: rodio üzerinden izole edilmiş bir ses havuzu (sink) ve ana video render döngüsü. Render döngüsü, std::time::Instant kullanarak sabit kare hızına (30 FPS) karşı milisaniye altı deltalar hesaplar. Uzamsal piksel yoğunluğunu önceden tanımlanmış bir ASCII yoğunluk dizisine (density array) map'lemek için Rec. 601 luma formülünü (0.299R + 0.587G + 0.114B) uygular ve ortaya çıkan buffer'ı crossterm ANSI escape dizileri aracılığıyla doğrudan stdout'a basar.

Temel özellikler

  1. 01yt-dlp ve ffmpeg alt süreçleri ile OS seviyesinde otonom medya indirme (ingestion) ve decode etme hattı
  2. 02Rec. 601 göreceli parlaklık (relative luminance) standardını kullanan matematiksel pixel-to-ASCII yoğunluk haritalaması
  3. 03Dinamik thread uyutma (dynamic thread sleeping) mekanizması ile katı frame-time deltaları zorlayan multithreaded A/V senkronizasyon motoru
  4. 04Donanımdan bağımsız çalışan, frame-buffer temizleme (clear) ve çizim operasyonlarını tamamen CLI ortamında yürüten terminal render mimarisi