Yritän muuntaa videokirjastoni HEVC-muotoon tilaa lisäämiseksi. Suoritin seuraavan komennon kaikista kirjastoni videotiedostoista:

 #!/bin/bash for i in *.mp4; do #Output new files by prepending "X265" to the names avconv -i "$i" -c:v libx265 -c:a copy X265_"$i" done  

Nyt useimmat videot muuntuvat hyvin ja laatu on sama kuin aiemmin. Muutama erittäin korkealaatuinen video (esim. Yksi 5 Gt: n elokuvan tulostus) menettää laadunsa – video on kaikki pikseloitu.

En ole varma, mitä tässä tapauksessa pitäisi tehdä. Pitääkö minun muokata komentorivillä parametria crf? Tai jotain muuta?

Asia on, että teen joukkokonversiota. Tarvitsen menetelmän, jossa avconv säätää automaattisesti tarvittavat parametrit jokaiselle videolle.

UPDATE-1

Löysin sen crf on säädin, jota minun on säädettävä. Oletusarvoinen CRF on 28. Laadun parantamiseksi voisin käyttää jotain alle 28. Esimerkiksi:

avconv -i input.mp4 -c:v libx265 -x265-params crf=23 -c:a copy output.mp4 

Ongelmana on kuitenkin se, että joillekin videoille CRF arvo 28 on tarpeeksi hyvä, kun taas joillekin videoille vaaditaan pienempi CRF. Tämä on jotain, joka minun on tarkistettava manuaalisesti muuntamalla pienet osiot isoista videoista. Mutta miten joukkovahvistuksessa tarkistan jokaisen videon manuaalisesti? Onko jokin tapa, jolla avconv voi säätää CRF: tä sisääntulovideon mukaan älykkäästi?

UPDATE-2

Huomasin, että --lossless -vaihtoehto x265: ssä: http://x265.readthedocs.org/en/default/lossless.html .

En kuitenkaan tiedä, kuinka käyttää sitä oikein. Yritin käyttää sitä seuraavalla tavalla, mutta se tuotti päinvastaisia tuloksia (video oli vielä pikseloituneempi):

avconv -i input.mp4 -c:v libx265 -x265-params lossless -c:a copy output.mp4 

kommentit

  • --lossless saattaa itse asiassa suurentaa tiedostoa, jos se purkaa aiemmin häviöllisen koodekin ja sitten koodaa mitä se dekoodasi häviöttömästi. Laatu pysyy täsmälleen samalla tasolla kuin syöttö.
  • Jos lähteesi koodataan häviöksi (mikä on todennäköisintä), yrität saavuttaa mahdotonta. ei ole häviötön, heikentää laatua entisestään (vaikka se ei olisikaan heti näkyvissä sinulle) ja jos muunnat häviöllisestä häviöttömäksi, saat suuremmat tiedostokoot .

vastaus

Oman kokemukseni mukaan, jos et halua minkäänlaista laadun heikkenemistä, –lossless on mitä etsit.

Et ole varma avconv: stä, mutta kirjoittamasi komento näyttää identtiseltä siitä, mitä teen FFmpeg. Kohdassa FFmpeg voit välittää parametrin näin:

ffmpeg -i INPUT.mkv -c:v libx265 -preset ultrafast -x265-params lossless=1 OUTPUT.mkv 

Useimmat x265 -kytkimet (vaihtoehdot, joilla ei ole arvoa) voidaan määrittää tällä tavoin (lukuun ottamatta vain CLI-kytkimiä, niitä käytetään vain suoraan x265 -binaaristen kanssa).

Kun tämä ei ole mahdollista, haluan jakaa kokemukseni x265 -koodauksesta. Useimmille videoille (olipa se sitten WMV, MPEG tai AVC) /H.264) Käytän crf=23. x265 päättää muut parametrit ja yleensä se tekee tarpeeksi hyvää työtä.

Kuitenkin usein ennen kuin sitoudun koodaamaan video kokonaisuudessaan, testaan asetuksia muuntamalla pieni osa kyseessä olevasta videosta. Tässä esimerkissä oletetaan, että mkv-tiedosto, jossa virta 0 on video, virta 1 on DTS-ääni ja virta 2 on alaotsikko:

