Kuva, ääni ja video verkossa

ITKP1011 Web-julkaiseminen · korjattu laitos

Luennolla perehdytään siihen, millaisin tekniikoin kuvaa, ääntä ja videota voidaan liittää WWW-sivulle. Kuvankäsittelyä ei tässä materiaalissa käsitellä vaan oletetaan, että perusteet ovat hallinnassa. Tarvittaessa voit kerrata kuvankäsittelyluennolla.

Oppimistavoitteet

Tämän luennon jälkeen sinun pitäisi osata:

Median liittämisessä WWW-sivulle on otettava huomioon kolme asiaa:

1. Linkittäminen

Kuvan, äänen tai videon saa WWW-sivulle yksinkertaisimmillaan lisäämällä sivulle linkin (a-elementti), joka viittaa kyseiseen tiedostoon. Linkin avulla käyttäjä voi avata tiedoston tai tallentaa sen omalle koneelleen.

Kerro linkkitekstissä, mihin linkki vie ja millainen tiedosto on kyseessä. Suuren tiedoston koko on kohteliasta mainita.

<p><a href="luentotallenne.mp4">Luentotallenne</a> (MP4, 240 Mt)</p>

2. Upottaminen

Upottamisella tarkoitetaan kuvan, videon tai äänen liittämistä suoraan WWW-sivulle. Objekti ei sisälly HTML-tiedostoon kuten esimerkiksi Word-dokumenttiin, vaan tarvitaan viite erilliseen tiedostoon. Selain näyttää objektin suoraan sivulla, jos osaa.

2.1 MIME-tyypit

MIME-tyypit ovat sähköpostissa ja HTTP-protokollassa käytetty tapa ilmaista, mitä mediatyyppiä annettu tieto on ja miten selaimen pitäisi se käsitellä.

Verkossa tavallisimmat MIME-tyypit.
MIME-tyyppiPääteFormaatti
image/jpeg.jpgJPEG-kuva
image/png.pngPNG-kuva
image/gif.gifGIF-kuva
image/webp.webpWebP-kuva
image/avif.avifAVIF-kuva
image/svg+xml.svgScalable Vector Graphics
video/mp4.mp4MP4-säiliömuoto
video/webm.webmWebM-säiliömuoto
video/x-matroska.mkvMatroska-säiliömuoto
audio/mpeg.mp3MP3-ääni
audio/ogg.oggOgg-säiliömuoto
application/pdf.pdfPDF-dokumentti
Varo vanhoja tyyppinimiä

Vanhoissa ohjeissa näkee tyyppejä kuten audio/x-mp3, video/avi ja application/x-ogg. Ne eivät ole rekisteröityjä tyyppejä: oikeat ovat audio/mpeg, video/x-msvideo ja audio/ogg. Etuliite x- oli aikoinaan tapa merkitä rekisteröimätön tyyppi, eikä sitä enää käytetä.

Mediatyyppiä ei pidä yrittää päätellä tiedoston päätteestä, vaan ratkaisevaa on se, minkä tyypin palvelin ilmoittaa. Tyyppiä ei voi määrätä HTML-koodissa, vaan se asetetaan WWW-palvelimen asetuksissa. Väärä MIME-tyyppi on tavallinen syy siihen, ettei video toistu tai että selain tarjoaa tiedostoa ladattavaksi sen sijaan että näyttäisi sen.

3. Kuvat

3.1 Kuvaformaatit

Verkossa käytettävät kuvaformaatit.
Formaatti Käyttötarkoitus Läpinäkyvyys Animaatio Pakkaus
JPEG ValokuvatEiEiHäviöllinen
PNG Viivapiirrokset, kaaviot, kuvakaappaukset, originaalien säilytys KylläEiHäviötön
GIF Vanha formaatti. Käytä mieluummin PNG- tai WebP-formaattia Kyllä, mutta vain yksi väri kerrallaanKylläHäviötön, enintään 256 väriä
WebP Korvaa JPEG-, PNG- ja GIF-formaatit. Tuettu kaikissa selaimissa KylläKylläMolemmat
AVIF Uusin ja tiivein. Tuettu kaikissa yleisissä selaimissa KylläKylläMolemmat
SVG Vektorigrafiikka: logot, kaaviot, kuvakkeet KylläKyllä (CSS tai SMIL)Ei bittikartta
Nyrkkisääntö formaatin valintaan

