WCAG 1.2.5 · AA Seviyesi · EN 301 549 9.1.2.5

Sesli Betimleme (Önceden Kaydedilmiş)

Önceden kaydedilmiş sesli videoların tamamı için sesli betimleme sunulmasını ister. Ana ses kanalında bulunmayan önemli görsel ayrıntılar anlatılır.

Kısaca

Sesli betimleme, ana ses kanalının söylemediği şeyleri kör ve az gören izleyicilere anlatan ikinci bir anlatımdır: odaya kim girdi, bir grafik nasıl görünüyor, hangi düğmeye tıklandı, ekranda hangi metin belirdi.

Bu kriter, senkronize medyadaki, yani sesli ve önceden kaydedilmiş tüm videolar için sesli betimleme ister. 1.2.3'ün AA düzeyindeki karşılığıdır. A düzeyinde sesli betimleme ile metin medya alternatifi arasında seçim yapabilirsiniz. AA düzeyinde ise sesli betimlemenin kendisi gerekir; yalnızca betimlemeli transkript artık yeterli değildir.

Neleri kapsar?

  • Önceden kaydedilmiş sesli videolar: Eğitim anlatımları, ürün tanıtımları, eğitim videoları, kayıtlı konuşmalar, röportajlar ve tanıtım filmleri; nereye gömülü olurlarsa olsunlar.
  • Neler betimlenir: Ses kanalının zaten söylemediği eylemler, kişiler, nesneler, sahne değişimleri ve ekrandaki metinler. Her ayrıntıyı değil, anlamak için önemli olanı anlatın.
  • Betimleme nereye girer: Ana ses kanalının doğal duraklarına; böylece diyalogun ya da anlatımın üstüne konuşmaz.
  • Betimleme gerekmeyen durum: Görüntüdeki önemli her şey zaten ana ses kanalında söyleniyorsa sesli betimleme gerekmez. Oraya ulaşmanın en iyi yolu, ana sesi kaydederken görüntüyü de anlatmaktır.
  • İki sunum yolu: Ses kanalında betimleme bulunan ayrı bir video sürümü ya da oynatıcının açabildiği ek bir ses kanalı.
  • İstisna: Medya, aynı sayfadaki bir metnin alternatifiyse ve bu açıkça belirtilmişse sesli betimleme gerekmez.
  • Kapsam dışı notlar: Altyazı 1.2.2, canlı medya 1.2.4, metin medya alternatifi 1.2.3 kapsamındadır. Daha uzun bir betimleme eklemek için videoyu durduran duraklar ("genişletilmiş sesli betimleme") AAA düzeyinde bir tekniktir ve burada zorunlu değildir.

Kimleri etkiler?

Kör ve az gören kullanıcılar videonun görsel kısmını sesli betimlemeyle takip eder. Sesli betimleme ayrıca izlemeden dinleyenlere (yemek yaparken ya da araba kullanırken), anlatılan bir görüntüden yarar sağlayan bilişsel ya da dikkat farklılıkları olan kullanıcılara ve konuya yeni olup görüntünün ne gösterdiğini anlayamayanlara da yardımcı olur.

EAA ve EN 301 549'da

Avrupa Erişilebilirlik Yasası (Direktif (AB) 2019/882) 28 Haziran 2025'ten sonra piyasaya sunulan kapsamdaki ürün ve hizmetler için geçerlidir. Yasanın 47. gerekçesi web siteleri ve mobil uygulamalar için dört ilkeyi sayar: algılanabilirlik, işletilebilirlik, anlaşılabilirlik ve sağlamlık. Sesli betimleme, bir videonun gösterdiklerine görmeden erişim sağlar ve algılanabilirliğin bir parçasıdır.

Teknik karşılığı EN 301 549 standardında bulunur. Standart, WCAG 1.2.5'i atıfla alır ve ortama göre ayrı maddelere dönüştürür. Ayrıca standardın 7. maddesi, video oynatıcıların kendisi için gereksinimler koyar.

WCAG 1.2.5'in EN 301 549'daki karşılıkları
MaddeOrtamNe ister?
9.1.2.5Web sayfalarıWeb içeriğinin WCAG 1.2.5 kriterini karşılamasını ister.
10.1.2.5Web dışı dokümanlar (PDF, Office dosyaları)Aynı kriterin dokümanlara gömülü videoya uygulanmasını ister.
11.1.2.5Web dışı yazılım (yerel mobil uygulamalar)Ekran okuyucuyu destekleyen yazılımda kriterin karşılanmasını ister.
7.2Video teknolojileri (sesli video gösteren oynatıcılar ve yazılımlar)Oynatıcının sesli betimlemeyi çalabilmesini, senkronize tutabilmesini ve video aktarılırken koruyabilmesini ister. Kullanıcıya bunu açma yolu da vermelidir.

Madde numaraları EN 301 549'un "9. + WCAG numarası" düzenine göredir. V3.2.1'de yazılım maddesi, açık ve kapalı işlevsellik için ayrı alt maddelere bölünmüştür; 7.2 ve 7.3 maddeleri de oynatma, senkronizasyon, koruma ve kullanıcı denetimleri için alt gereksinimlere ayrılır. Kaynak gösterirken tam numaraları standarttan kontrol edin.

Standart sürümü: EN 301 549 V4.1.1 (Eylül 2026), WCAG 2.2'yi esas alan ve EAA için hazırlanan ilk sürümdür. Henüz AB Resmî Gazetesi'nde atıf almamıştır; bu nedenle EAA gereksinimlerini karşılamanın gönüllü teknik yolu olarak görülmelidir. Atıf yapıldığında EAA ile ilgili uygunluk karinesi sağlayacaktır. 1.2.5 kriterinin metni WCAG 2.1 ve 2.2'de aynıdır. AA düzeyinde bir kriterdir.

EAA bağlamında dikkat: Madde 2/4, 28 Haziran 2025'ten önce yayımlanmış önceden kaydedilmiş zamana dayalı medyayı ve şirketin kontrolü ya da finansmanı dışındaki üçüncü taraf içeriği kapsam dışında bırakır. Bu tarihten sonra yayımladığınız videolar ile yeniden yayımladığınız ya da önemli ölçüde değiştirdiğiniz eski videolar bu istisnanın dışındadır.

Directive (EU) 2019/882, EUR-Lex, İngilizce, yeni sekmede açılır

Web için kod örnekleri

1. Standart ve betimlemeli sürüm arasında geçiş

Adı ve durumu olan bir düğme, kullanıcının sesli betimlemeli sürümü seçmesini sağlar. Sürüm değişince video bulunduğu yeri korur.

Hatalı
<!-- Betimlemeli sürüm var ama hiçbir şey ona bağlanmıyor -->
<video controls src="tur.mp4"></video>
Doğru
<video id="tur" controls src="tur.mp4"></video>
<button type="button" id="sb" aria-pressed="false">
  Sesli betimleme
</button>

<script>
const video = document.getElementById("tur");
const btn = document.getElementById("sb");

btn.addEventListener("click", () => {
  const acik = btn.getAttribute("aria-pressed") !== "true";
  const zaman = video.currentTime;
  const oynuyordu = !video.paused;

  video.src = acik ? "tur-betimlemeli.mp4" : "tur.mp4";
  video.addEventListener("loadedmetadata", () => {
    video.currentTime = zaman;
    if (oynuyordu) video.play();
  }, { once: true });

  btn.setAttribute("aria-pressed", String(acik));
});
</script>

2. Üçüncü taraf platformdaki video

Birçok platform iki ses kanalı çalamaz. Betimlemeli sürümü ayrı bir video olarak yükleyin ve standart sürümün yanından bağlantı verin.

Hatalı
<iframe src="https://www.youtube.com/embed/VIDEO_ID"
        title="Ürün turu"></iframe>
Doğru
<iframe src="https://www.youtube.com/embed/VIDEO_ID"
        title="Ürün turu"></iframe>
<p><a href="https://www.youtube.com/watch?v=BETIMLEMELI_ID"
      target="_blank" rel="noopener noreferrer">Ürün turu,
   sesli betimlemeli sürüm<span class="sr-only">, yeni
   sekmede açılır</span></a></p>

3. Zamanlamalı bir betimleme senaryosu