ffmpeg -hide_banner \ -ss 0 \ -i "INPUT.mkv" \ -attach "COVER.jpg" \ -map_metadata 0 \ -map_chapters 0 \ -metadata title="TITLE" \ -map 0:0 -metadata:s:v:0 language=eng \ -map 0:1 -metadata:s:a:0 language=eng -metadata:s:a:0 title="Surround 5.1 (DTS)" \ -map 0:2 -metadata:s:s:0 language=eng -metadata:s:s:0 title="English" \ -metadata:s:t:0 filename="Cover.jpg" -metadata:s:t:0 mimetype="image/jpeg" \ -c:v libx265 -preset ultrafast -x265-params \ crf=22:qcomp=0.8:aq-mode=1:aq_strength=1.0:qg-size=16:psy-rd=0.7:psy-rdoq=5.0:rdoq-level=1:merange=44 \ -c:a copy \ -c:s copy \ -t 120 \ "OUTPUT.HEVC.DTS.Sample.mkv" 

Huomaa, että taaksepäin vilkkuva signaalilinja katkeaa pitkässä komennossa, teen sen auttaakseni minua seuraamaan monimutkaisen CLI-tulon useista biteistä. Ennen kuin selitän sen riveittäin, osa, jossa muunnat vain pienen osan videosta, on toinen rivi ja toinen viimeinen rivi: -ss 0 tarkoittaa 0 sekunnin etsimistä ennen alkaa dekoodata tuloa, ja -t 120 tarkoittaa, että lopettaa kirjoittaminen lähtöön 120 sekunnin kuluttua. Voit käyttää myös hh: mm: ss tai hh: mm: ss.sss aikamuotoja.

Nyt rivi riviltä:

  1. -hide_banner estää FFmpeg näyttämästä rakennustietoja alusta. En vain halua nähdä sitä vierittäessäni ylöspäin konsolissa;
  2. -ss 0 pyrkii 0 sekuntiin ennen tulon dekoodauksen aloittamista. Huomaa, että jos tämä parametri annetaan jälkeen syötetiedoston ja ennen tulostustiedoston jälkeen, siitä tulee lähtövaihtoehto ja kertoo ffmpeg purkaa ja ohittaa syötteet x sekuntiin asti ja aloita sitten kirjoittaminen lähtöön. Syöttövaihtoehtona se on vähemmän tarkka (koska etsiminen ei ole tarkkaa useimmissa konttiformaateissa), mutta vie melkein aikaa.Lähtövaihtoehtona se on hyvin tarkka, mutta koko virran purkaminen ennen määritettyä aikaa vie paljon aikaa, ja testausta varten et halua tuhlata aikaa;
  3. -i "INPUT.mkv": Määritä syötetiedosto;
  4. -attach "COVER.jpg": Liitä kansilehti (pikkukuva, juliste, mikä tahansa) lähtöön. kansikuva näkyy yleensä tiedostojen etsinnässä;
  5. -map_metadata 0: Kopioi kaikki ja kaikki metatiedot tulosta 0, joka esimerkissä on vain tulo;
  6. -map_chapters 0: Kopioi luvun tiedot (jos sellaisia on) tulosta 0;
  7. -metadata title="TITLE": Aseta videon otsikko;
  8. -map 0:0 ...: Tulon 0 karttavirta 0, mikä tarkoittaa, että haluamme, että ensimmäinen tulo syötteestä kirjoitetaan lähtöön . Koska tämä virta on videovirta, se on ensimmäinen video -virta tuotoksessa , joten virran määrittelijä :s:v:0. Aseta kieli tagi englanniksi;
  9. -map 0:1 ...: Samanlainen kuin rivi 8, kartoita toinen virta (DTS-ääni) ja aseta sen kieli ja otsikko (helpompaa tunnistamista valittaessa pelaajilta);
  10. -map 0:2 ...: Samanlainen kuin rivi 9, paitsi että tämä virta on alaotsikko;
  11. -metadata:s:t:0 ...: Aseta kansikuvan metatiedot. Tätä vaaditaan MKV-säilömuodossa;
  12. -c:v libx265 ...: Videokoodekki-asetukset. Se on niin kauan, että olen hajottanut sen kahteen riviin. Tämä asetus on hyvä laadukkaalle bluray-videolle (1080p), jossa on vain vähän kaistalevyn kaltevuutta (jota x265 imee). Se on todennäköisesti DVD-levyjen, TV-ohjelmien ja puhelinvideoiden ylenmääräinen. Tämä asetus on enimmäkseen varastettu tästä Doom9-viestistä ;
  13. crf=22:...: videokoodekin jatkaminen parametrit. Katso yllä mainittu foorumiviesti;
  14. -c:a copy: Kopioi ääni;
  15. -c:s copy : Kopioi tekstitys;
  16. -t 120: Lopeta kirjoittaminen lähtöön 120 sekunnin kuluttua, mikä antaa meille 2 minuutin leikkeen trancoding-laadun esikatselua varten;
  17. "OUTPUT.HEVC.DTS.Sample.mkv": Tulostetiedoston nimi. Tunnistan tiedostoni nimet videokoodekilla ja ensisijaisella audiokoodekilla.