Kuvat on pienennettävä kuvankäsittelyohjelmalla riittävän pieniksi ennen julkaisua, ja muokkaus on tehtävä aina alkuperäiskuvasta lähtien. Pakkaamattomat bittikarttaformaatit kuten TIFF ja BMP eivät sovi verkkoon.

SVG

SVG on XML-pohjainen vektorigrafiikan kuvauskieli. Koska kuva on kuvattu muotoina eikä pikseleinä, se skaalautuu tarkkana mihin kokoon tahansa. SVG-kuvan ulkoasua voi muokata CSS:llä, ja sitä voi myös animoida. Katso CSS-lisäesimerkin luku 5.

Vektorigrafiikkaa voi piirtää Inkscapella, joka osaa myös muuntaa kuvia vektoriformaattien välillä.

3.2 img-elementti

Kuva upotetaan dokumenttiin img-elementillä.

<img src="puukuva800.jpg"
     alt="Kaatunut puu makaa matalassa vedessä"
     width="800" height="533"
     loading="lazy" />
img-elementin tärkeimmät attribuutit.
AttribuuttiMerkitys
alt Pakollinen. Teksti, joka korvaa kuvan. Kerro siinä sama tieto kuin kuva välittää. Koristekuvalle tyhjä arvo alt="". Katso HTML5-luennon luku 12.1
width, height Kuvan todelliset mitat pikseleinä. Kerro ne aina: selain varaa silloin oikean kokoisen tilan jo ennen kuin kuva on latautunut, eikä sivu hyppää latauksen aikana
loading="lazy" Kuva ladataan vasta, kun siihen vieritetään. Käytä kaikissa kuvissa, jotka eivät näy heti sivun latautuessa
Mitat eivät määrää näyttökokoa

width ja height kertovat kuvan todelliset mitat, mutta näyttökoko määrätään CSS:llä. Tavallinen sääntö on img { max-width: 100%; height: auto; }, jolloin kuva ei koskaan vuoda reunan yli mutta säilyttää kuvasuhteensa.

3.3 Sama kuva useassa koossa: srcset ja sizes

Puhelimessa ei kannata ladata 1600 pikseliä leveää kuvaa, jos näytölle mahtuu 400. srcset-attribuutilla kerrotaan selaimelle, mitä kokoja on tarjolla, ja sizes-attribuutilla se, kuinka leveänä kuva aiotaan näyttää. Selain valitsee sopivimman.

<img src="puukuva800.jpg"
     srcset="puukuva400.jpg   400w,
             puukuva800.jpg   800w,
             puukuva1600.jpg 1600w"
     sizes="(max-width: 40em) 100vw, 40em"
     alt="Kaatunut puu makaa matalassa vedessä"
     width="1600" height="1067" />
Mitä esimerkin osat tarkoittavat.
OsaMerkitys
src Varavaihtoehto vanhoille selaimille. Anna tähän keskikokoinen versio
srcset Luettelo tiedostoista ja niiden todellisista leveyksistä pikseleinä. Merkintä 400w tarkoittaa, että kuva on 400 pikseliä leveä. Huomaa, että yksikkö on w eikä px
sizes Kuinka leveänä kuva näytetään. Luetellaan mediakyselyn ja leveyden pareja, ja viimeisenä oletusarvo ilman kyselyä. Esimerkki tarkoittaa: kapealla näytöllä kuva vie koko leveyden, muuten se on 40 em leveä
Selain päättää, sinä tarjoat

Selain tietää näytön leveyden, pikselitiheyden ja joskus verkkoyhteyden nopeuden, joten sen valinta on parempi kuin arvauksesi. Tehtäväsi on vain tuottaa kuvasta muutama koko ja kertoa ne rehellisesti. Kolme kokoa riittää lähes aina.

3.4 picture-elementti

