Recenze  |  Aktuality  |  Články
Doporučení  |  Diskuze
Filmy a seriály, streamovací služby
Televize  |  Projektory
Audio a domácí kina
Multimediální centra  |  Ostatní
Svět hardware  |  Digimanie
Svět mobilně

Kontejner není kontejner

10.5.2005, Radek Jahoda, recenze
Již je to dávno, co jsme se zabývali různými typy souborů pro uchování videa. Od té doby jich pár přibylo, takže je na čase si udělat novou rekapitulaci. Souborům, které v sobě nesou video a/nebo zvuk, popřípadě ještě něco dalšího, se říká anglicky containers a tak jim tak budeme říkat i my - kontejnery. Podívejme se na seznam těch nejběžnějších a také stručně na jejich strukturu a možnosti. Často půjde o shrnutí již známých a několikrát omílaných informací, opakování je ale matkou moudrosti a vzhledem k častým dotazům je to i potřebné.
Zřejmě nejstarším formátem souborů pro PC je AVI. Jde o zkratku Audio/Video Interleave, což lze volně přeložit jako prokládaný zvuk s videem. Použil ho Microsoft již v operačním systému Windows 3.11. Data videa byla původně bez komprese s rozměrem 160x120 bodů při 15 snímcích za vteřinu, protože procesory ještě nebyly tak výkonné, aby zvládly dekompresi v reálném čase. Následně byl tento formát doplněn o vyšší rozlišení včetně volby kodeků pro snížení datového toku. Existují celkem tři typy, zaváděné postupně tak, jak se objevovala různá omezení předchozích verzí. Jedno je ale všem společné. Na začátku souboru je hlavička, která obsahuje informace o videu (framerate, rozlišení, kodek,...) a o zvuku (samplovací frekvence, kvantizace, kodek,...), na konci je pak tabulka, ve které jsou informace o pořadovém čísle jednotlivých snímků videa resp. audio paketu a jejich pozici v souboru. Toto řešení má dvě velké nevýhody. Index na konci souboru neumožňuje přehrát soubor dříve, než je k dispozici celý, tedy není použitelný pro streamování po internetu. Druhá nevýhoda indexace je v tom, že čas snímku není určen absolutně, ale lze ho spočítat pouze z framerate videa a jeho indexu. Problém to dělá v případě, že časová základna videa a zvuku je rozdílná, tedy jedněch dat je více/méně než druhých (než by mělo být). To je typický problém při zachytávání videa a zvuku dvěmi nesynchronními zařízeními, např. TV karty a zvukové karty. Obě zařízení se sice tváří, že mají stejný čas, ten je ale ve skutečnosti malinko rozdílný. Výsledek je ten, že dříve či později dojde k rozsynchronizování. Kontejnery, které nepoužívají index, ale přímo relativní čas pro popis polohy snímku a audio paketu v souboru, tímto netrpí (jsou to vlastně všechny ostatní). Pokud převedete takový soubor na AVI, dojde opět k rozsynchronizování. Podívejme se ještě na zmiňované typy AVI souborů.
    • AVI 1.0 - umožňuje nahrávat pouze do velikosti 1GB, maximální počet snímků je 22500, tedy asi čtvrt hodiny záznamu pro 25sn/s, používal se ve Windows 3.1, již se nepoužívá
    • AVI 1.1 - rozšířeno nahrávání a indexování do velikosti souborů 2GB, některé programy řeší překonání této bariéry pomocí nahrávání do více souborů
    • AVI 2.0 - označuje se také OpenDML, má neomezenou velikost souboru, ale FAT32 omezuje maximální velikost na 4GB, na NTFS je (téměř) neomezeno (velikost disku)
