[megoldva] h.264 kódolási tanácsok

 ( Fisher | 2012. január 8., vasárnap - 13:22 )

Két dolgot keresek: az első az amolyan h.264 for dummies. A Wikipédia elég jól leírja pl. a profilok közötti különbségeket, de az már picit tömény nekem.

A másik viszont egy megoldás a problémámra. Noob módjára, Handbrake-el gyártok mp4 konténerbe csomagolt videót. Minden remek, ám ha stream-elem ezt a mp4-et, akkor a webes lejátszóban az egy-egy időpillanatra ugrás nem az igazi. A hang azonnal megvan, ám a kép csak hosszú másodpercek után indul el. Ennek valószínűleg olyasmi oka van, hogy addig tart neki, amíg összeszedi a teljes frame megjelenítéséhez szükséges információkat, ám mit lehetne tenni, hogy ez hamarébb menjen neki? Régen az I frame-k számának növelésével lehetett az ilyesmin valamennyire segíteni, a méret rovására, de a h264-ben már annyi minden van, hogy jobbnak látom, ha hozzáértő ember ad tanácsot :D

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ő.

A kodolód az elejére rakja a meta infot?

Ha ennek lenne valami jelentősége, akkor a hang is csak nehezen kerülne elő, nem?

Amit találtam (http://mewiki.project357.com/wiki/X264_Settings) az alapján a --keyint lesz az érdekes:

"Sets the maximum interval between IDR-frames (aka keyframes) in x264's output. You can specify "infinite" to never insert non-scenecut IDR-frames.

IDR-frames are 'delimiters' in the stream - no frame can reference data from the other side of the IDR-frame. As well as this, IDR-frames are also I-frames, so they don't reference data from any other frame. This means they can be used as seek points in a video."

Én is erre tippelnék.

(Amikor tetszőleges helyre tekersz az MP4-ben, akkor ott megkeresi a legelső olvasható frame-et. Ez valószínűleg nem egy keyframe lesz. Keyframe egy olyan frame, ami önmagában kódol egy teljes képet, és nincs szükség semmilyen előzményre ahhoz, hogy meg tudja jeleníteni a dekóder a frame-et. Tehát ráugrik egy köztes frame-re, ami az előző frame-től (vagy keyframe-től, nem tudom) való különbségeket tárolja csak. Mivel te tetszőleges helyre ugrottál, ezért nem tudja a dekóder, hogy mi az az "alapframe", amire rá kéne húzni a változtatásokat, ezért vár addig, amíg be nem jön egy keyframe. Ha ritkák a keyframe-ek, akkor ez sokáig tart. Ez olyan, hogy kb. hiába van meg a diff fájlod, ha nincs mire rápatchelni, akkor nem sokat ér)
--
http://www.open-st.eu

A megoldás valóban a keyint lett. Ma megint lett egy olyan filmecske, ami nem csak pár másodperc, hanem több mint 10 perc hosszú.

Csináltam pár tesztet:

2012.03.04.  10:51       173 551 556 new movie.movie---1keyint100.m4v
2012.03.04.  10:27       185 094 152 new movie.movie---1keyint20.m4v
2012.03.04.  10:43       247 841 763 new movie.movie---1keyint4.m4v
2012.03.04.  10:35       170 622 162 new movie.movie---1nokeyint.m4v

A gyakorlatban úgy találtam, hogy a keyint=4 már túlzás, de a keyint=20 már elég jó eredményt ad, nem túlságosan nagy méretnövekedés árán. Azt tudni kell, hogy ez egy FPS játékból felvett film, más nyersanyag esetén esetleg merőben más eredmények jöhetnek ki.