picture-elementillä tarjotaan sama kuva useassa eri formaatissa tai eri tavalla rajattuna eri näytöille. Selain käy source-elementit läpi järjestyksessä ja käyttää ensimmäistä, jonka se osaa esittää ja jonka mediakysely täsmää. Jos mikään ei kelpaa, se käyttää sisällä olevaa img-elementtiä.

Tärkein käyttötapa on uuden formaatin tarjoaminen turvallisesti: selaimet, jotka osaavat AVIF- tai WebP-kuvan, saavat pienemmän tiedoston, ja muut saavat JPEG-version.

<picture>
  <source type="image/webp"
          srcset="puukuva400.webp 400w, puukuva800.webp 800w, puukuva1600.webp 1600w"
          sizes="(max-width: 40em) 100vw, 40em" />
  <img src="puukuva800.jpg"
       srcset="puukuva400.jpg 400w, puukuva800.jpg 800w, puukuva1600.jpg 1600w"
       sizes="(max-width: 40em) 100vw, 40em"
       alt="Kaatunut puu makaa matalassa vedessä"
       width="1600" height="1067" />
</picture>

Alla oleva kuva on toteutettu näin. Kokeile kaventaa selainikkunaa ja katso kehittäjätyökalujen verkkonäkymästä, minkä tiedoston selain hakee.

Kaatunut puu makaa matalassa vedessä
Sama kuva kahdessa formaatissa ja kolmessa koossa.
Milloin srcset ja milloin picture?

Vanhoissa ohjeissa näkee picture-elementin, jossa on kuusi source-elementtiä ja jokaisella oma media-kysely. Se on turhan monimutkaista, ja mediakyselyt menevät helposti päällekkäin: jos yhdessä on (max-width: 800px) ja toisessa (min-width: 800px), molemmat täsmäävät tasan 800 pikselin leveydellä.

3.5 object-elementti

object-elementillä voi liittää dokumenttiin periaatteessa mitä tahansa objekteja. Jos selain ei osaa esittää tiedostoa, elementin sisään sijoitettu sisältö näytetään sen sijaan.

Vektorigrafiikalla piirretty ukkeli

<p>
  <object type="image/svg+xml" data="hazor1e.svg">
    <img src="hazor1e.gif" alt="Vektorigrafiikalla piirretty ukkeli" />
  </object>
</p>

object-elementtiä tarvitsee nykyään harvoin. Käytä mieluummin picture-, video-, audio- tai iframe-elementtiä. Sama koskee vanhaa embed-elementtiä.

4. Video

Videoita voidaan välittää joko suoratoistona (stream) tai kokonaisina tiedostoina (download).

4.1 Videon ominaisuuksia

Videon perusominaisuudet.
OminaisuusMerkitys
Resoluutio Kuvan leveys ja korkeus pikseleinä. Verkossa tavallisimmat ovat 1280 × 720 (720p) ja 1920 × 1080 (1080p)
Kuvasuhde Leveyden suhde korkeuteen. Verkkovideossa lähes aina 16:9, pystyvideossa 9:16
Kuvanopeus Montako kuvaa sekunnissa näytetään. Tavallisia ovat 25, 30 ja 60. Lähes staattisessa sisällössä, kuten ruutukaappausvideossa, pienempikin riittää
Bittinopeus Datavirta bitteinä sekunnissa. Vaikuttaa suoraan sekä laatuun että tiedoston kokoon. Vakiona (CBR) tai vaihtelevana (VBR); jälkimmäinen antaa yleensä paremman laadun samalla tiedostokoolla

Video on aina pakattava häviöllisesti, sillä pakkaamaton liikkuva kuva veisi valtavasti tilaa. Verkossa välitettävä video pakataan vielä tiiviimmin, koska yhteyden nopeus on rajoittava tekijä.

4.2 Säiliömuoto ja kodekki

Nämä kaksi käsitettä menevät helposti sekaisin, ja niiden ero on olennainen.

Sama .mp4-tiedosto voi siis sisältää videon, jonka toinen selain toistaa ja toinen ei, riippuen siitä millä kodekilla se on pakattu.

