El vagyok keskenyedve (mencoder, -aspect, -vf crop)

 ( NevemTeve | 2014. október 11., szombat - 20:19 )

DVD-ből csinálok AVI-t, valamennyire megy is, van egy akadályozó tényező, amit (talán) megoldottam, de azért leírom, hátha érdekel valakit, vagy van valamilyen tanácsa, hozzáfűznivalója.

Szóval, úgy tűnik, ezek a derék DVD-k egységesen 720x576-es felbontással készülnek (ami 5:4-es (1.25) képaránynak felelne meg, mármint ha a vízszintesen és függőlegesen azonos méretűek lennének a pixelek, amire azért nem vennék mérget, valamint ha nem lennének a fekete sávok (lásd lejjebb)).

Továbbá van nekik egy aspect paraméterük, ami sokszor (de nem mindig) 16:9 (1.78), illetve parancssorból is megadhatjuk, az bele is kerül az AVI fejrészébe.

Még továbbá gyakran fekete sávok vannak a kép tetején és alján -- erre való a -vf crop: megmondhatjuk, hogy mennyit vágjon le alul/felül (vízszintesen is tud, de arra ritkábban van szükség).

A gond ott van, amikor kiderül, hogy az 'aspect' értékét megszorozza az 576/ycrop értékkel. Mondjuk ha 432 hasznos sor van, akkor azt írja az AVI-ba, hogy 16/9 * 576/432 = 64/27 (2.37)

Ami persze szintén szép szám, csak a TV-n a kép nagyon keskeny lesz, mondhatni szuboptimális az eredmény.

Azt bírtam kitalálni, hogy az aspectet hamisítom meg az osztás nevű varázsművelettel: 16/9 * 432/576 = 4/3, azt ő már bátran megszorozhatja 576/432-vel, és ki is jön 16/9

(Azért maradt némi gond: még így is van némi fekete csík a kép tetején és alján, a 16:9-es AVI lejátszásánál. És DVD-lejátszáskor is. Pedig a TV (Samsung LE32R72B) kellene tudjon 16:9 arányút mutatni. Ki kellene nyomozni, milyen aspect kellene, hogy kitöltse a teljes képet pl 7/4. Vagy esetleg a pixelméret vízszintes és függőleges irányú különbségéről van szó?)

Szerk. 20160122.1205
Namostan lehet, hogy nem a '-aspect'-tel kellene kavarogni, hanem az utolsó menetben (pl. mikor a hangot összetesszük a képpel) a '-force-avi-aspect 16/9' opciót adjuk meg.

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Előrebocsátom, hogy nem nagyon értek a dologhoz.

Csak az jutott eszembe, hogy nem mindegy, hogy az először az arányt változtatja meg és azután vág, vagy fordítva. Inkább csak kérdezem, hogy nem lehet, hogy más sorrendre számítottál, mint ahogy végzi? Mert ebben az esetben hiába számoltad ki pontosan, elvileg mégis maradhat nem várt fekete csík a képen.

Ha át akarjuk tenni a 720x576 pixelt 16/9-es képarányba, a választás álztalában (576 / 9 * 16) x 576 vagyis 1024 * 576 (ugye mennyivel szimpatikusabb szám).

A következő NAGYON FONTOS lépés a váltottsorosság megszűntetése (magyarul deinterlace), mert a DVD-n 576i-ben van tárolva a kép, vagyis minden képkocka csak páros vagy csak páratlan sorokat tartalmaz. Itt a semmiből kell kitalálni azokat a pixeleket, úgyhogy tanácsos a lehető legjobb (és egyben leglassabb) algoritmust választani.

AVI, mint konténerformátum vészesen elavult. Ha van rá módod MKV vagy MP4 sokkal jobb választás.

Fekete sávok: ha mozifilmről van szó, akkor valószínűleg 21:9-es képarányú az anyag. Ez van alul-felül kibővítve, hogy a tévéd által is használt 16:9-et adja.

