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
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ä:
-
-hide_banner
estääFFmpeg
näyttämästä rakennustietoja alusta. En vain halua nähdä sitä vierittäessäni ylöspäin konsolissa; -
-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 kertooffmpeg
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; -
-i "INPUT.mkv"
: Määritä syötetiedosto; -
-attach "COVER.jpg"
: Liitä kansilehti (pikkukuva, juliste, mikä tahansa) lähtöön. kansikuva näkyy yleensä tiedostojen etsinnässä; -
-map_metadata 0
: Kopioi kaikki ja kaikki metatiedot tulosta 0, joka esimerkissä on vain tulo; -
-map_chapters 0
: Kopioi luvun tiedot (jos sellaisia on) tulosta 0; -
-metadata title="TITLE"
: Aseta videon otsikko; -
-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; -
-map 0:1 ...
: Samanlainen kuin rivi 8, kartoita toinen virta (DTS-ääni) ja aseta sen kieli ja otsikko (helpompaa tunnistamista valittaessa pelaajilta); -
-map 0:2 ...
: Samanlainen kuin rivi 9, paitsi että tämä virta on alaotsikko; -
-metadata:s:t:0 ...
: Aseta kansikuvan metatiedot. Tätä vaaditaan MKV-säilömuodossa; -
-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ä ; -
crf=22:...
: videokoodekin jatkaminen parametrit. Katso yllä mainittu foorumiviesti; -
-c:a copy
: Kopioi ääni; -
-c:s copy
: Kopioi tekstitys; -
-t 120
: Lopeta kirjoittaminen lähtöön 120 sekunnin kuluttua, mikä antaa meille 2 minuutin leikkeen trancoding-laadun esikatselua varten; -
"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ä, nostaqcomp
oletusarvosta 0,6 arvoon 0,7 tai 0,8. Lähempänä arvoa 1,0 on lähempänä CQP: tä.)
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.
--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ö.