Mikä on paras tapa muuntaa mp4 -tiedosto webm ilman laadun heikkenemistä (käyttäen vp8 tai vp9) ja ffmpeg?

Jos teen ffmpeg -i in.mp4 out.webm, laatu on erittäin huono. Voin määrittää kohdebittinopeuden -b:v ja vakiolaatuisen tilan crf, ts.

Tämä antaa paremman laadun. Tätä varten minun on kuitenkin haettava sisääntulovideon bittinopeus (tässä 1M).

Huomasin myös, että jos määrität kohteen bittinopeudelle paljon suuremman arvon kuin syötteen bittinopeus (tässä esimerkiksi -b:v 100M), ffmpeg näyttää vain käytä suunnilleen tulovideon bittinopeutta vp9: llä tai hieman suurempaa bittinopeutta vp8: lla. Tämä ratkaisu ei kuitenkaan näytä olevan tarkoitettu tähän.

Kuinka valitsisit crf-arvon ja miksi?

Onko parametria, joka valitsee automaattisesti bittinopeuden syötetiedosto ja sopiva crf-arvo, jotta saat saman laadun kuin syötetiedosto?

Kommentit

  • Aseta bittinopeudeksi 0. Ja kokeile crf: tä . Mutta myös korkean bittinopeuden menetelmäsi toimii, koska arvo toimii ylärajana eikä kohteena
  • @Mulvya: Tarkoittaako bittinopeus 0, että rajaa ei ole? En ' et löydä tätä man-sivulta.
  • Jos bittinopeutta ei ole asetettu nollaksi, CRF: ää rajoittaa tämä arvo. Nollalla se ' Se ei ole. Se ' on VPn-koodereiden pilkka.
  • Ok, mutta jos jätän bittinopeusparametrin kokonaan pois, laatu heikkenee, vaikka en tekisi ' t anna yläraja bittinopeudelle.
  • Linkki 200 k: lle (katso ensimmäinen opti päällä). WebM b: v 0: katso tämä -sivu .

vastaus

vastaus

Käytä kaksivaiheista vakiolaatu-tilaa: ¹

ffmpeg -i input.mp4 -b:v 0 -crf 30 -pass 1 -an -f webm /dev/null ffmpeg -i input.mp4 -b:v 0 -crf 30 -pass 2 output.webm 

Selitys:

Kun videon bittinopeus asetetaan arvoon nolla ja samalla määritetään myös CRF (vakionopeuskerroin), vakiolaatu-tila voidaan kohdistaa tiettyyn havaintojen laatutasoon. VP9: n CRF voi vaihdella välillä 0 (paras laatu) – 63 (pienin tiedostokoko).

On tärkeää asettaa videon bittinopeus nollaksi. Jos et määritä videon bittinopeutta, se on oletusarvoisesti pieni, mikä saa sinut Rajoitettu laatutilaan, jossa jokaisella kehyksellä on suurin bittinopeus. Vaikka siitä voi olla hyötyä suoratoistossa, se heikentää laatua merkittävästi, koska paljon liikettä sisältävillä kehyksillä ei ole tarvittavaa kaistanleveyttä hyvälle ulkonäölle.

Toinen syy laadun menettämiseen on, että webm (VP9) mieluummin koodaa kaksi kertaa parhaan tuloksen saavuttamiseksi. Ensimmäisessä kerroksessa kerätään tilastoja videosta, jota käytetään sitten toisessa kerroksessa pienemmän ja laadukkaamman videon tekemiseen.

Katso ffmpeg VP9 -dokumentaatio jos haluat lisätietoja.

Sana transkoodauksesta

Muuten, yleensä muotojen transkoodaus (pakatun videon ottaminen ja pakkaaminen uudelleen eri koodekki) on huono idea, koska et vain lisää häviävän videokoodauksen normaalit virheet, vaan tuhlaat bittiä uudessa muodossa yrittäessäsi säilyttää vanhan artefaktit.

Jos tarkoittaa ”ilman laadun heikkenemistä” kirjaimellisesti

ffmpegs VP9 -enkooderin -lossless 1 -vaihtoehto mahdollistaa häviöttömän laatutilan, mutta tiedostokoon mahdollisesti kasvavan valtavasti.

Tarvitset vain tämän:

ffmpeg -i input.mp4 -lossless 1 output.webm 

Kun yritin -lossless 1 huonolaatuisella mp4, tuloksena oleva webm oli 100 × suurempi, mikä ei ollut hyväksyttävä minulle. Jos mp4 -tiedostosi ovat kuitenkin jo erittäin laadukkaita, uskon, että kokoero ei ole niin suuri.


Alaviite 1: Jos ”käytät Microsoft Windowsia UNIX: n sijaan, muuta /dev/null muotoon NUL.

Kommentit

  • hyvä vastaus kiitos
  • /dev/null? Mitä tämä tarkoittaa? Mitä vastaavaa olisi Windows-käyttäjille? Korvataanko input.mp4 ensimmäisellä kerralla? Tämä vastaus tarvitsee lisäselvityksiä siitä, mitä kukin komponentti tekee. Se ei ' tarjoa välikäyttäjille paljon selitystä miten se toimii.
  • Hei Hatefriend: Vastaukseni sisältää jo pitkän selitysosan ja linkin lisätietoja varten, joten en ' en pidä sitä pidempään. Näitkö Microsoft Windowsia koskevan alaviitteen, joka vastaa kysymykseesi? Kuten edellä mainittiin, myös ensimmäisen passin les-syötetiedoston tilastot.Ei tarvitse pelätä, että se korvaa syötteen.
  • Yritin muuntaa .MTS-tiedosto .webm usigiksi näille kahdelle komennolle (Ubuntu 20.10, ffmpeg-versio 4.2.2). Mutta minulla on virheitä: " Virheellinen kanavan asettelu 5.1 (sivu) määritetylle kartoitusperheelle -1. Virhe lähtövirran 0: 1 alustamisessa – Virhe avattaessa lähtövirran # 0: 1 kooderia – ehkä virheelliset parametrit, kuten bit_rate, rate, width tai height "
  • kiitos vastauksesta. jos transkoodaus on yleensä huono idea, mitä suosittelet sen sijaan, jos haluat muuntaa mp4-videot webmiksi ja webm-videot mp4: ksi?

Vastaa

Linuxissa käytän optimizeVideo -ominaisuutta, joka on kääre ffmpegin ympärillä ja tunnistaa nämä asetukset automaattisesti Googlen suositukset .

Tuloksena on video, jonka laatueroa et voi kertoa, mutta yleensä suuruusluokkaa pienempi.

Logo

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *