mp4 és ami benne van

Fórumok

A kérdésem az, hogy ha az mp4 egy konténer, akkor nem édesmindegy, hogy mi van benne? Nem olvastam szabványt, csak kérdezem. Hangnak vorbist, videónak h.264-et tettem bele. Na, ezzel el is értem, hogy parole-vel megkísérelve a lejátszást a gstreamer elérte, hogy hardware-esen magába fordult a VGA kártyám. A gépre be tudtam ssh-zni, logban ott volt, hogy watcdog interrupt, engine hung. Mindegy, ssh-n keresztül sync, aztán reboot volt. Ugyanakkor ffplay le tudta játszani a felvételt. Naná, az mondjuk bármit, legyen akármilyen szokatlan is a kombináció.

Hozzászólások

Mi a kérdés?
Más konténerrel, de ugyanazon kódolással nincs ilyen gond? Inkább valami szoftver bug, mint hogy a konténer lenne háklis.

Az a kérdésem, hogy az mp4 konténeren belül van valami erősen szokásos kódolás - pl. h.264 és aac -, vagy bármit beletehetek, azt a lejátszónak illene ismerni? Mert a hangot libvorbis-szal enkódoltam.

Megvilágítom egy példán keresztül. Ami wav, az jellemzően sztereó, 44.1 kHz mintavételi frekvenciájú, csatornánként 16 bit, kettes komplemens ábrázolású, lineáris kódolással készült hanganyag. Viszont lehetne benne mono G.711 A-law, 8 kHz mintavétellel is, mert megengedett, bár könnyen lehet, egynémely lejátszónak fennakadna a szeme, ha ilyen formátumú wav-val találkozna, s nem azzal, amire számít.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

https://en.wikipedia.org/wiki/Comparison_of_video_container_formats
Hivatalosan nem támogatott, de azért csak illene már lassancskán. Valamint csak vannak azonosítók az adatfolyamban, hogy milyen kódolású az anyag. Nem vakon tapogatózik a lejátszó. Esetleg a kép-hang szinkron miatt lehet gázos.
Akkor marad az MKV.

> nem édesmindegy, hogy mi van benne?

Nem. Az egy dolog, hogy technikailag mi tud benne lenni, és képes voltál belecsomagolni egy Vorbis hangsávot, de egy másik pedig, hogy a lejátszó eszközök mit támogatnak.

Az MP4 konténerben tradícionálisan MPEG-4 Part 10 (H.264) és MPEG-4 Part 2 videósáv, valamint AAC hangsáv lehet.
Ezeken felül, több lejátszó támogatja még MPEG 1/2 videósáv, és MPEG 1 Layer 1/2 hangsáv használatát, de erre mérget ne vegyél.

Bármi más formátumra pedig pláne nem.

Raktam bele h.264-et meg aac-ot, ezt szerette már a gstreamer is. Mellesleg copy-val új konténerbe téve gond volt a szinkronnal is, meg a képpel is. Lejátszótól függően vagy a hang ugrott, vagy a kép állt meg időnként, a kép minősége - szintén lejátszótól függően - vagy jó volt, vagy borzalmas. Viszont a h.264 és aac tartalmú mp4-et imádják a lejátszó programok. :)

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Van rá valami ok, ami miatt muszáj mp4 konténert használnod? Mert ha nincs, akkor mkv-vel meg vorbis-konténerrel jobban járnál. A GStreamer meg egy hulladék alapvetően, a rá épülő lejátszókkal együtt. Használj helyette mpv-t.

„Pár marék nerd-et leszámítva kutyát se érdekel már 2016-ban a Linux. Persze, a Schönherz koliban biztos lehet villogni vele, de el kéne fogadni, ez már egy teljesen halott platform. Hagyjuk meg szervergépnek stb…” Aron1988@Proharder Fórum

Elvileg (meg szerintem gyakorlatilag is) az mplayer, mplayer2, mpv ffmpeg modulokkal van összefordítva, alapból azt használják a legtöbb formátumnál lejátszásra. GUI is van hozzájuk, az SMPlayert különösen ajánlom, de helyette bőven elég az mpv beépített OSD-s GUI-ja, nem csicsás, de több nem kell. Persze ha annyira ragaszkodsz az ffplayhez, akkor biztosan ahhoz is van valami GUI frontend, csak lusta vagyok utánanézni. Nekem évek óta elég az mpv, mindent lejátszik, nem omlik össze, visz olyan anyagokat is, amiktől a többi lejátszó (közöttük a VLC-vel) crashel.

