A videokönyvtáramat HEVC formátumba konvertálom, hogy helyet szerezzek. A következő parancsot futtattam a könyvtáram összes videófájlján:
#!/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
Most a legtöbb videó kiválóan konvertálódik, és a minőség ugyanaz, mint korábban. Néhány nagyon jó minőségű videó (pl. Egy 5 GB-os filmnyomtatás) minősége romlik – a videó mind pixeles.
Nem vagyok biztos benne, mit tegyek ebben az esetben. Módosítanom kell a parancssorom crf
paraméterét? Vagy valami más?
A helyzet az, hogy tömeges átalakítást végzek. Szükségem van egy módszerre, ahol a avconv
automatikusan beállítja az összes videó beállításához szükséges paramétert.
UPDATE-1
Megállapítottam, hogy crf
az a gomb, amelyet be kell állítanom. Az alapértelmezett CRF 28. A jobb minőség érdekében 28-nál kevesebbet használhatok. Például:
avconv -i input.mp4 -c:v libx265 -x265-params crf=23 -c:a copy output.mp4
Azonban a probléma az, hogy egyes videóknál CRF A 28-as érték elég jó, míg egyes videók esetében alacsonyabb CRF szükséges. Ezt manuálisan kell ellenőriznem a nagy videók kis szakaszainak konvertálásával. De tömeges átalakításban hogyan ellenőrizhetném manuálisan az egyes videókat? Van valamilyen módja annak, hogy avconv
intelligensen beállíthatja a CRF-t a bemeneti videó szerint?
UPDATE-2
Megállapítottam, hogy van --lossless
opció x265-ben: http://x265.readthedocs.org/en/default/lossless.html .
Azonban nem tudom, hogyan kell helyesen használni. A következő módon próbáltam használni, de ellentétes eredményeket hozott (a videó még pixelesebb volt):
avconv -i input.mp4 -c:v libx265 -x265-params lossless -c:a copy output.mp4
Megjegyzések
Válasz
Saját tapasztalataim szerint, ha egyáltalán nem akar minőségromlást elérni, a – lossless is amit keres.
Nem biztos a avconv
kérdésben, de a beírt parancs megegyezik azzal, amit a FFmpeg
. A FFmpeg
mezőben a következő módon adhatja át a paramétert:
ffmpeg -i INPUT.mkv -c:v libx265 -preset ultrafast -x265-params lossless=1 OUTPUT.mkv
A legtöbb x265
kapcsolók (érték nélküli opciók) így adhatók meg (kivéve azokat a csak CLI-t használókat, amelyeket csak közvetlenül a x265
bináris fájlokkal használunk).
Ennek hiányában szeretném megosztani tapasztalataimat a x265
kódolással. A legtöbb videó esetében (legyen az WMV, MPEG vagy AVC) /H.264) A következőt használom: crf=23
. x265
dönt a többi paraméterről, és általában elég jó munkát végez.
Azonban gyakran, mielőtt elkötelezném magam egy videó teljes átkódolása mellett, tesztelem a beállításokat a szóban forgó videó kis részének konvertálásával. Itt van egy példa, tegyünk fel egy mkv fájlt, amelynek 0 adatfolyam videó, 1. adatfolyam. mivel DTS audio, és a 2. adatfolyam felirat:
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"
Ne feledje, hogy a visszavillant jelvonal megszakad egy hosszú parancsban, azért teszem, hogy segítsek a nyomon követésben egy komplex CLI bemenet különféle bitjeiből. Mielőtt soronként elmagyaráznám, az a rész, ahol a videónak csak egy kis részét konvertálja, a második sor és a második utolsó sor: -ss 0
azt jelenti, hogy 0 másodpercre kell törekedni megkezdi a bemenet dekódolását, és a -t 120
azt jelenti, hogy 120 másodperc után leáll a kimenetre való írás. Használhatja a hh: mm: ss vagy a hh: mm: ss.sss időformátumokat is.
Most soronként:
- megakadályozza, hogy a
FFmpeg
megjelenjen az építési információk indításakor. Csak nem akarom látni, amikor felfelé görgetek a konzolon; -
-ss 0
0 másodpercre törekszik, mielőtt megkezdené a bemenet dekódolását. Vegye figyelembe, hogy ha ez a paraméter a bemeneti fájl után és a kimeneti fájl előtt meg lesz adva, ez output opcióvá válik és megmondja affmpeg
a bemenet dekódolásához és figyelmen kívül hagyásához x másodpercig, majd elkezdi írni a kimenetet. Beviteli opcióként kevésbé pontos (mert a keresés nem pontos a legtöbb konténer formátumban), de szinte nem vesz igénybe időt.Kimeneti opcióként nagyon pontos, de jelentős időbe telik az összes adatfolyam dekódolása a megadott idő előtt, és tesztelés céljából nem akarja pazarolni az időt; -
-i "INPUT.mkv"
: Adja meg a bemeneti fájlt; -
-attach "COVER.jpg"
: Csatoljon egy borítót (indexkép, poszter, bármi) a kimenethez. a borító általában a fájlfeltárókban jelenik meg; -
-map_metadata 0
: Másolja át az összes metaadatot a 0 bemenetről, amely a példában csak a bemenet; -
-map_chapters 0
: Másolja át a fejezetadatokat (ha vannak) a 0 bemenetről; -
-metadata title="TITLE"
: Állítsa be a videó címét; -
-map 0:0 ...
: A 0 bemenet 0 adatfolyamja, ami azt jelenti, hogy azt akarjuk, hogy az első adatfolyam a bemenetről a kimenetre kerüljön . Mivel ez a stream egy video stream, ez az első video adatfolyam a output ban, ezért az adatfolyam-specifikátor:s:v:0
. Állítsa be a nyelvét címke angolra; -
-map 0:1 ...
: Hasonlóan a 8. sorhoz, térképezze fel a második adatfolyamot (DTS audio), és állítsa be annak nyelvét és címét (az azonosítás megkönnyítése érdekében a választásnál) játékosoktól); -
-map 0:2 ...
: Hasonló a 9. sorhoz, azzal a különbséggel, hogy ez a stream felirat; -
-metadata:s:t:0 ...
: A borító metaadatainak beállítása. Erre az mkv tároló formátumhoz van szükség; -
-c:v libx265 ...
: Videokodek beállításai. Olyan hosszú, hogy két sorra bontottam. Ez a beállítás jó minőségű, bluray videóhoz (1080p), minimális sávos átmenettel (amit x265 szippant). Valószínűleg a DVD-k, a tévéműsorok és a telefonos videók túlteljesítése. Ezt a beállítást többnyire ellopják erről a Doom9 bejegyzésről ; -
crf=22:...
: videokodek folytatása paraméterek. Lásd a fent említett fórumbejegyzést; -
-c:a copy
: Másolás hanggal; -
-c:s copy
: Feliratok másolása; -
-t 120
: 120 másodperc után hagyja abba az írást a kimenetre, amely 2 perces klipet ad nekünk a trancoding minőség előnézetéhez; -
"OUTPUT.HEVC.DTS.Sample.mkv"
: Kimeneti fájl neve. Címkézem a fájlneveimet a videokodekkel és az elsődleges audiokodekkel.
Whew. Ez az első válaszom, ezért ha hiányzik valami, kérem, hagyjon megjegyzést. Nem vagyok videoprodukció-szakértő, csak egy srác vagyok, aki lusta filmet nézni a lemez behelyezésével a lejátszóba.
PS. Lehet, hogy ez a kérdés máshova tartozik, mivel nem “szorosan kapcsolódik a Unix & Linuxhoz.
Megjegyzések
- Pontosan azt, amit kerestem ! Szép a lehetőségek lefedettsége. Tudja, hogy az ffmpeg kibillen az
c:s copy
oldalon, ha nincs felirat tartalma? - @ElderGeek Nem, az ffmpeg csak akkor mond valamit, ha ennek az opciónak van hatása.
- @TheBitByte Igen és nem, azt hiszem. Nem ‘ nem akar veszteségmentes h265 fájlokat. ‘ csak nyers bitfolyam, mindenféle tömörítés nélkül. ‘ óriási. A h265 vagy konkrétan az x265 megvalósításának megértése alapján nem veszteségmentes tömörítési módszer. Bármilyen mértékű tömörítés információvesztést, de nem feltétlenül a nézési minőség romlását eredményezi. De ‘ nem vagyok szakértő a h265 témákban, ezért ‘ lehetséges, hogy valamit elmulasztottam
- @ Nem hiszem, hogy a BitByte ‘ veszteség nélküli tömörítési szint van a h265-ben. A tömörítés nélküli opcióhoz ‘ csak
--lossless
. Hiába kerestem egy veszteség nélküli átalakulást h264-ről h265-re, és amit megtanultam, azt ‘ matematikailag lehetetlen. - A
--lossless
kapcsolót tartalmazó parancsot valóban ki kell szerkesztenie ebből a válaszból, mert erre a kérdésre válaszként úgy hangzik, mintha ön ‘ újra elmondja ‘ veszteség nélküli tömörítését, ami félrevezető.
Válasz
Nemrégiben átéltem a problémát, amikor átkódoltam a teljes videokatalógusomat a HEVC-re. A >
a következő beállításokkal.
h265ize -v -m medium -q 20 -x –no-sao – -aq-mode 3 –delete –stats
-v – Bővített kimenet
-m közepes – közepes kódolja a sebességet (kisebb, jobb minőségű, bármi, amit lassabban találok, nem éri meg az idő / minőség különbséget)
-q 20 – a használt CRF, 20 hasonló az x264-es 18-hoz, de hé.Ez 1080p tartalomra vonatkozik (a tévém 90% -a). 22-et szoktam használni 4K-s filmjeimhez
-x – Használjon x265 központi definiált parancsokat
–no-sao kikapcsolja az adaptív eltolás mintáját (javítja a kódolás sebességét)
– aq-mode 3 – használja az adaptív kvantálást automatikus varianciával, segíti a 8 bites kódolásokat, különösen sötét területeken, leáll az előforduló sávozás nagy része (bár a kódolási idő rovására megy)
–delete – cserélje le a kódolási fájlt kódolt fájl (tesztelje, mielőtt használná ezt)
– stats – Statisztikákat írjon ki a gyökér csv fájljába az útvonal, amelyről lefutott.
A kódolási sebesség kb. 30 kép / mp (a legtöbb 1080p-s anyag esetében) a fúrótornyomon. Dual Xeon E5 2687W v2, de arra kényszerítem az FFMPEG folyamatot, hogy ne használja az egyik processzor első oldalát (Ez a Plex szerverem, ezért meg kell győződnünk arról, hogy szükség van-e átkódolásra, ha szükséges lejátszáskor stb.)
Igen, a legtöbb átalakítása egy ideig tartott, és most van egy ütemezett feladatom, amely naponta kétszer fut, hogy az adott naptól kezdve x265-ig kódolja a dolgokat.
A helymegtakarítás óriási. A kezdeti SAN-om 20 TB-os volt, most 12 körül van, de nyilvánvalóan hozzá lett adva 6 hónappal több tartalommal is.
Az összes filmemet is átkódoltam, de ez folyamatban lévő folyamat, mivel azonosítanom kell a minőségi szinteket (a Radarr szerencsére szépen felcímkézi), és a három átkódolási beállítás egyikét kell használnom:
-m slower -q 18 -x --no-sao --aq-mode 3
720p átkódokhoz
-m medium -q 20 -x --no-sao --aq-mode 3
1080p-hez
-m medium -q 22 -x --no-sao
a 2160p-hez
Remélem, hogy néhány embernek segít. Kiabáljon, ha valakinek szüksége van És mielőtt mindent kódolna x265-re, gondoljon a lejátszásra, ha az ügyfél nem támogatja az x265 natív verzióját, akkor a transzkád drága lehet a CPU és a minőség szempontjából.
Megjegyzések
- x265 2.4 és újabb verziókkal (élesebb kódolást biztosító új lambda táblákkal ) az ÁSZ általában jó dolog a bitráta / minõség minõségében. Még mindig kissé elkenődik, de az egyéb műtárgyakat eléggé csökkenti ahhoz, hogy megérje.
-
-q 20
nem CRF 20, hanem ‘ s konstans QP ellenőrzési vezérlés . Az alapértelmezett és az ajánlott mód, a CRF, felemeli a QP-t nagyon bonyolult jelenetekben, így nem ‘ nem költenek túl sok bitet olyan jelenetekre, amelyeket túl nehéz kódol. (Ha közelebb akar szállni az egységes QP-hez, emelje fel aqcomp
-t az alapértelmezett 0,6-ról talán 0,7-re vagy 0,8-ra. Közelebb az 1.0-hoz közelebb van a CQP-hez.) - hogyan kezeled a hdr / sdr kódolásokat, amikor nem tudod ‘, hogy mi a forrás?
Válasz
Az x265 kódoló veszteség nélküli módjának ffmpegben történő engedélyezéséhez a helyes szintaxis -x265-params lossless=1
(hozzá kell adnia a =1
).
A veszteségmentes kódoláshoz azonban jobb kodek választási lehetőségek vannak. Teszteléssel azt tapasztaltam, hogy az FFV1 sokkal jobb tömörítést (fájlméret = az x265 ~ 80% -a) legalábbis bizonyos típusú videóknál (ha mindkettőhöz a legjobb beállításokat választják) kodekek). És gyorsabban is működik, és az (AFAIK) szabadalmak nem terhelik. Vagyis minden szempontból felülmúlja a veszteségmentes H.265-öt a videók archiválásában. A kompromisszum azonban kompatibilitás a jelenlegi lejátszási szoftverekkel és hardverekkel.
--lossless
valójában megnövelheti a fájlt, ha dekódolja a korábban veszteséges kodeket, majd titkosítja, amit veszteségmentesen dekódolt. A minőség pontosan ugyanaz marad, mint az input.