Yleisimmät säiliömuodot.
SäiliömuotoPääteKäyttö
MP4.mp4 Verkkojulkaisemisen perusvalinta. Toimii kaikkialla
WebM.webm Vapaa formaatti, tehty nimenomaan verkkoa varten. Tuettu kaikissa yleisissä selaimissa
Matroska.mkv Vapaa ja hyvin joustava säiliö, johon mahtuu useita ääniraitoja ja tekstityksiä. Yleinen tallennuksessa ja arkistoinnissa, mutta selaimet eivät toista sitä. WebM on Matroskan verkkoa varten karsittu muunnelma
Ogg.ogg, .opus Vapaa säiliö, käytetään lähinnä äänelle
Verkossa käytettävät kodekit.
KodekkiTyyppiHuomioita
H.264 (AVC)Video Vanhin yhä käytössä oleva. Toimii varmasti kaikkialla. Turvallinen valinta, jos tarjoat vain yhden version
VP9Video Vapaa. Pakkaa H.264-kodekkia tiiviimmin. Käytetään WebM-säiliössä
AV1Video Vapaa ja uusin. Pakkaa parhaiten, mutta pakkaaminen on hidasta. Tuettu kaikissa yleisissä selaimissa
AACÄäni MP4-tiedostojen tavallisin ääniraita
OpusÄäni Vapaa ja laadultaan paras pienillä bittinopeuksilla. Käytetään WebM- ja Ogg-säiliöissä
MP3Ääni Vanha mutta kaikkialla toimiva
Kaksi yhdistelmää, joilla pärjää

Muunnokset onnistuvat ilmaisella FFmpeg-ohjelmalla tai graafisella HandBrakella. Videoiden katseluun työpöydällä käy VLC, joka sisältää valmiiksi useimmat kodekit.

4.3 video-elementti

Oman videotiedoston voi liittää sivulle video-elementillä aivan samaan tapaan kuin img-elementillä liitetään kuvia.

Yksinkertaisimmillaan riittää kaksi attribuuttia:

<video controls="controls" src="itkp1011_testi.mp4"></video>

Kunnollisessa toteutuksessa tarjotaan useampi formaatti, esikatselukuva ja tekstitykset:

<video controls="controls" poster="esikatselu.jpg" preload="metadata" width="1280" height="720">
  <source src="luento.webm" type="video/webm" />
  <source src="luento.mp4"  type="video/mp4" />
  <track src="luento.vtt" kind="captions" srclang="fi" label="Suomi" default="default" />
  <p>Selaimesi ei osaa toistaa videota.
     <a href="luento.mp4">Lataa video (MP4, 240 Mt)</a>.</p>
</video>
video-elementin attribuutteja.
AttribuuttiMerkitys
controlsNäyttää toistopainikkeet. Ilman tätä käyttäjä ei voi tehdä videolle mitään
posterKuva, joka näytetään ennen toiston aloittamista
preloadmetadata hakee vain videon keston ja mitat, none ei mitään, auto koko videon. Käytä arvoa metadata
autoplayKäynnistää toiston itsestään. Älä käytä. Selaimet estävät sen useimmiten muutenkin, ellei video ole äänetön
loopToistaa videon alusta loppuun asti uudelleen
mutedÄäni pois päältä aluksi

video-elementti säilyttää oikean kuvasuhteen automaattisesti, joten CSS:ssä riittää määritellä leveys. Korkeus tulee oikein itsestään.

video {
  max-width: 100%;
  height: auto;
}

Elementille on olemassa myös width- ja height-attribuutit. Kerro niissä videon todelliset mitat, jotta sivu ei hyppää latauksen aikana, ja säädä näyttökoko CSS:llä.

4.4 Tekstitykset

Videon tekstitykset ovat saavutettavuusvaatimus. Ne ovat välttämättömät kuulovammaiselle, mutta hyödyttävät myös meluisassa ympäristössä katsovaa ja sitä, joka opiskelee vieraalla kielellä. Tekstitys liitetään track-elementillä, ja tiedostomuoto on WebVTT.

<track src="luento.vtt" kind="captions" srclang="fi" label="Suomi" default="default" />

WebVTT-tiedosto on tavallinen tekstitiedosto, jonka voi kirjoittaa vaikka Visual Studio Codella:

