Bir FAST kanalının logosu — köşedeki küçük işaret — kanalın yayınladığı her programda, her reklam arasında, her tabloda görsel bir sabittir. Bir izleyicinin alabileceği her kalite seviyesinde profesyonel görünmesi gerekir. Tek bir ana görseli yükleyip AWS MediaLive'ın her bir sunum için ölçeklendirmesine izin veren basit yaklaşım, 1080p'de keskin bir logo, 360p'de ise gözle görülür derecede yumuşak bir logo üretir. Bu, genişbanta sahip olmayan her izleyici için bir marka sorunudur. İşte biz logonun boyutunu her sunumun tam piksel ızgarasına nasıl ayarladığımız.
Hızlı Genel Bakış
| Yön | Detay |
|---|---|
| Etki Alanı | FAST kanallarında kanal logosu (DOG) yerleşimi |
| Mekanizma | Her sunum için (1080p, 720p, 480p, 360p) çıktı başına StaticImageOutputActivate |
| Varlık Oluşturma | Lanczos yeniden örneklemesi kullanan Python betiği |
| Etkinleştirme Zamanlaması | Her programın girdi geçişinden 1.5 saniye sonra |
| Durum | Üretimde 1× sunum başına yığın |
İş Problemi
Bir FAST kanalı tek bir kalite seviyesi sunmaz. MediaLive, aynı kanalı birden fazla sunuma kodlar — 1080p, 720p, 480p, 360p — ve her izleyicinin oynatıcısı bağlantısının destekleyebileceği en iyisini seçer. Mobil veri kullanan izleyiciler 360p izler; genişbant kullanan akıllı TV izleyicileri 1080p alır. Hepsi aynı marka işaretine bakıyor ve hepsi profesyonel görünmesini bekliyor. Logo 1080p'de keskin, 360p'de gözle görülür şekilde yumuşak olduğunda, marka tutarsız olur — logonun tek bir programdan daha fazla görüldüğü 7/24 bir kanalda bu önemsiz bir detay değildir.
Yerleşimler Gerçekte Nerede Uygulanır
Çoklu sunumlu bir kodlayıcı hattında, bir yerleşim iki yere uygulanabilir:
Sunum başına ölçekleyiciden önce, burada bir ana görsel kaynağa birleştirilir ve tümü çıktı başına küçültülür — MediaLive bunu global bir StaticImageActivate eylemiyle yapar
Ölçekleyici sonrasında, burada her çıktı, tuval zaten son boyutuna ulaştığında kendi yerleşimini alır. API'de fark küçük görünür. Görsel olarak ise öyle değildir. Ölçekleyiciden önce birleştirilen her şey, ölçekleyicinin getirdiği her türlü kusuru miras alır ve 360p'de ölçekleyici agresiftir.