„Pár marék nerd-et leszámítva kutyát se érdekel már 2016-ban a Linux. Persze, a Schönherz koliban biztos lehet villogni vele, de el kéne fogadni, ez már egy teljesen halott platform. Hagyjuk meg szervergépnek stb…” Aron1988@Proharder Fórum

mpv FTW!

En csak par honapja akadtam ra, de gyorsan utott mindent. VLC meg gstreamer alapu cuccokkal idonkent teszek egy probat, majd rajovok, hogy megint mennyi idot b..tam el feleslegesen rajuk.
mplayer mar nem annyira fejlodik
mplayer2-ben mar vannak javulasok, de meg mindig nem lattam a fenyt az alagut vegen. Pl. futottam bele olyan videoba, amiben sem az mplayer sem az mplayer2 nem tudott rendesen seekelni.
mpv -> tokeletes! vdpau, vaapi, meg mindenfele hozzuk ki a hardware-bol a legtobbet megoldast tamogat. Nem azt mondom, hogy a vilag seek-elesi problemajanak 100%-at kijavitottak benne, de azt hatarozottan ki merem jelenteni, hogy a sajat gyujtemenyemben nem sikerult belefussak olyan multimedias fajlba, amiben az mpv ne tudott volna korrektul seekelni.
Jah, es meg egy nagyon remek feature, ami a tobbi ffmpeg based lejatszobol (pl. mplayer{,2}) kimarad: tobb magos CPU-nal kepes a terhelest szetdobni a magoknak, ami egeszen jol jon, amikor valami 4K videot kell a gyenge kis 4. generacios i5-on lejatszani. Egeszen turhetoen viszi. Azon a konfigon masnak ez meg nem sikerult.
(Persze a helyzet ironiaja, hogy ugyanazt a videot a toredeke aramot fogyaszto Odroid C2 + libreelec alapu kodi aztan tenyleg erolkodes nelkul hw-bol lejatsza. Igaz, neki nem kell mas eroforraszabalo hulyesegekkel torodnie, csak a videolejatszassal, azt viszont tokeletesen csinalja)

"ha az mp4 egy konténer, akkor nem édesmindegy, hogy mi van benne? "
Nem, hiszen minden konténerformátum leírja, hogy milyen típusú streamek lehetnek benne. Mind az audiokodeknél, mind a videokodeknél létezik egy-egy lista, amely codecec benne lehetnek a konténerben, hiszen valamiképpen el kell küldeni az információt a lejátszó felé, hogy azt a bitsorozatot, amit a 2-es számú audio tracken talál, miként értelmezze.
És ez ugye a konténer metaadat-részében van leírva.
Az MKV esetén is definit az a lista, hogy milyen kódolású audio/video/text tartalom lehet benne:
https://www.matroska.org/technical/specs/index.html
Lásd: CodecID.
https://www.matroska.org/technical/specs/codecid/index.html

Ennyi minden lehet benne egy MKV-ban, ami szabványos.

Minden konténerformátumra igaz ez.

Végső soron logikus, amit írsz. Amúgy jobb lenne, ha minden codec kapna valamilyen legalább 16 bites azonosítót, s minden konténer ezt használná. Az eltérő codeceket még csak értem, konténerből viszont fene tudja, minek annyi féle.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Létezik olyan dolog, hogy FourCC, de az csak video codecekre igaz, csak épp ez nem hivatalos, nem szabványos (olyan értelemben, hogy nem szabványügyi szervezet a nyilvántartó).
Lásd: https://www.fourcc.org/fourcc.php
Az AVI konténer például FourCC-t használ a videokodek azonosításra.

Pedig valóban jobb lenne, ha létezne az IANA-hoz hasonló szervezet, és a szabványos MIME-típusoknak megfelelően szabványos kodekazonosítókat is nyilván lehetne tartani.