Teljes képernyő: az alul és felül látszó fekete sávokon kívül le kell majd vágnod (arányaiban) ugyanennyit a kép két széléből (ezzel megcsonkítva kedvenc rendeződ vízióját), vagyis gyakorlatban "bezoomolsz" 24%-ot.

Persze elindulhatsz más úton is. Kódoláskor hagyhatod a felbontást úgy ahogy van, ha egyszer a konténeredben található metaadat (az aspect ratio) úgy is ráveszi a lejátszót, hogy elvégezze a torzítást.

No akkor én is kérdezek, mert én is hasonlót szeretnék és hasonló a problémám is. Én DVD-n (vagy ISO-ban) levő anyagot akarok mindenféle átkódolás nélkül MKV-ba alakítani. Elég sok keresgélés után jutottam el egy olyan szkripthez, ami pontosa ezt csinálja, így némi testreszabás után általában megelégedéssel használom, de sok esetben pontosa azt érzem, hogy torzítás lesz az eredmény. (A TV natívan játszik MKV-t, de nem szereti az ISO-t.)
A műveletek nagy vonalakban: a transcode csomagbeli tccat kiszedi a lemezről egy nagy fájlba a VOB-ot, amit a szintén ide tartozó tcextract-tal szétszedek videóra (MPEG2), hangra (jellemzően AC3), és feliratra -előbb nyers RAW fájl, majd ezt subtitle2vobsub-bal klasszikus vobsub-ra(*.idx és *.sub). Ezekkel az a jó, hogy kivétel nélkül mind mehet az MKV-ba, tehát most csak egy mkvmerge kell. Viszont, noha az MP2-ben látszólag benne van a képméret, valamiért torz lesz a végeredmény. Szóval vajon hol kelenne - és főleg mit - fenti lépéseken változtatni.

Az elkészült MKV-ba bele tudsz lesni az mvtoolnix csomaggal. Grafikus változathoz:

mkvinfo -g

A fejlécben lesz a trackek leírása, a video trackhez külön Pixel width / height és Display width / height. - A Display beállítások elveszhetnek ha VOB-ból valami RAW formátumba szeded ki a streamet. Használatsz ott is MKV-t ha van váalsztási lehetsőéged.

Másik lehetőség, ha a VOB-ból a metaadatokat valahogy textbe tudnád exportálni, és regex-szel megtalálni benne a megfelelő display aspect ratiot.

No most megnéztem egy ilyen konvertált fájlt és az eredeti ISO-ban levő VOB-ot. Az ffmpeg -i szerint az eredeti
DAR (Display Aspect Ratio) = 16 : 9
SAR (Sample Aspect Ration) = 64 : 45

A konvertált
DAR = 4 : 3
SAR = 16 : 15

mondjuk így már érthető, hogy miért érzem torznak. Mivel kiszedni ki tudom ezeket az adatokat, már csak arra kell rájönni, hogy az mkvmerge-nek ezt hogy lehet beállítani. (Esetleg még az lenne jó, ha ehhez nem kéne újrajátszani az egész demux / remux műveletsort.)

Köszi, valahogy erre nem gondoltam!

Szerk: ja, meg arra kéne rájönnöm, hogy ez az ffmpeg-es SAR/DAR minek is felel meg az mkv-ban. (Leginkább az zavar, hogy a két érték közül egyik se azonos a bemenő és a kimenő adatok között.)

Köszönöm a hozzászólásokat, természetesen referálok majd ha jutok valamire.
Addig egy kis emlékeztető magamnak:
wiki: 576i
wiki: DVD-video
wiki: Display aspect ratio
wiki: Pixel aspect ratio

Off: a MPC HC ilyesmiket tud kiírni (Shift+F10; Média Info)