Kde se tedy nejvíce hodí používání AVI? Rozhodně to není pro použití na internetu, ale své přednosti najde hlavně při zachytávání pro následnou editaci, protože je podporován velkým množstvím programů. Nejoblíbenější je DV AVI, což je normální AVI soubor s kompresí DV, používanou u digitálních kamer, kde je zaručena synchronizace obrazu a zvuku. Buď obsahuje pouze jeden stream, který nese video i zvuk (je to přímo ten stream, který se přenáší po Firewire z kamery), pak jde o DV AVI typ 1, nebo AVI obsahuje video a zvuk zvlášť (Firewire stream je při nabírání demultiplexován), pak mluvíme o typu 2. AVI soubor je založen na formátu RIFF (resource interchange file format), začíná vždy hlavičkou, která identifikuje soubor, hlavička začíná čtyřmi písmeny RIFF, velikostí souboru a typem, dále jsou informace o typu obsažených streamů a dále multiplexovaná data. Na konci je již zmíněný index, bez kterého není přehrání možné. Video a audio data jsou multiplexována po snímcích a audio paketech, normálně je to pravidelně například po snímku nebo po určitém čase (doporučená hodnota 500ms), ale obecně to může být jakkoliv, s tím také souvisá nastavení prokládání při zachytávání (Full prokládá po nastaveném čase, None prokládá okamžitě po přijetí dat, tedy není zaručeno pravidelné prokládání, Capture prokládá po nastaveném čase, ale pokud by to narušilo tok dat, tak nemusí prokládání dodržet za každou cenu).


RIFF ('AVI '
LIST ('hdrl'
'avih'()
LIST ('strl'
'strh'()
'strf'()
'strd'()
'strn'()
...
)
.
.
.
)

LIST ('movi'
{SubChunk | LIST ('rec '
SubChunk1
SubChunk2
.
.
.
)
.
.
.
}
.
.
.
)

['idx1']
)
Struktura AVI

Dalším hojně používaným formátem je MPEG stream. Jde o ISO/IEC standard, který definuje způsob multiplexování audio a visuálních streamů (nejen video) do jednoho streamu. Je určen, jak již název říká, především pro MPEG video a zvuk a umožňuje jak lokální uložení souboru na disk, tak streamování po internetu, nebo použití pro terestriální nebo satelitní vysílání nebo i interaktivní obsah. Formát pochází od výrobců spotřební elektroniky a hlavním požadavkem na něj byla především jednoduchost, aby mohl být snadno implementován v komerčních zařízeních. Definováno je několik aplikačních vrstev, které na sebe navazují. Nejnižší vrstvou je Elementary stream (ES), který definuje vytvoření samostatného streamu z jednoho zdroje, ať už video, audio nebo jiného, podle toho existuje několik forem ES:
    • Digital Control Data
    • Digital Audio
    • Digital Video
    • Digital Data (synchronní nebo asynchronní)
Data u videa a zvuku jsou organizována do částí, tzv. access units (AE), u videa ho tvoří jeden enkódovaný snímek. ES je dále převeden na Packetised Elementary Stream (PES), který tvoří posloupnost paketů, v každém je několik AE. Maximální velikost PES paketu je 65536 bytů, obsahuje hlavičku s informacemi o streamu a data (ES stream). Pokud je PES uložen do souboru, používají se přípony .MPV (MPEG video), .M2V (MPEG-2 video), .MPA (MPEG Audio), .MP2 (MPEG Audio Layer 2), .MP3 (MPEG Audio Layer 3). Několik PES streamů je dále multiplexováno do jednoho streamu dvěma možnými metodami. Jednodušší je MPEG Program Stream (PS), který prostě bere PES pakety a skládá je za sebe, čas paketů je synchronizován k jedné časové základně. Tento typ je používán v prostředí, kde je zaručena bezchybovost - u záznamových médií (DVD disky) a při přenosu po internetu (soubory .MPG, .M2P). Druhým způsobem je MPEG Transport Stream (TS), který je určen pro přenos v chybujícím prostředí, jako je DVB. Ten rozděluje PES pakety na menší části fixní velikosti a přenáší je ve svých paketech velikosti 188 bytů, které jsou dále zabezpečeny proti chybám při přenosu. Tento typ přenosu má konstantní datový tok a umožňuje multiplexovat více programů do jednoho streamu, pokud nejsou žádná data k dispozici, vkládají se prázdné pakety. V počítači je samozřejmě nejvíce používaný Program stream, s kterým pracují všechny běžné programy, ať už jde o přímé nahrávání do MPEG, nebo jen export. V poslední době je využíván i k editaci, přestože se k tomu příliš nehodí kvůli přílišné ztrátovosti kodeku.

