Matroska est un format de conteneur pour
du contenu multimédia (son, image, sous-titres, etc). Ce n'est pas
un format de données (format utilisé par un codec), mais un moyen
de regrouper de manière structurée des données différentes.
Je vous préviens tout de suite, le RFC fait 167 pages, et, en prime, le
multimédia n'est pas ma spécialité. Donc, je vais faire
court. Matroska est fondé sur un langage qui
utilise le modèle de données XML, EBML (normalisé
dans le RFC 8794). Notre nouveau RFC 9559 est donc surtout une très
longue liste des éléments XML qu'on peut y trouver (Matroska
est riche !), encodés en binaire. Matroska n'est pas nouveau (il en
est à la version 4), mais c'est sa première normalisation. Notez que
vous trouverez de l'information sur la page Web du projet.
Le caractère hiérarchique d'un fichier Matroska (des éléments
dans d'autres éléments) est bien rendu par cet outil (qui fait
partie de MKVToolNix, cité plus loin) :
% mkvinfo ./format/matroska/testdata/sweep-with-DC.mkvmerge13.mka
+ EBML head
|+ EBML version: 1
|+ EBML read version: 1
|+ Maximum EBML ID length: 4
|+ Maximum EBML size length: 8
|+ Document type: matroska
|+ Document type version: 4
|+ Document type read version: 2
+ Segment: size 18507
|+ Seek head (subentries will be skipped)
|+ EBML void: size 4031
|+ Segment information
| + Timestamp scale: 22674
| + Multiplexing application: libebml v1.4.2 + libmatroska v1.6.2
| + Writing application: mkvmerge v52.0.0 ('Secret For The Mad') 64-bit
| + Duration: 00:00:02.607714066
| + Date: 2022-08-28 18:32:21 UTC
| + Segment UID: 0x3b 0x9f 0x28 0xc7 0xc4 0x90 0x8a 0xe0 0xcd 0x66 0x8f 0x11 0x8f 0x7c 0x2f 0x54
|+ Tracks
| + Track
| + Track number: 1 (track ID for mkvmerge & mkvextract: 0)
| + Track UID: 3794791294650729286
| + Track type: audio
| + Codec ID: A_FLAC
| + Codec's private data: size 133
| + Default duration: 00:00:00.040634920 (24.609 frames/fields per second for a video track)
| + Language: und
| + Language (IETF BCP 47): und
| + Audio track
| + Sampling frequency: 44100
| + Bit depth: 16
|+ EBML void: size 1063
|+ Cluster
On voit un document de la version 4 (celle du RFC), commençant
(forcément, cf. section 4.5 du RFC) par un en-tête EBML, et
comportant une seule piste (l'élément
Tracks
est décrit en section 5.1.4), un son au
format FLAC
(RFC bientôt publié). L'extension
.mka
est souvent utilisée pour des conteneurs
n'ayant que de l'audio (et
.mkv
s'il y a de la
vidéo). La piste audio est dans une langue indéterminée,
und. Plusieurs éléments existent pour noter la
langue car Matroska n'utilisait autrefois que la norme
ISO 639 mais la version 4 recommande les bien
plus riches étiquettes de langue IETF (RFC 5646, alias « IETF BCP 47 »).
Un autre document a deux pistes, le son et l'image :
% mkvinfo ~/Videos/2022-01-22\ 13-17-28.mkv
…
|+ Tracks
| + Track
| + Track number: 1 (track ID for mkvmerge & mkvextract: 0)
| + Track UID: 1
| + "Lacing" flag: 0
| + Language: und
| + Codec ID: V_MPEG4/ISO/AVC
| + Track type: video
| + Default duration: 00:00:00.033333333 (30.000 frames/fields per second for a video track)
| + Video track
| + Pixel width: 852
| + Pixel height: 480
| + Display unit: 4
| + Codec's private data: size 41 (H.264 profile: High @L3.1)
| + Track
| + Track number: 2 (track ID for mkvmerge & mkvextract: 1)
| + Track UID: 2
| + "Lacing" flag: 0
| + Name: simple_aac_recording
| + Language: und
| + Codec ID: A_AAC
| + Track type: audio
| + Audio track
| + Channels: 2
| + Sampling frequency: 44100
| + Bit depth: 16
| + Codec's private data: size 5
L'arborescence des fichiers Matroska peut être très profonde et ça
se reflète dans la numérotation des sections du RFC (il y a une
section 5.1.4.1.28.18 !).
Les types MIME à utiliser sont audio/matroska
et video/matroska
(section 27.3 du RFC).
Il existe plusieurs mises en œuvre de Matroska en logiciel libre comme MKVToolNix, qui sait faire
beaucoup de choses (comme afficher les éléments Matroska comme vu
plus haut) et qui existe en ligne de commande
ou GUI. Et
VLC sait
évidemment jouer les fichiers Matroska. OBS,
quant à lui, permet d'en produire. Par exemple, cette vidéo sans intérêt a
été faite avec OBS.