Whew. Tämä on ensimmäinen vastaukseni, joten jos jotain puuttuu, jätä kommentti. En ole videotuotannon asiantuntija, olen vain kaveri, joka on liian laiska katsomaan elokuvaa laittamalla levy soittimeen.

PS. Ehkä tämä kysymys kuuluu muualle, koska se ei ole vahvasti sidoksissa Unix & Linuxiin.

Kommentit

  • Tarkalleen mitä etsin ! Mukava kattavuus vaihtoehdoista. Tiedätkö, jos ffmpeg erkanee kohdasta c:s copy, jos tekstityksiä ei ole?
  • @ElderGeek Ei, ffmpeg sanoo vain, jos tällä vaihtoehdolla on vaikutusta.
  • @TheBitByte Kyllä ja ei, luulen. Et halua ’ et halua häviöttömiä h265-tiedostoja. Se ’ on vain raaka bittivirta ilman minkäänlaista pakkausta. ’ se on valtava. Sen perusteella, mitä ymmärrän h265: stä tai erityisesti x265-toteutuksesta, se ei ole häviötön pakkausmenetelmä. Mikä tahansa pakkausaste johtaa tietojen menetykseen, mutta ei välttämättä katselu laadun heikkenemiseen. Mutta en ’ en ole asiantuntija h265-aiheissa, joten ’ on mahdollista, että kaipasin jotain
  • @ TheBitByte En usko, että h265: ssä on häviötön pakkaustaso. Pakkauksettomalle vaihtoehdolle se ’ on vain --lossless. Etsin turhaan häviötöntä muuntamista h264: stä h265: ksi, ja mitä olen oppinut ’ olen kertonut minulle, että se on ’ matemaattisesti mahdotonta.
  • Sinun tulisi todella muokata komentoa, joka sisältää kytkimen --lossless, pois tästä vastauksesta, koska vastauksena tähän kysymykseen kuulostaa siltä kuin sinä ’ sanomalla sen uudelleen ’ häviötön pakkaaminen, mikä on harhaanjohtavaa.

Vastaa

Olen viime aikoina kokenut ongelman muuntaa koko videoluetteloni HEVC: lle. Käytän https://github.com/FallingSnow/h265ize seuraavilla asetuksilla.

h265ize -v -m medium -q 20 -x –no-sao – -aq-mode 3 –delete –stats

-v – Verbose Output
-m medium – Keskitaso koodaa nopeus (pienempi korkealaatuinen, mielestäni kaikki hitaampi ei ole aika / laatu-arvoinen)
-q 20 – käytetty CRF, 20 on samanlainen kuin noin x264, mutta hei.Tämä koskee 1080p-sisältöä (90% televisiosta). Minulla on tapana käyttää 22: ta 4K-elokuviini