Betimlemeyi zamanlanmış bir senaryo olarak yazın; böylece seslendirmen ve kurgucu her satırın nereye gireceğini bilir. Önemli olanı, şimdiki zamanda anlatın ve yorum yapmayın.

Hatalı
00:12  Ayşe projenin başarısız olmasına üzülüyor.
00:20  Ekranda birçok şey oluyor.
Doğru
00:12  Ayşe dizüstü bilgisayarını kapatır ve pencereden dışarı bakar.
00:20  Gösterge panelinde kırmızı bir şerit belirir:
       "Dağıtım başarısız".
00:31  Tolga günlükleri açar. Üç satır sarıyla vurgulanmıştır.

4. Betimlemeyi duraklara sığdırın

Diyalogun üstüne konuşan bir betimlemeyi takip etmek zordur. Yazmadan önce ana ses kanalındaki duraklara bakın.

Hatalı
Ana ses (00:40 - 00:48): "Şimdi rapora bakalım."
Betimleme (00:41 - 00:49): "Ayşe dört sekmeli bir e-tablo
açar; sağda bir pasta grafiği, üstte bir filtre var."
Doğru
Ana ses (00:40 - 00:48): "Şimdi rapora bakalım."
Duraklama: 00:48 - 00:53
Betimleme (00:48 - 00:53): "Sağda pasta grafiği olan
bir e-tablo."

5. Betimlemeli sürümü açıkça etiketleyin

Kullanıcılar betimlemeli sürümü tahmin etmeden bulabilmelidir. "Sesli betimleme" ifadesini bağlantı metnine, düğme etiketine ya da video başlığına yazın.

Hatalı
<a href="/videolar/tur-v2">Sürüm 2</a>
Doğru
<a href="/videolar/tur-betimlemeli">Ürün turu
   (sesli betimlemeli)</a>

Mobil için kod örnekleri

Yerel mobil uygulamalarda aynı kural geçerlidir. Sesli betimlemeli sürüme geçiren bir denetim sunun ve sürüm değişirken oynatma konumunu koruyun.

iOS (SwiftUI)

import SwiftUI
import AVKit

struct BetimlemeliVideo: View {
    private let normalURL = URL(string: "https://example.com/tur.m3u8")!
    private let betimlemeliURL = URL(string: "https://example.com/tur-betimlemeli.m3u8")!

    @State private var player: AVPlayer
    @State private var betimlemeli = false

    init() {
        _player = State(initialValue: AVPlayer(
            url: URL(string: "https://example.com/tur.m3u8")!
        ))
    }

    var body: some View {
        VStack(alignment: .leading, spacing: 12) {
            VideoPlayer(player: player)
                .frame(height: 220)

            Toggle("Sesli betimleme", isOn: $betimlemeli)
                .onChange(of: betimlemeli) { _, acik in
                    surumuDegistir(betimlemeli: acik)
                }
        }
    }

    private func surumuDegistir(betimlemeli: Bool) {
        let zaman = player.currentTime()
        let oynuyordu = player.rate > 0

        player.replaceCurrentItem(
            with: AVPlayerItem(url: betimlemeli ? betimlemeliURL : normalURL)
        )
        player.seek(to: zaman)
        if oynuyordu { player.play() }
    }
}

Android (Jetpack Compose, Media3)

import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.material3.Switch
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.viewinterop.AndroidView
import androidx.media3.common.MediaItem
import androidx.media3.exoplayer.ExoPlayer
import androidx.media3.ui.PlayerView

@Composable
fun BetimlemeliVideo(player: ExoPlayer) {
    var betimlemeli by remember { mutableStateOf(false) }

    Column {
        AndroidView(factory = { context ->
            PlayerView(context).apply { this.player = player }
        })

        Row {
            Text("Sesli betimleme")
            Switch(
                checked = betimlemeli,
                onCheckedChange = { acik ->
                    betimlemeli = acik
                    val konum = player.currentPosition
                    val oynuyordu = player.isPlaying
                    val url = if (acik)
                        "https://example.com/tur-betimlemeli.mp4"
                    else
                        "https://example.com/tur.mp4"

                    player.setMediaItem(MediaItem.fromUri(url), konum)
                    player.prepare()
                    if (oynuyordu) player.play()
                }
            )
        }
    }
}