WEBVTT

00:00:00.000 --> 00:00:04.500
Tervetuloa Web-julkaiseminen-kurssin luennolle.

00:00:04.500 --> 00:00:09.000
Tänään käsittelemme kuvan, äänen ja videon liittämistä sivulle.
Tekstityksiä ei tarvitse kirjoittaa käsin

Useimmat palvelut tuottavat automaattisen tekstityksen puheentunnistuksella, ja sen voi ladata WebVTT-tiedostona ja korjata. Automaattinen tekstitys ei sellaisenaan riitä täyttämään vaatimuksia, koska siinä on virheitä, mutta se on hyvä lähtökohta.

4.5 YouTube-videon upottaminen

Omien videoiden sijoittaminen YouTubeen ja upottaminen sieltä on yleensä parempi vaihtoehto kuin videotiedoston pitäminen omalla palvelimella: palvelu hoitaa pakkaamisen useaan laatuun, kaistan ja tekstitykset.

Tarvittavan koodin saa YouTubesta videon omalta sivulta valitsemalla Jaa ja sitten Upota. Koodi on seuraavaa muotoa:

<iframe width="560" height="315"
        src="https://www.youtube.com/embed/3u1S8VBlMAA"
        frameborder="0" allowfullscreen></iframe>

Huomaa, että iframe-elementissä käytetty osoite ei ole sama kuin videon suora osoite. YouTuben antama koodi ei ole suositusten mukainen, ja siitä kannattaa korjata kolme asiaa.

Mitä YouTuben koodista korjataan.
OngelmaKorjaus
frameborder="0" Attribuutti on poistettu HTML5:stä. Poista se; reunan saa pois CSS:llä
allowfullscreen ilman arvoa Ei ole XML-yhteensopiva. Käytä muotoa allow="fullscreen"
Kiinteät mitat width ja height Video ei skaalaudu kapealle näytölle. Siirrä koko CSS:ään
title-attribuutti puuttuu Lisää se. Ruudunlukijan käyttäjä kuulee muuten vain "kehys"

Korjattu versio:

<iframe class="youtube"
        src="https://www.youtube.com/embed/3u1S8VBlMAA"
        title="Kuva, ääni ja video verkossa, luentovideo"
        allow="fullscreen" loading="lazy"></iframe>
.youtube {
  width: 100%;
  aspect-ratio: 16 / 9;
  border: 0;
}
Älä anna sekä leveyttä että korkeutta

Vanhoissa ohjeissa näkee säännön, jossa on width: 100%, height: 100% ja aspect-ratio: 16/9. aspect-ratio ei tee mitään, jos molemmat mitat on annettu: kuvasuhde lasketaan vain silloin, kun toinen mitoista saa määräytyä vapaasti. Anna siis vain leveys.

Ennen aspect-ratio-ominaisuutta sama tehtiin laskukaavalla height: calc(100% * 0.5625). Huomaa, ettei calc-sanan ja sulkumerkin väliin saa tulla välilyöntiä, muuten koko määritys hylätään.

5. Ääni

Ääni upotetaan sivulle samaan tapaan kuin video, mutta audio-elementillä.

<audio controls="controls">
  <source src="musa.opus" type="audio/ogg" />
  <source src="musa.mp3"  type="audio/mpeg" />
  <p>Selaimesi ei osaa toistaa ääntä. <a href="musa.mp3">Lataa tiedosto</a>.</p>
</audio>
Verkossa käytettävät ääniformaatit.
FormaattiHuomioita
MP3Toimii kaikkialla. Turvallinen valinta, jos tarjoat vain yhden tiedoston
AACMP3-formaattia parempi samalla bittinopeudella. Tiedostopääte yleensä .m4a
OpusVapaa ja laadultaan paras pienillä bittinopeuksilla. Erinomainen puheelle

Puhetallenteille pätee sama saavutettavuusvaatimus kuin videolle: tarjoa myös tekstivastine. Äänitiedostoon ei voi liittää tekstitystä, joten kirjoita litterointi sivulle tai linkitä se erillisenä tiedostona.

Älä käynnistä ääntä itsestään