Video
ID                             : 0
Format                         : MPEG-4 Visual
Format profile                 : Advanced Simple@L5
Format settings, BVOP          : Yes
Format settings, QPel          : No
Format settings, GMC           : No warppoints
Format settings, Matrix        : Default (H.263)
Codec ID                       : XVID
Codec ID/Hint                  : XviD
Duration                       : 1h 21mn
Bit rate                       : 2 181 Kbps
Width                          : 720 pixels
Height                         : 440 pixels
Display aspect ratio           : 2.35:1
Frame rate                     : 25.000 fps
Color space                    : YUV
Chroma subsampling             : 4:2:0
Bit depth                      : 8 bits
Scan type                      : Progressive
Compression mode               : Lossy
Bits/(Pixel*Frame)             : 0.275
Stream size                    : 1.24 GiB (89%)
Writing library                : XviD 64

Note to self: a "ffmpeg -i" -t is ki kell próbálni, ha unix-közelben leszek.

Itt van pl. egy régi magyar film,

DVD: 720:576; hasznos X: 8..712, Y: 0..575
mplayer: Movie-Aspect is 1.33:1 (720x576 => 768x576)
ffprobe: 720x576 [SAR 16:15 DAR 4:3]

mencoder: -aspect 15/11 -vf crop: 704:576:8:0

output:
a MPC-HC szerint: 704x576 (4:3)
a ffmpeg szerint: 704x576 [SAR 12:11 DAR 4:3]
a mplayer szerint: Movie-Aspect is 1.33:1 (704x576 => 768x576)

Egyelőre annyit értek, hogy 704/576 * 12/11 = 4/3 = 768/576

Második példa: új francia film, képarány a dobozon 16:9 illetve 2.35:1 (nem tudnám megmondani, hogy miért van kettő)

DVD: 720x576, hasznos X:0..717, Y: 72..503
mplayer: Movie-Aspect is 1.78:1 (720x576 => 1024x576)

első, 'keskeny eredményű' konverzió:
mencoder: -aspect 2.35 -vf crop=720:432:0:72,scale

eredmény:
MPC-HC: 720x432 (163:52 = 3.13)
mplayer: Movie-Aspect is 3.13:1 (720x432 => 1354x432)
ffprobe: 720x432 [SAR 126:67 DAR 210:67]

720/432 * 126/67 = 210/67 = 3.13

Második nekifutás [az előbb említett francia filmnek, cél a 16:9 -es képarány]:

mencoder: -aspect 4/3 -vf crop=720:432:0:72

eredmény:
mplayer: Movie-Aspect is 1.78:1 (720x432 => 768x432)
ffprobe: 720x432 [SAR 1:1 DAR 5:3], 2118 kb/s, SAR 16:15 DAR 16:9
MPC HC: 720x432; aspect 16:9 original 1.667

Látszólag egész jók vagyunk, ami feltünő, hogy most több számadat van mint az előbb (aláhúzva)

AIX-es a mencoder-ed? :-D
Bocs a poénért...

"Jegyezze fel a vádhoz - utasította Metcalf őrnagy a tizedest, aki tudott gyorsírni. - Tiszteletlenül beszélt a feljebbvalójával, amikor nem pofázott közbe."

(Asszem nem dícsérnének meg, ha erre menne el az AIX-es gép CPU-ja;)

Említsük meg, hogy a 'ffmpeg' SAR-nak (Sample Aspect Ratio) nevezi a PAR-t. (Talán azért, mert a PAR a Pixel Aspect Ratio rövidítése, de esetleg összekeverhető a Picture Aspect Ratio-val. Igaz, hogy a SAR-t meg Storage Aspect Ratio-ként is lehet érteni. Dejóminden!)

A SAR-ról nekem a Specific Absorption Rate jut eszembe, de ez csak szakmai ártalom...

"Jegyezze fel a vádhoz - utasította Metcalf őrnagy a tizedest, aki tudott gyorsírni. - Tiszteletlenül beszélt a feljebbvalójával, amikor nem pofázott közbe."

Megpróbáltam összegezni eddigi félreértéseimet, íme: Képméretek