On olemassa monia avoimen lähdekoodin työkaluja multimedian muokkaamiseen, säätämiseen ja muuntamiseen juuri sellaiseksi kuin tarvitset. Audacityn tai Handbraken kaltaiset työkalut ovat loistavia, mutta joskus haluat vain muuttaa tiedoston yhdestä formaatista toiseen nopeasti. FFmpeg.
FFmpeg on kokoelma erilaisia projekteja multimediatiedostojen käsittelyyn. Sitä käytetään usein kulissien takana monissa muissa mediaan liittyvissä projekteissa. Nimestään huolimatta sillä ei ole mitään tekemistä Moving Picture Experts Groupin tai sen luomien lukemattomien multimediaformaattien kanssa.
Tässä artikkelissa käytän FFmpegiä komentorivityökalun ffmpegin kautta, joka on vain yksi, pieni osa FFmpeg-projektia. Se on saatavilla monissa eri käyttöjärjestelmissä ja sisältyy joihinkin käyttöjärjestelmiin oletuksena. Sen voi ladata FFmpegin verkkosivuilta tai useimpien paketinhallintaohjelmien kautta.
FFmpeg on tehokas työkalu, jolla voi tehdä multimediatiedostoille melkein mitä vain voit kuvitella. Tässä artikkelissa olemme kiinnostuneita käyttämään sitä tiedostojen muuntamiseen, joten emme syvenny sen koko ominaisuuksiin. Ennen kuin tarkastelemme FFmpegin käyttöä, meidän on ensin katsottava lyhyesti, mikä mediatiedosto tarkalleen ottaen on.
Mediatiedostot
Hyvin korkealla tasolla tarkasteltuna mediatiedosto jakaantuu säiliöön ja sen virtauksiin. Virrat sisältävät varsinaiset AV-komponentit, kuten elokuvan äänen tai videon, ja ne on koodattu tietyllä mediakoodauksella eli koodekilla. Jokaisella koodekilla on omat ominaisuutensa, vahvuutensa ja heikkoutensa. Esimerkiksi FLAC-koodekki on hyvä laadukkaan häviöttömän äänen tuottamiseen, kun taas Vorbis on suunniteltu kilpailemaan MP3:n kanssa tiedostokoolla ja tarjoamaan samalla parempaa äänenlaatua. Tämä tarkoittaa, että FLAC-muotoinen tiedosto on paljon suurempi kuin Vorbis-äänivirta, mutta sen pitäisi kuulostaa paremmalta. Kumpikaan ei ole luonnostaan toista parempi, koska kumpikin yrittää tehdä eri asioita.
Säiliö on virtausten kääre. Se esittää yhden käyttöliittymän, jonka kanssa mediasoittimet ja työkalut voivat olla vuorovaikutuksessa. Jotkin kontit ovat erittäin kehittyneitä ja mahdollistavat kaikenlaiset virrat, mukaan lukien useat video- ja äänivirrat yhden kontin sisällä. Kontissa olevien virtojen ei kuitenkaan tarvitse olla vain ääni- tai videovirtoja. Eri kontit mahdollistavat erilaiset virrat, esim. tekstitykset, luvun tiedot tai muut metatiedot. Kaikki riippuu siitä, mitä kontti on asetettu sallimaan.
Tämä on abstrakti esitys mediatiedostoista ja ohittaa monet konttien väliset erot. Monet vaativat tiettyjä virtoja ja metatietoja tai asettavat rajoituksia sallituille koodekeille tai sisällölle. Tämä selitys riittää tämän artikkelin läpikäymiseen. Jos haluat lisätietoja, napsauta yllä olevia linkkejä.
Ole tietoinen siitä, että videon ja äänen koodaus voi kestää hyvin kauan. Sinun on syytä varautua siihen, että FFmpegiä käyttäessäsi voit rauhoittua hetkeksi.
Peruskonvertointi
Juttu, joka kompastuttaa useimpia ihmisiä äänen ja videon muuntamisessa, on oikeiden formaattien ja säiliöiden valitseminen. Onneksi FFmpeg on aika fiksu oletusasetustensa kanssa. Yleensä se valitsee automaattisesti oikeat koodekit ja säiliöt ilman monimutkaisia asetuksia.
Esitetään esimerkiksi, että sinulla on MP3-tiedosto ja haluat muuntaa sen OGG-tiedostoksi:
ffmpeg -i input.mp3 output.ogg
Tämä komento ottaa MP3-tiedoston nimeltä input.mp3 ja muuntaa sen OGG-tiedostoksi nimeltä output.ogg. FFmpegin näkökulmasta tämä tarkoittaa MP3-äänivirran muuntamista Vorbis-äänivirraksi ja tämän virran käärimistä OGG-säiliöön. Sinun ei tarvinnut määritellä stream- tai container-tyyppejä, koska FFmpeg keksi sen puolestasi.
Tämä toimii myös videoiden kanssa:
ffmpeg -i input.mp4 output.webm
Koska WebM on hyvin määritelty formaatti, FFmpeg tietää automaattisesti, mitä video- ja äänitiedostoja se voi tukea, ja muuntaa streamit kelvollisiksi WebM-tiedostoiksi.
Valitsemastasi containerista riippuen tämä ei aina toimi. Esimerkiksi Matroskan kaltaiset kontit on suunniteltu käsittelemään melkein mitä tahansa virtaa, jonka niihin haluaa laittaa, olivat ne sitten kelvollisia tai eivät. Tämä tarkoittaa, että komento:
ffmpeg -i input.mp4 output.mkv
voi johtaa tiedostoon, jossa on samat koodekit kuin input.mp4:ssä oli, mikä voi olla tai olla olematta sitä, mitä haluat.
Koodekkien valitseminen
Mitä siis tehdään, kun halutaan käyttää Matroskan kaltaista konttia (joka pystyy käsittelemään melkein mitä tahansa streamia), mutta halutaan silti vaikuttaa siihen, mitkä koodekit ovat tulosteessa? FFmpeg apuun! Voit valita tarvittavat koodekit käyttämällä -c-lippua.
Tämän lipun avulla voit asettaa eri koodekin käytettäväksi jokaiselle streamille. Jos haluat esimerkiksi asettaa äänivirran Vorbisiksi, käytät seuraavaa komentoa:
ffmpeg -i input.mp3 -c:a libvorbis output.ogg
Samoin voit vaihtaa sekä video- että äänivirran:
ffmpeg -i input.mp4 -c:v vp9 -c:a libvorbis output.mkv
Tämä tekee Matroska-säiliön, jossa on VP9-videovirta ja Vorbis-äänivirta, periaatteessa sama kuin WebM, jonka teimme aiemmin.
Komennolla ffmpeg -codecs saat tulostetuksi kaikki koodekit, jotka FFmpeg tietää. Tämän komennon tuloste muuttuu sen mukaan, minkä FFmpeg-version olet asentanut.
Yksittäisen virran muuttaminen
Useammin kuin haluaisit, käytössäsi oleva tiedosto on osittain oikea ja siinä on vain yksittäinen virta väärässä muodossa. Oikean streamin uudelleenkoodaaminen voi olla hyvin aikaa vievää. FFmpeg voi auttaa tässä tilanteessa:
ffmpeg -i input.webm -c:v copy -c:a flac output.mkv
Tämä komento kopioi videovirran input.webm-tiedostosta output.mkv-tiedostoon ja koodaa Vorbis-äänivirran FLAC-tiedostoksi. -c-lippu on todella tehokas.
Säiliön vaihtaminen
Edellistä esimerkkiä voidaan soveltaa sekä ääni- että videovirtoihin, jolloin voit muuntaa säiliöformaatista toiseen ilman, että sinun tarvitsee tehdä mitään ylimääräistä virran koodausta:
ffmpeg -i input.webm -c:av copy output.mkv
Laadun vaikuttaminen
Nyt kun koodekit ovat nyt hallussa, seuraava kysymys on: Miten asetamme kunkin virran laadun?
Yksinkertaisin tapa on muuttaa bittinopeutta, mikä voi johtaa eri laatuun tai ei. Ihmisen kyky nähdä ja kuulla ei ole niin puhdas ja selkeä kuin haluaisimme ajatella. Joskus bittinopeuden muuttamisella on valtava ero subjektiiviseen laatuun. Toisinaan se saattaa vain muuttaa tiedoston kokoa. Joskus on hyvin vaikea sanoa, mitä tapahtuu kokeilematta.
Kunkin virran bittinopeuden asettamiseen käytetään -b-lippua, joka toimii samalla tavalla kuin -c-lippu, paitsi että koodekkivaihtoehtojen sijasta asetetaan bittinopeus.
Vaihtaaksesi esimerkiksi videon bittinopeutta käyttäisit sitä näin:
ffmpeg -i input.webm -c:a copy -c:v vp9 -b:v 1M output.mkv
Tämä kopioi audion (-c:kopioidaan) sisääntulosta.webm ja muuntaa videon VP9-koodekiksi (-c:v vp9) bittinopeudella 1M/s (-b:v), kaikki niputettuna Matroska-säiliöön (output.mkv).
Toinen tapa vaikuttaa laatuun on säätää videon kehysnopeutta -r-optiolla:
ffmpeg -i input.webm -c:a copy -c:v vp9 -r 30 output.mkv
Tällöin luodaan uusi Matroska, jossa äänivirta on kopioitu ja videovirran kehysnopeudeksi on pakotettu 30 kuvaa sekunnissa sen sijaan, että käytettäisiin sisääntulon kehysnopeutta (-r 30).
Videon mittasuhteita voi säätää myös FFmpegin avulla. Yksinkertaisin tapa on käyttää ennalta määritettyä videon kokoa:
ffmpeg -i input.mkv -c:a copy -s hd720 output.mkv
Tämä muuttaa videon 1280×720:ksi ulostulossa, mutta voit halutessasi asettaa leveyden ja korkeuden manuaalisesti:
ffmpeg -i input.mkv -c:a copy -s 1280x720 output.mkv
Tämä tuottaa täsmälleen saman ulostulon kuin aiempi komento. Jos haluat asettaa mukautettuja kokoja FFmpegissä, muista, että leveysparametri (1280) tulee ennen korkeutta (720).
Kuvataajuuden ja bittinopeuden säätäminen ovat kaksi karkeaa mutta tehokasta tekniikkaa, joilla voidaan vaikuttaa median laatuun. Asettamalla nämä arvot hyvin korkeiksi ei voida parantaa olemassa olevan lähteen laatua, jos sen laatu on jo ennestään heikko.
Muuttamalla näitä asetuksia voidaan tehokkaimmin pienentää nopeasti laadukasta streamia pienemmän tiedostokoon aikaansaamiseksi. Videon koon säätäminen ei voi parantaa laatua, mutta se voi saada sen mahtumaan paremmin tabletille television sijasta. 640×480-videon koon muuttaminen 4K:ksi ei paranna sitä.
Tiedostojen laadun muuttaminen on hyvin subjektiivinen asia, joten ei ole olemassa yhtä ainoaa tapaa, joka toimii joka kerta. Paras tapa on tehdä joitakin muutoksia ja testata, näyttääkö tai kuulostaako se sinusta paremmalta.
Virtojen muokkaaminen
Usein sinulla on tiedosto, joka on lähes täydellinen, ja sinun tarvitsee vain leikata muutama osa pois. Tämä voidaan tehdä helpommin työkalulla, joka näyttää, mitä olet muuttamassa, mutta jos tiedät tarkalleen, mistä kohtaa haluat leikata, se on erittäin helppoa tehdä FFmpegissä:
ffmpeg -i input.mkv -c:av copy -ss 00:01:00 -t 10 output.mkv
Tämä kopioi video- ja äänivirrat (-c:av copy), mutta leikkaa videon. Valitsin -t asettaa leikkauksen kestoksi 10 sekuntia ja valitsin -ss asettaa videon alkupisteen leikkausta varten, tässä tapauksessa minuutin kohdalle (00:01:00). Voit olla tarkempi kuin vain tunnit, minuutit ja sekunnit, menemällä tarvittaessa millisekuntiin asti.
Audion irrottaminen
Joskus et oikeastaan välitä videosta, vaan haluat vain äänen. Onneksi tämä on FFmpegissä hyvin suoraviivaista -vn-lipukkeella:
ffmpeg -i input.mkv -vn audio_only.ogg
Tämä komento poimii syötteestä vain äänen, koodaa sen Vorbis-muotoon ja tallentaa sen tiedostoon audio_only.ogg. Nyt sinulla on eristetty äänivirta. Voit myös käyttää -an- ja -sn-lippuja samalla tavalla ääni- ja tekstitysvirtojen irrottamiseen.
Tehdä GIF:stä GIF:n
Viime aikoina animoidut GIF:t (kovalla g:llä, koska en ole hirviö) ovat tehneet paluun. Henkilökohtaisesti olen sitä mieltä, että GIF on huonoin formaatti, jonka voi valita videolle. Siinä on hirveä pakkauksen laatu ja koko; siinä on hyvin kovat rajoitukset värien, kuvataajuuden ja kontin metatietojen suhteen; eikä se voi tukea ääntä. Silti se on melko suosittu. Miten voit siis tehdä videoleikkeestä animoidun GIF:n?
Käyttämällä -an-lippua, samaan tapaan kuin mitä teimme edellä, on parempi vaihtoehto kuin animoidun GIF:n luominen, jos haluat tehdä videon ilman ääntä, mutta on paljon paikkoja, jotka tukevat GIF:iä, jotka eivät tue eri videoformaattia. Kaikkia näitä varten:
ffmpeg -i input.mkv output.gif
Tämä komento luo GIF-tiedoston, jonka mitat ovat samat kuin syötetiedoston. Tämä on usein huono idea, sillä GIF-tiedostot eivät pakkaudu hyvin suhteessa muihin videoformaatteihin (kokemukseni mukaan GIF-tiedosto on noin kahdeksan kertaa suurempi kuin lähdevideo). Voi olla hyödyllistä käyttää -s-vaihtoehtoa GIF:n koon muuttamiseksi hieman pienemmäksi, varsinkin jos tulolähde on melko suuri, kuten HD-video.
Muut työkalut
Vaikka FFmpeg on paras työkalu useimpiin AV-tehtäviin, se ei ole täydellinen kaikkeen. On joitakin työkaluja, jotka yhdessä FFmpegin kanssa käytettynä voivat tehdä kaikesta hieman helpompaa.
Videoiden nappaaminen YouTubesta
Voi olla hyvin helppoa ladata jotain YouTubeen, menettää alkuperäinen lähdevideo ja jäljelle jää vain YouTube-versio. Mikä on helpoin tapa hakea kopio YouTube-videoistasi?
Youtube-dl on näppärä pieni työkalu, jolla voit napata videoita YouTubesta ja useista muista videostriimauspalveluista. Sen käyttö on erittäin suoraviivaista:
youtube-dl https://www.youtube.com/watch?v=2m5nW9CQLJ0
Tämä komento lataa videon ilmoitetusta URL-osoitteesta ja tallentaa sen paikallisesti.
Youtube-dl:ssä on useita vaihtoehtoja ladattavan videon laadun ja muodon hallitsemiseksi, mutta minusta on helpompi käyttää yllä olevaa komentoa. Se lataa korkealaatuisimman äänen ja videon yhdeksi tiedostoksi, jonka jälkeen käytän FFmpegiä niiden muuntamiseen haluamaani muotoon.
Tietojen saaminen mediasta
Joskus tarvitsee vain tietää, mitä mediasäiliön sisällä on. Vaikka on olemassa useita työkaluja, jotka voivat tehdä tämän, suosikkini on MediaInfo. MediaInfo näyttää kaikki mediasäiliön sisällä olevat tiedot jokaisesta eri virrasta sekä syöttötiedoston metatiedot. Näin saat kaiken, mitä halusit tietää – ja luultavasti paljon sellaista, mitä et tiennyt.
Komennon mediainfo inputFile.mkv suorittaminen sylkee ulos luettelon syötetiedoston tiedoista ihmisen luettavassa muodossa.
Ja muuta…
Tämä on vasta pintaraapaisu siitä, mitä FFmpeg voi tehdä. Onneksi FFmpegin ja projektin muiden työkalujen dokumentaatio on erittäin hyvä ja tutustumisen arvoinen. Se opettaa sinulle kaiken niistä monista eri tempuista, joita tämä koira osaa.
Jos haluat graafisella käyttöliittymällä varustetun työkalun multimedian muuntamiseen, Handbrake on poikkeuksellisen hyvä työkalu, joka on saatavilla Linuxille, Mac OS X:lle ja Windowsille. Handbrake käyttää konepellin alla FFmpegiä (muiden työkalujen ohella).