Açık Çözümler Neden Başarısız Olur
"Tek bir ana görsel yükleyin ve MediaLive'ın ölçeklendirmesine izin verin." Global eylem, ana görseli çıktı başına ölçekleyici çalışmadan önce birleştirir. 360p için 64×21 piksel boyutunda bir logoya küçültülen büyük bir ana görsel, yaklaşık 40 kat küçültme demektir — Lanczos yeniden örneklemesi bile bu oranda ince detayları kaybeder ve sonuç daha sonra videonun kendisiyle aynı sıkıştırma zincirinden geçer.
"Daha büyük bir ana görsel kullanın." Bu, küçültme oranını daha büyük yapar, daha küçük değil — kusur daha kötüye gider, daha iyiye değil.
"SD çıktılarında logoyu atlayın." Uyumluluk ve marka gereksinimleri, işareti her sunumda talep eder. Bir seçenek değil.
"Logoyu kodlama sırasında kaynak videoya işleyin." Tüm operasyonel kaldıraçları kaybeder — kampanya veya bölge bazında logo değişiklikleri olmaz ve tüm kütüphaneyi yeniden kodlamadan güncelleme yapılamaz.
"Çözünürlük başına manuel koordinatlarla global bir yerleşim kullanın." Global eylem, konumu sabit 1920×1080 referansına göre hesaplar, bu nedenle bundan daha dar kaynak videolar, tuval dışı koordinatlar üretir — logo köşeden kayar veya kırpılır.
Asıl kaldıraç, MediaLive'ın yerleşim ölçeklendirmesini tamamen atlamaktı: kodlayıcı ona dokunmadan önce, logoyu her bir sunumun tuvaline kendimiz boyutlandırmak.
Çözüm
Her sunumun logosu, tam piksel boyutlarına önceden işlenir ve ayrı bir PNG olarak depolanır. Her program sınırında, bir Lambda orkestratörü dört adet StaticImageOutputActivate eylemi — sunum başına bir tane — yayınlar ve her biri o belirli çıktı için zaten boyutlandırılmış olan PNG'yi işaret eder. MediaLive, yerleşim üzerinde sıfır ölçeklendirme yapar.
GLOBAL (naive) PER-OUTPUT (what we ship)
master.png ──► composite onto master.png ──► Lanczos resize (offline)
source canvas into 4 exact-size PNGs
│ │
▼ ▼
per-rendition scaler per-rendition scaler
(also scales the (overlay isn't touched —
overlay → soft logo composited after, at
on SD outputs) exact pixel size)Bir Python betiği, tek bir ana görselden Lanczos yeniden örneklemesi kullanarak dört boyutlandırılmış PNG oluşturur; bu, piksel kalitesi yarışmasını kazanmaktan ziyade küçük boyutlarda öngörülebilir, tekrarlanabilir davranış için seçilmiştir. Her logo, tuval genişliğinin yaklaşık %10'una denk gelir — göze çarpmadan görünür — ve yeni bir sunum eklemek, tek bir dizi girişi artı yeni bir PNG anlamına gelir.
Adı Geçmeye Değer Temel Kararlar
1.5 saniyelik etkinleştirme gecikmesi. Filigran açma eylemleri, her girdi geçişinden 1.5 saniye sonra ateşlenir, tam geçiş anında değil — anında etkinleştirme henüz stabil olmayan karelere karşı titreşime neden olabilir. Değer deneysel olarak ayarlandı ve tek bir sabit olarak merkezileştirildi, böylece gelecekteki ayarlamalar tek satırlık bir değişiklik olur.
Çevrimdışı, insan tetiklemeli varlık oluşturma — kasıtlı olarak. Lanczos yeniden boyutlandırma hattı, bir derleme adımı veya CDN tarafı dönüşümü olarak otomatikleştirilmemiştir. Logo varlıkları o kadar nadiren değişir ki, tek bir komutla yeniden oluşturma doğru otomasyon miktarıdır; daha fazla otomasyon inşa etmenin maliyeti, yılda iki kez bir betik çalıştırmaktan daha fazladır.
Bir "kalın" varyantı mevcut ancak gönderilmiyor. Oluşturucu ayrıca, düşük SD bit hızlarında H.264 nicelemesinden sağ çıkması amaçlanan, daha kalın vuruşlara sahip genişletilmiş alfa varyantı da üretir. Üretimde değil — standart varyant mevcut bit hızı aralığı için yeterlidir ve henüz hiçbir ölçüm geçişi haklı çıkarmamıştır. Kod testli bir bekleme olarak mevcut: kullanılabilir tutmak ucuz, göndermek için erken.
Hala Takip Ettiklerimiz
Hiçbir üretim video hattı gerçekten bitmiş sayılmaz ve zamanla bu yaklaşımı iyileştirmek için hala fırsatlar var.
Mevcut uygulama, her sunumun kendi çıktı çözünürlüğü için özel olarak hazırlanmış bir logo almasını sağlayarak MediaLive hattından çalışma zamanı yerleşim ölçeklendirmesini ortadan kaldırır. Ancak son görünüm, özellikle düşük bit hızlarında, her sunumun çözünürlüğü ve video sıkıştırmasıyla doğal olarak sınırlıdır. Akış profilleri geliştikçe, farklı logo işlemlerinin bu koşullar altında ölçülebilir görsel faydalar sağlayıp sağlamadığını değerlendirmeye devam edeceğiz.
Varlık oluşturucu zaten hem standart hem de daha kalın bir logo varyantını desteklemektedir. Gelecekteki testler, kalın versiyonun daha düşük bit hızlı sunumlar için daha iyi performans gösterdiğini ortaya koyarsa, logo varyantı seçimini yapılandırma tabanlı hale getireceğiz, böylece uygulama yeniden dağıtılmadan değiştirilebilir.
Sonuçlar
Artık her sunum, MediaLive'ın sıfır çalışma zamanı yerleşim ölçeklendirmesi yapmasıyla, kendi tuvali için özel olarak boyutlandırılmış bir logo alır. Her çıktı, hedef çözünürlüğü için hazırlanmış çizimi kullanır, çalışma zamanı yerleşim ölçeklendirmesiyle getirilen ek yumuşamayı önlerken, sunumun sağlayabileceği en iyi pratik görsel kaliteyi korur.
Logoların 1920 pikselden daha dar kaynak videolarda kayabildiği önceki global yerleşim yaklaşımındaki koordinat kayması hatası, çıktı başına etkinleştirme tamamen çıktı koordinatlarında çalıştığı için yapısal olarak ortadan kaldırılmıştır.
Logoyu değiştirmek artık basit bir operasyonel görevdir: sunuma özgü varlıkları tek bir betikle yeniden oluşturun ve yükleyin. Video yeniden kodlamaya veya sunum başına manuel düzenlemeye gerek yoktur.
Bu uygulama, basit bir mühendislik prensibini takip eder: sorunları mümkün olduğunca erken bir aşamada çözmek ve aşağı akış geçici çözümlerine güvenmek yerine platformun yetenekleri etrafında tasarım yapmak. Kodlamadan önce doğru varlığı hazırlayarak, canlı hat daha basit, daha öngörülebilir ve bakımı daha kolay kalır.
Canlı bir video hattında benzer sunum veya yerleşim kalitesi sorunlarıyla karşılaşıyorsanız, bize ulaşın.
Teknoloji Yığını: AWS MediaLive · AWS Lambda · AWS S3 · NestJS · TypeScript · Python (Pillow)