Itsestään soimaan lähtevä ääni on yksi verkkosivujen ärsyttävimmistä ominaisuuksista, ja se on saavutettavuusvaatimusten vastaista, jos ääni kestää yli kolme sekuntia eikä sitä voi pysäyttää. Selaimet estävät sen nykyään useimmiten itsekin.

6. Tekijänoikeudet

Kuva, video ja musiikki ovat tekijänoikeuden suojaamia teoksia. Suoja syntyy automaattisesti teoksen luomishetkellä: mitään merkintää ei tarvita, eikä merkinnän puuttuminen tarkoita, että teos olisi vapaasti käytettävissä. Se, että kuva löytyy hakukoneella, ei anna mitään oikeutta käyttää sitä.

Perussääntö

Käytä omalla sivullasi vain sellaista aineistoa, jonka olet tehnyt itse, johon sinulla on lupa, tai joka on julkaistu lisenssillä, joka sallii käytön.

6.1 Creative Commons -lisenssit

Creative Commons on joukko valmiita lisenssejä, joilla tekijä antaa etukäteen luvan käyttää teostaan tietyin ehdoin. Lisenssi koostuu ehtolyhenteistä.

Creative Commons -lisenssien ehdot.
LyhenneEhto
BYTekijä on mainittava. Tämä ehto on lähes kaikissa
SAShare Alike: muokattu versio on julkaistava samalla lisenssillä
NCNon-Commercial: vain ei-kaupalliseen käyttöön
NDNo Derivatives: teosta ei saa muokata. Huomaa, että rajaaminen tai koon muuttaminen voi jo olla muokkaamista
CC0Tekijä on luopunut kaikista oikeuksista. Saa käyttää vapaasti ilman mainintaakin

Esimerkiksi CC BY-SA tarkoittaa, että teosta saa käyttää ja muokata, kunhan tekijä mainitaan ja lopputulos julkaistaan samalla lisenssillä.

6.2 Lähdemerkintä

Kun lisenssi vaatii tekijän mainitsemisen, merkitse neljä asiaa: teoksen nimi, tekijä, lähde ja lisenssi. Kuvateksti on luonteva paikka.

<figure>
  <img src="jyvasjarvi.jpg" alt="Jyväsjärvi auringonlaskussa" />
  <figcaption>
    Kuva: <a href="https://example.org/kuvat/123">Jyväsjärvi</a>,
    Matti Meikäläinen,
    lisenssi <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>.
  </figcaption>
</figure>

6.3 Mistä aineistoa löytää

Linkittäminen ei ole kopioimista

Toiselle sivulle linkittäminen on aina sallittua. Sen sijaan toisen palvelimella olevan kuvan upottaminen omalle sivulle img-elementillä on eri asia: siinä kuva esitetään osana sinun sivuasi, ja siihen tarvitaan lupa. Lisäksi se kuluttaa toisen palvelimen kaistaa ja kuva voi kadota milloin tahansa.

7. Tulostettavaksi tarkoitetut dokumentit

PDF-muotoa käytetään, kun dokumentin ulkoasun halutaan pysyvän täsmälleen halutunlaisena. Kaikki nykyselaimet näyttävät PDF-tiedostot suoraan, joten erillistä lukuohjelmaa ei tarvita. PDF-tiedostoja voi tuottaa lähes millä tahansa tekstinkäsittelyohjelmalla, muun muassa Wordilla, LibreOfficella ja LaTeXilla.

PDF ei korvaa verkkosivua

PDF on suunniteltu paperille. Se ei mukaudu näytön leveyteen, joten puhelimella lukeminen on hankalaa, ja sen sisältö on hakukoneille ja apuvälineille vaikeampaa kuin HTML-sivu. Julkaise sisältö ensisijaisesti verkkosivuna ja tarjoa PDF vain silloin, kun dokumentti on tarkoitettu tulostettavaksi tai arkistoitavaksi.

Verkkosivulla julkaistua PDF-tiedostoa koskevat samat saavutettavuusvaatimukset kuin sivua itseään. Käytännössä se tarkoittaa kolmea asiaa:

8. Lisätietoa

Käyttäjien kommentit

Kommentoi Lisää kommentti