Hogyan lehet a mp4
fájlt webm
minőségromlás nélkül (vp8
vagy vp9
használatával) az ffmpeg-lel?
Ha megteszem ffmpeg -i in.mp4 out.webm
, akkor a minőség nagyon rossz. Megadhatok cél bitsebességet a -b:v
és állandó minőségű módot a crf
, azaz
ffmpeg -i in.mp4 -crf 10 -b:v 1M out.webm
Ez jobb minőséget biztosít. Ehhez azonban meg kell keresnem a bemeneti videó bitrátáját (itt 1M).
Azt is észrevettem, hogy ha sokkal nagyobb értéket ad meg a cél bitrátájához, mint a bemenet bitrátája (itt például -b:v 100M
), akkor az ffmpeg csak úgy tűnik, hogy kb. használja a bemeneti videó bitsebességét vp9-vel, vagy valamivel nagyobb bitsebességet vp8-mal. Úgy tűnik azonban, hogy ez a megoldás nem erre szolgál.
Hogyan választaná a crf értéket és miért?
Van olyan paraméter, amely automatikusan kiválasztja a a bemeneti fájl és a megfelelő crf érték, hogy ugyanolyan minőséget kapjon, mint a bemeneti fájl?
Megjegyzések
- Állítsa a bitrátát 0-ra. És kísérletezzen a crf-vel . De a magas bitrátájú módszered is működik, mivel az érték mennyezetként, nem pedig célként működik
- @Mulvya: A 0-as bitráta azt jelenti, hogy nincs korlátozás? Nem ' ezt nem találja meg a man oldalon.
- Ha a bitráta nincs nulla, a CRF-et ez az érték korlátozza. Nulla esetén ' s nem. Ez ' a VPn-kódolók furcsasága.
- Rendben, de ha a bitráta paramétert teljesen kihagyom, akkor a minőség még akkor is nagyon rossz lesz, div id = “b75c8193b8″>
t megadja a bitráta felső határát.
Válasz
Válasz
Használjon kétutas folyamatos minőségi módot: ¹
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
Magyarázat:
Ha a videó bitsebességét nulla értékre állítja, miközben megadja a CRF (Constant Rate Factor) értéket, lehetővé teszi az Állandó minőség módot, amely egy bizonyos érzékelési minőségi szintet céloz meg. A VP9 esetében a CRF a 0-tól (a legjobb minőség) és a 63-ig (a legkisebb fájlméret) terjedhet.
Fontos, hogy a videó bitsebességét nullára állítsuk. Ha nem ad meg video bitsebességet, akkor az alapértelmezés szerint valami alacsony, ami korlátozott minőségi módot eredményez, ahol minden képkocka maximális bitsebességgel rendelkezik. Noha ez hasznos lehet a streaming során, jelentősen csökkenti a minőséget, mivel a sok mozgással rendelkező keretek nem rendelkeznek a jó megjelenéshez szükséges sávszélességgel.
A minőség elvesztésének másik oka, hogy webm
(VP9) a legjobb eredmény érdekében inkább két menetben kódol. Az első lépés statisztikákat készít a videóról, amelyet a második lépésben használnak egy kisebb és jobb minőségű videó elkészítéséhez.
Kérjük, olvassa el a ffmpeg VP9 dokumentációt , ha többet szeretne megtudni.
Egy szó az átkódolásról
Egyébként általában a formátumok átkódolása (tömörített videó készítése és újracsomagolása egy különböző kodek) rossz ötlet, mivel nem csak a veszteséges videokódolásból származó normál hibákat adja hozzá, hanem az új formátumban is pazarolja a biteket, hogy megpróbálja megőrizni a régiből származó műtermékeket.
Ha jelentése: „minőségromlás nélkül” szó szerint
Az ffmpeg VP9-kódolójának -lossless 1
opciója lehetővé teszi a veszteségmentes minőségi módot, de a fájlméret potenciálisan hatalmas növekedésével.
Csak erre van szükséged:
ffmpeg -i input.mp4 -lossless 1 output.webm
Amikor -lossless 1
-et kipróbáltam egy rossz minőségű mp4
, az eredményül kapott webm
100 × nagyobb volt, ami nem elfogadható számomra. Ha azonban a mp4
fájljai már nagyon jó minőségűek, akkor a méretkülönbség nem lesz olyan nagy.
1. lábjegyzet: Ha “UNIX helyett Microsoft Windows rendszert használ, módosítsa a /dev/null
értéket NUL
értékre.
Megjegyzések
- Remek válasz köszönöm
-
/dev/null
? Mit jelent ez? Mi lenne az egyenértékűsége a Windows felhasználók számára? Felülírja ainput.mp4
az első menetben? Ez a válasz további magyarázatra szorul arra vonatkozóan, hogy pontosan mit is csinálnak az egyes komponensek. Nem nyújt ' sok közleményt a köztes felhasználóknak hogyan működik. - Szia Hatefriend: Válaszom már tartalmaz egy hosszú magyarázó részt, valamint egy linket a további információkért, ezért ' inkább nem hosszabbítom meg. Látta a Microsoft Windows-ra vonatkozó lábjegyzetet, amely megválaszolja az Ön konkrét kérdését? Továbbá, amint azt a fentiekben említettük, az első passz compi les statisztikák a bemeneti fájlról.Nem kell tartani attól, hogy felülírhatja a bemenetet.
- Megpróbáltam az .MTS fájlt konvertálni .webm usig e két parancsra (Ubuntu 20.10, ffmpeg 4.2.2 verzió). De vannak hibáim: " Érvénytelen 5.1-es csatornaelrendezés (oldal) a -1-es leképezési családhoz. Hiba a kimeneti adatfolyam 0: 1 inicializálásakor – Hiba a kódoló nyitásakor a 0: 1 kimeneti adatfolyam számára – esetleg hibás paraméterek, például bitráta, sebesség, szélesség vagy magasság "
- köszönöm a választ. ha az átkódolás általában rossz ötlet, mit javasolsz helyette, ha az mp4 videókat webm-re, a webm videókat pedig mp4-re kell konvertálni?
Válasz
Linux rendszeren a optimizeVideo fájlt használom, amely az ffmpeg körüli burkoló, amely automatikusan észleli ezeket a beállításokat a A Google ajánlásai .
Az eredmény egy olyan videó, amelynek minőségi különbségét nem tudja megmondani, de általában nagyságrendekkel kisebb.