-x – Käytä x265 keskitetysti määritettyjä komentoja
–no-sao sammuttaa näytteen adaptiivisen siirtymän (parantaa koodauksen nopeutta)
–aq-mode 3 – käytä mukautuvaa kvantisointia automaattisella varianssilla, auttaa 8-bittisiä koodauksia, erityisesti pimeillä alueilla, pysähtyy suurin osa mahdollisista kaistoista (koodausajan kustannuksella)

–poista – korvaa koodaustiedosto koodattu tiedosto (testaa ennen tämän käyttämistä)
– stats – Kirjoita tilastot CSV-tiedostoon juuressa polusta, josta juoksit.

Koodaamisnopeus on noin 30 kuvaa sekunnissa (useimmille 1080p-tavaroille). Dual Xeon E5 2687W v2, mutta pakotan FFMPEG-prosessin olemaan käyttämättä yhden prosessorin ensimmäistä puolta (Se on minun Plex-palvelimeni, joten sinun on varmistettava, että transkoodauksessa on ylimääräisiä kuluja tarvittaessa toiston aikana jne.)

Kyllä, suurimman osan muuntamisesta kesti jonkin aikaa, ja nyt minulla on ajoitettu tehtävä, joka suoritetaan kahdesti päivässä koodatakseni sen päivän tiedostot x265: een.

Tilansäästöt ovat olleet valtavia. Alkuperäinen SAN oli 20Tb: n käytössä, nyt se on noin 12, mutta on ilmeisesti lisätty myös 6 kuukautta enemmän sisältöä.

Olen myös alkanut koodata kaikki elokuvani myös, mutta jatkuva prosessi, koska minun on tunnistettava laatutasot (Radarr onneksi merkitsee sitten hienosti) ja käytettävä yhtä kolmesta transkoodiasetuksesta:

-m slower -q 18 -x --no-sao --aq-mode 3 720p transkoodeille
-m medium -q 20 -x --no-sao --aq-mode 3 1080p: lle
-m medium -q 22 -x --no-sao 2160p: lle

Toivottavasti jotkut ihmiset auttavat. Huutaa, jos joku tarvitsee Ja ennen kuin koodaat kaiken x265: ksi, mieti toistoa, jos asiakas ei tue alkuperäistä x265: ää, transkadi voi olla kallista suorittimen ja laadun kannalta.

Kommentit

  • Kanssa x265 2.4 ja uudemmat (uusilla lambda-taulukoilla , jotka antavat terävämmät koodaukset), SAO on yleensä hyvä laatu bittinopeutta kohti. Se tahraa edelleen hiukan, mutta vähentää muita artefakteja tarpeeksi, jotta se olisi sen arvoista.
  • -q 20 ei ole CRF 20, se ’ s vakio QP-ohjauksen hallinta . Oletus- ja suositeltava tila, CRF, nostaa QP: tä eräissä monimutkaisissa kohtauksissa, joten se

ei kuluta liian monia bittejä kohtauksiin, joita on liian vaikea koodata. (Jos haluat lähemmäs yhtenäistä QP: tä, nostaqcompoletusarvosta 0,6 arvoon 0,7 tai 0,8. Lähempänä arvoa 1,0 on lähempänä CQP: tä.)

  • miten käsitteletkö hdr / sdr-koodauksia, kun et tiedä ’ et tiedä mikä lähde on?
  • Vastaa

    Oikea syntaksi, joka sallii häviöttömän tilan x265-kooderille ffmpegissä, on -x265-params lossless=1 (sinun on liitettävä =1).

    Häviöttömälle koodaukselle on kuitenkin parempia koodekkeja. Huomasin testaamalla, että FFV1 pakataan huomattavasti paremmin (tiedostokoko = ~ 80% x265: stä) ainakin joissakin videoissa (jos molemmille valitaan parhaat asetukset) koodekit). Ja se toimii myös nopeammin, ja patentit eivät rasita (AFAIK) -tekniikkaa. Toisin sanoen se on kaikin tavoin parempi kuin häviötön H.265 videoarkistoinnissa. Kompromissi on kuitenkin yhteensopivuus nykyisten toisto-ohjelmistojen ja laitteistojen kanssa.

    Vastaa

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