Druhým formátem od mamutí firmy Microsoft je Advanced Systems Format (ASF), dříve označovaný jako Advanced Streaming Format. Soubory mají příponu samozřejmě .ASF, později přibylo i .WMV a .WMA, což pochází od Windows Media Video/Audio, struktura je ale stejná. Tento formát není určen pro nahrazení AVI, ale je určen především pro použití MPEG-4 a Windows Media Video a Audio formátů. Jeho cílem bylo odstranit hlavní nedostatky formátu AVI a jeho určení je především pro streamování po internetu. Největším nedostatkem je jeho uzavřenost, nelze v podstatě použít jiné kodeky, než Microsoft dovolí, a také není licenční politikou dovoleno pracovat se soubory přímo, ale jen za použití DirectShow filtrů Microsoftu. Struktura ASF v aktuální verzi 1.2 je založena na objektech, objekt je základní složkou, je identifikován pomocí GUID (stejně jako vše v DirectShow, velikost 16 bytů) a existuje v několika vrstvách, jeden objekt tedy může obsahovat jiný. Nejvyšší vrstva obsahuje tři objekty. Jako první objekt je v souboru povinně vždy hlavička - Header Object. Pomocí jejího GUID se identifikuje typ souboru v DirectShow (prvních 16 bytů v souboru je vždy totožných) a dále obsahuje objekty druhé vrstvy, většinou nejsou povinné a jsou to:

    • File Properties Object - základní statistika o souboru jako délka, velikost, datum vytvoření, jedinečné ID souboru atd.
    • Stream Properties Object - je zde povinně pro každý stream v souboru a obsahuje informace typu streamu a formátu
    • Header Extension Object - je zde pro další možné rozšíření specifikace
    • Codec List Object - zobrazitelné informace o kodecích, které jsou použity pro přehrání souboru
    • Script Command Object - seznam příkazů synchronizovaných na určitý čas, obsahuje buď URL adresu nebo soubor
    • Marker Object - jde o časové značky pro rychlý přesun v souboru, obdoba kapitol u DVD
    • Bitrate Mutual Exclusion Object - identifikuje streamy, které jsou vůči sobě vylučující, např. video stopa v určitém čase nemůže být přehrávaná zároveň s jinou, umožňuje uživateli vybrat například video s různým bitrate apod.
    • Error Correction Object - identifikuje metodu korekce chyb
    • Content Description Object - popis obsahu jako autor, titul, copyright, apod., obdoba ID3 tagu u MP3
    • Extended Content Description Object - rozšíření Content Description o další informace
    • Stream Bitrate Properties Object - informace o průměrném bitrate každého streamu
    • Content Branding Object - je možné připojit značku/banner, který se bude zobrazovat při použití souboru, lze i pomocí URL
    • Content Encryption Object - informace o použitém DRM (Microsoft® Digital Rights Manager)
    • Extended Content Encryption Object - možnost chránit soubor pomocí Windows Media Rights Manager 7
    • Digital Signature Object - podpis, který chrání informace v hlavičce
    • Padding Object - umožňuje zvětšit velikost hlavičky o libovolnou velikost, nenese žádná užitečná data
Kompletní seznam je zde kvůli tomu, abychom viděli, co vše ASF podporuje. Dalším objektem je prvního stupně je Data Object, který obsahuje multiplexované streamy ve formě Data Packets. Tyto pakety mají vždy stejnou velikost a obsahují informace pro jeden nebo i více streamů, setříděny jsou podle času, kdy začínají a končí. Následuje index podobně jako u AVI souboru. Je to buď jednoduchý Simple Index Object, který obsahuje indexaci po fixním času podle videa nebo Index Object, který indexuje rovněž podle času, ale i podle čísla snímků (jako v AVI) nebo timecode.


Struktura ASF souboru