Nasıl test edilir?

  • Gerektiren videoları bulun: Önceden kaydedilmiş sesli videoları listeleyin. Her biri için ses kanalının görüntüdeki önemli her şeyi zaten söyleyip söylemediğine karar verin. Söylüyorsa başka bir şey gerekmez.
  • Bakmadan dinleyin: Gözlerinizi kapatın ya da ekranı kapatın ve videoyu oynatın. Olanları ve ekranda görüneni takip edebiliyor musunuz?
  • Sesli betimlemeyi bulun: Betimlemeli bir sürüm ya da açabileceğiniz bir kanal var mı? Görmeden, klavye ve ekran okuyucuyla ona ulaşabiliyor musunuz?
  • Betimlemeyi görüntüyle karşılaştırın: Ses kanalının kaçırdığı eylemleri, kişileri, sahne değişimlerini ve ekrandaki metni kapsıyor mu? Tahmin ve yorumdan kaçınıyor mu?
  • Zamanlamayı kontrol edin: Betimleme duraklara yerleşmiş, diyalogun üstüne konuşmuyor ve görüntüyle senkron mu?
  • Sürüm geçişinin yeri koruduğunu doğrulayın: Betimlemeli sürüme geçtiğinizde video aynı noktadan devam ediyor mu?
  • Her platformu deneyin: Web oynatıcıyı ve yerel mobil oynatıcıları kontrol edin. Platformun desteklediği yerlerde sesli betimleme sistem ayarı oynatıcıya yansıyor mu?
  • Otomatik araçların sınırı: Otomatik araçlar bir betimlemenin eksiksiz, iyi zamanlanmış ve yararlı olup olmadığına karar veremez. Buna ancak bir kişi karar verebilir; en iyi değerlendirenler kör ve az gören kullanıcılardır.

Sık yapılan hatalar

  • Altyazıyı yeterli saymak: Altyazı sesi verir, görüntüyü değil.
  • Yalnızca betimlemeli transkript sunmak: Bu A düzeyini (1.2.3) karşılar, ancak AA düzeyi sesli betimleme ister.
  • "Gördüğünüz gibi" anlatımı: Ekranı görmeye dayanan ifadeler dinleyiciyi bilgisiz bırakır. Ana anlatımı, ekranın gösterdiğini söyleyecek şekilde yeniden yazın.
  • Çok fazla ya da çok az betimlemek: Anlamak için önemli olanı anlatın. Önemsiz ayrıntıyı geçin, ama önemli eylemleri ve ekrandaki metni atlamayın.
  • Diyalogun üstüne konuşmak: Sesli betimleme doğal duraklara yerleşir.
  • Betimleme yerine yorum yapmak: "Ayşe üzgün görünüyor" bir tahmindir. "Ayşe dizüstü bilgisayarını kapatır ve pencereden dışarı bakar" ise görülendir.
  • Betimlemeli sürümü saklamak: Bağlantı yok, geçiş yok ya da ne olduğunu söylemeyen bir ad.
  • Video değişince betimlemeyi güncellememek: Videonun yeni kurgusu yeni zamanlama gerektirir.

Kaynaklar

Standart sürümü: EN 301 549 V4.1.1 (2026-09), WCAG 2.2. Bu sayfa bilgilendirme amaçlıdır ve hukuki tavsiye niteliği taşımaz; bağlayıcı metin için Avrupa Erişilebilirlik Yasası'nın (Direktif (AB) 2019/882) ve EN 301 549 standardının resmî metinlerini esas alın.

Corpowid, Gartner tarafından tanınan bir platformdur.

Corpowid, dijital erişilebilirlik alanındaki yenilikçi yaklaşımı ve performansı nedeniyle dünyanın önde gelen araştırma ve danışmanlık şirketlerinden biri olan Gartner tarafından takdir edilmiştir. Bu rozetler, yapay zeka destekli ve kapsayıcı web deneyimleri oluşturma konusundaki kararlılığımızı yansıtmaktadır.

Corpowid hakkında sorularınız mı var?

Bizimle iletişime geçin.

Size en kısa sürede geri dönüş sağlayacağız.