Hlavní konkurent Microsfotu, firma Apple má také svůj formát, který konkuruje AVI již od jeho počátku. Jistě tušíte, že jde o Quicktime soubory s příponou .MOV, který se používá na počítačích Apple Macintosh ve stejné míře jako AVI ve Windows. Na svojí dobu byl poměrně sofistikovaný a podobný dnešním moderním kontejnerům, umožňuje nést různé typy informací, například i Flash. Základní jednotkou souboru je atom, který může obsahovat další atomy. Atom začíná vždy velikostí a dále typem, obě mají 32bitů (čtyři byty), pro větší atomy je zde rozšířená velikost 64 bitů hned za typem, pokud je standardní velikost rovna 1, ostatní informace jsou specifické pro různé typy atomů. Pro lepší orientaci v souboru je u novějších souborů zavedena jednotka QT atom, která má složitější strukturu, ale poskytuje informace o vnořených atomech. Jeden soubor je vždy jedním velkým atomem Movie atom, který má identifikaci moov, podle toho je možné soubor poznat i bez přípony. Uvnitř něho je hlavička Movie header s identifikací mvhd, která je vždy také přítomna. Následuje Track atom, což je jedna stopa, každá stopa je nezávislým elementem v souboru, Media atom specifikuje typ streamu (video/audio), jeho délku a specifické informace, Video Media information resp. Sound Media informationpak charakteristiku videa resp. zvuku. Sample Table obsahuje tabulku pro konverzi času na příslušné datové vzorky (chunks) a pak samotná data. Celou strukturu lépe objasní obrázek.


Struktura MOV souboru

Poměrně starým kontejnerem je i Real Media Format (RMF), přípona .RM, .RMF nebo .RV pro video a .RA pro zvuk. Pochází od společnosti Real Networks, která se zabývá především streamováním po internetu, k čemuž je soubor předurčen. Jeho zajímavostí, resp. zajímavostí videa je to, že se může měnit framerate videa v čase, k čemuž je uzpůsoben i formát kontejneru. Opět je využito objektů, pokud přehrávač některé nezná, tak je může bez problémů přeskočit. Na začátku je objekt File header, který obsahuje základní informace o souboru - typ, popis apod. a dále popis streamů - u videa rozlišení, bitrate apod. Součástí je i index, který odkazuje na uložení paketu dat s určitým timecode v souboru. Pak už následuje objekt File sample data, který obsahuje pakety s daty pro dekoder, paket obsahuje nejprve informaci o délce, k jakému streamu patří, timestamp a zda jde o klíčový snímek u videa. Licenční politika firmy nedovoluje využívat formát pro jiné účely než pro přehrávání, navíc pouze vlastním dodávaným přehrávačem, což se bohužel odráží i v klesající popularitě tohoto formátu. Vytvořit soubory RMF je možné v mnoha programech.

S rozvojem nových technologií a především kodeků na bázi MPEG-4 začala poptávka po alternativních multimediálních kontejnerech, které by netrpěly nevýhodou AVI a byly především otevřené pro volné použití. Jako první se pokusil o tento úkol formát Ogg Media (OGM). Jeho název není náhodou podobný audio kodeku Ogg Vorbis, byl totiž vytvořen především kvůli nemožnosti použít tento kodek v AVI. Struktura OGM je velmi vstřícná video i audio kodekům a umožňuje multiplexovat i jakýkoliv jiný stream, například i obrázky nebo text (titulky). Nenašel ale přílišného rozšíření, pro DirectShow existuje demultiplexer i multiplexer, ale jsou v nich chyby (multiplexer například nedokáže správně multiplexovat nesynchronní streamy při zachytávání). Existuje také velmi malá podpora pro tvorbu a úpravu, v podstatě je to pouze VirtualDubMod. Autorem je Tobias Waldvogel, který se už ale vývoji nevěnuje a nelze očekávat další rozšiřování.

O svou přízeň se uchází i další otevřený formát Matroška (ruský název není náhodný). Vychází z dnes hojně používaného jazyka XML, resp. jeho binární verze Extensible Binary Meta Language (EBML) Jako takový umožňuje nést téměř cokoliv, ne jen video a zvuk. Obsahuje podporu pro titulky, menu, kapitoly, tituly, lze přiložit i soubory. Podívejme se stručně na strukturu souboru. Na začátku je hlavička, která identifikuje typ EBML souboru a verzi, následuje segment(y), který tvoří datovou funkční část, typicky je jen jeden, ale může jich být i více. Segment se dále dělí na menší části (sekce), každá obsahuje jiný typ informace. Metaseek udává pozici těchto sekcí uvnitř segmentu. Segment Information obsahuje základní informace o souboru jako název titulu, dále unikátní ID a pokud je součástí více souborů, tak i ID dalšího souboru. Sekce Tracks je seznam stop, tedy video, audio, titulky a také informace o nich, Chapters pak seznam kapitol a jejich umístění. V sekci Clustersjsou již samotná data - video snímky, zvukové pakety atd. Jejich pozice je vždy jako čas, což zabraňuje rozsynchronizování všech stop. Pro urychlení hledání pozice v souboru je zde ještě sekce Cueing Data, která slouží podobně jako index u AVI souboru, není však nezbytná, pouze urychluje vyhledávání. Do sekce Attachment lze přiložit jakýkoliv soubor. Poslední sekcí je Tagging, která nese související informace k titulu nebo jednotlivým stopám jako autor, účinkující a podobně, je to obdoba ID3 tagu u MP3. Bez jakýchkoliv pochybností lze říci, že jde o nejpropracovanější systém, který je možno přidáváním sekcí dále rozvíjet. Bohužel opět chybí širší podpora tohoto formátu, především pro editaci, vytvářet soubory lze například ve VirtualDubMod, zachytávat v ATV2000, přehrávat lze jakoukoliv DirectShow aplikací po nainstalování příslušných filtrů. Podle obsahu se používá i rozdílná přípona, u video souborů je to .MKV, u zvukových .MKA a u samotných titulků .MKS.



Level 0
Grouping
Level 1
Level 2Level 3

EBML
Header
EBMLVersion
Ikona Odkaz na databáziIkona Odkaz na databázi
DocType
Ikona Odkaz na databáziIkona Odkaz na databázi

Segment
Meta Seek Information
SeekHead
Seek
SeekID
SeekPosition
Seek
SeekID
SeekPosition
Segment Information
Info
TitleIkona Odkaz na databázi
SegmentUIDIkona Odkaz na databázi
Track
Tracks
TrackEntry
Name
TrackNumber
TrackType
TrackEntry
Name
TrackNumber
TrackType
Chapters
Chapters
Edition EntryIkona Odkaz na databázi
Clusters
Cluster
TimecodeIkona Odkaz na databázi
BlockGroupBlock
BlockGroup
Block
ReferenceBlock
BlockGroupBlock
Cluster
TimecodeIkona Odkaz na databázi
BlockGroupBlock
BlockGroupBlock
BlockGroupBlock
BlockGroup
Block
BlockDuration
Cueing Data
Cues
CuePoint
CueTime
CuePosition
CuePoint
CueTime
CuePosition
Attachment
Attachments
AttachedFile
FileName
FileData
AttachedFile
FileName
FileData
Tagging
Tags
Tag
MultiTitle
Language
Tag
MultiTitle
Language
Struktura Matrošky

Dalším kontejnerem, se kterým se můžete setkat, je MP4. Ten byl vytvořen jako otevřený formát pro různá zařízení spotřební elektroniky, velkou měrou se na jeho vytvoření podílel Apple a jeho struktura je založena právě na Quicktime MOV, proto se jím nebudeme podrobněji zabývat, zjednodušeně lze říci, že došlo ke zjednodušení modelu. Stejná situace je i se soubory 3GP a 3GP2, které jsou určeny pro mobilní zařízení.

Jak je vidět, struktura všech kontejnerů je velice podobná. Některé mají jednodušší strukturu, jiné složitější, ale základní principy zůstávají stejné. Liší se názvy jednotlivých částí souborů, jejich identifikace a uložení, ale podobnost je zřetelná. Mezi moderní kontejnery lze zařadit ASF, MOV a Matrošku, jejichž specifikace není uzavřená a lze nadále rozvíjet, především posledně jmenovaný má výhodu v použití universálního EBML, jehož výhodou je také malá velikost přidaných dat, potřebných pro zachování struktury. Nelze také jednoznačně říci, který kontejner je vhodnější, každý má své místo na světě a každý se hodí a používá v jiných situacích. AVI je formátem pro editaci ve Windows, MOV pak na počítačích Apple. Ostatní formáty jsou pak většinou vytvořeny pro uložení finálního videa, který se již nebude dále upravovat a tak je třeba k nim také přistupovat.