draft-ietf-cellar-codec-02.txt   draft-ietf-cellar-codec-03.txt 
cellar S. Lhomme cellar S. Lhomme
Internet-Draft Internet-Draft
Intended status: Standards Track M. Bunkus Intended status: Informational M. Bunkus
Expires: January 23, 2020 Expires: 29 April 2020
D. Rice D. Rice
July 22, 2019 27 October 2019
Matroska Codec Matroska Codec
draft-ietf-cellar-codec-02 draft-ietf-cellar-codec-03
Abstract Abstract
This document defines the Matroska codec mappings, including the This document defines the Matroska codec mappings, including the
codec ID, layout of data in a "Block Element" and in an optional codec ID, layout of data in a "Block Element" and in an optional
"CodecPrivate Element". "CodecPrivate Element".
Status of This Memo Status of This Memo
This Internet-Draft is submitted in full conformance with the This Internet-Draft is submitted in full conformance with the
skipping to change at page 1, line 34 skipping to change at page 1, line 34
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet- working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/. Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
This Internet-Draft will expire on January 23, 2020. This Internet-Draft will expire on 29 April 2020.
Copyright Notice Copyright Notice
Copyright (c) 2019 IETF Trust and the persons identified as the Copyright (c) 2019 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents (https://trustee.ietf.org/
(https://trustee.ietf.org/license-info) in effect on the date of license-info) in effect on the date of publication of this document.
publication of this document. Please review these documents Please review these documents carefully, as they describe your rights
carefully, as they describe your rights and restrictions with respect and restrictions with respect to this document. Code Components
to this document. Code Components extracted from this document must extracted from this document must include Simplified BSD License text
include Simplified BSD License text as described in Section 4.e of as described in Section 4.e of the Trust Legal Provisions and are
the Trust Legal Provisions and are provided without warranty as provided without warranty as described in the Simplified BSD License.
described in the Simplified BSD License.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4
2. Status of this document . . . . . . . . . . . . . . . . . . . 4 2. Status of this document . . . . . . . . . . . . . . . . . . . 4
3. Security Considerations . . . . . . . . . . . . . . . . . . . 5 3. Security Considerations . . . . . . . . . . . . . . . . . . . 4
4. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 5 4. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 4
5. Notations and Conventions . . . . . . . . . . . . . . . . . . 5 5. Notations and Conventions . . . . . . . . . . . . . . . . . . 5
6. Codec Mappings . . . . . . . . . . . . . . . . . . . . . . . 5 6. Codec Mappings . . . . . . . . . . . . . . . . . . . . . . . 5
6.1. Defining Matroska Codec Support . . . . . . . . . . . . . 5 6.1. Defining Matroska Codec Support . . . . . . . . . . . . . 5
6.1.1. Codec ID . . . . . . . . . . . . . . . . . . . . . . 5 6.1.1. Codec ID . . . . . . . . . . . . . . . . . . . . . . 5
6.1.2. Codec Name . . . . . . . . . . . . . . . . . . . . . 6 6.1.2. Codec Name . . . . . . . . . . . . . . . . . . . . . 6
6.1.3. Description . . . . . . . . . . . . . . . . . . . . . 6 6.1.3. Description . . . . . . . . . . . . . . . . . . . . . 7
6.1.4. Initialization . . . . . . . . . . . . . . . . . . . 6 6.1.4. Initialization . . . . . . . . . . . . . . . . . . . 7
6.1.5. Citation . . . . . . . . . . . . . . . . . . . . . . 7 6.1.5. Codec BlockAdditions . . . . . . . . . . . . . . . . 7
6.1.6. Deprecation Date . . . . . . . . . . . . . . . . . . 7 6.1.6. Citation . . . . . . . . . . . . . . . . . . . . . . 8
6.1.7. Superseded By . . . . . . . . . . . . . . . . . . . . 7 6.1.7. Deprecation Date . . . . . . . . . . . . . . . . . . 8
6.2. Recommendations for the Creation of New Codec Mappings . 7 6.1.8. Superseded By . . . . . . . . . . . . . . . . . . . . 8
6.2. Recommendations for the Creation of New Codec
Mappings . . . . . . . . . . . . . . . . . . . . . . . . 8
6.3. Video Codec Mappings . . . . . . . . . . . . . . . . . . 8 6.3. Video Codec Mappings . . . . . . . . . . . . . . . . . . 8
6.3.1. V_MS/VFW/FOURCC . . . . . . . . . . . . . . . . . . . 8 6.3.1. V_MS/VFW/FOURCC . . . . . . . . . . . . . . . . . . . 9
6.3.2. V_UNCOMPRESSED . . . . . . . . . . . . . . . . . . . 8 6.3.2. V_UNCOMPRESSED . . . . . . . . . . . . . . . . . . . 9
6.3.3. V_MPEG4/ISO/SP . . . . . . . . . . . . . . . . . . . 8 6.3.3. V_MPEG4/ISO/SP . . . . . . . . . . . . . . . . . . . 9
6.3.4. V_MPEG4/ISO/ASP . . . . . . . . . . . . . . . . . . . 9 6.3.4. V_MPEG4/ISO/ASP . . . . . . . . . . . . . . . . . . . 10
6.3.5. V_MPEG4/ISO/AP . . . . . . . . . . . . . . . . . . . 9 6.3.5. V_MPEG4/ISO/AP . . . . . . . . . . . . . . . . . . . 10
6.3.6. V_MPEG4/MS/V3 . . . . . . . . . . . . . . . . . . . . 9 6.3.6. V_MPEG4/MS/V3 . . . . . . . . . . . . . . . . . . . . 10
6.3.7. V_MPEG1 . . . . . . . . . . . . . . . . . . . . . . . 9 6.3.7. V_MPEG1 . . . . . . . . . . . . . . . . . . . . . . . 10
6.3.8. V_MPEG2 . . . . . . . . . . . . . . . . . . . . . . . 10 6.3.8. V_MPEG2 . . . . . . . . . . . . . . . . . . . . . . . 11
6.3.9. V_REAL/RV10 . . . . . . . . . . . . . . . . . . . . . 10 6.3.9. V_REAL/RV10 . . . . . . . . . . . . . . . . . . . . . 11
6.3.10. V_REAL/RV20 . . . . . . . . . . . . . . . . . . . . . 10 6.3.10. V_REAL/RV20 . . . . . . . . . . . . . . . . . . . . . 11
6.3.11. V_REAL/RV30 . . . . . . . . . . . . . . . . . . . . . 11 6.3.11. V_REAL/RV30 . . . . . . . . . . . . . . . . . . . . . 12
6.3.12. V_REAL/RV40 . . . . . . . . . . . . . . . . . . . . . 11 6.3.12. V_REAL/RV40 . . . . . . . . . . . . . . . . . . . . . 12
6.3.13. V_QUICKTIME . . . . . . . . . . . . . . . . . . . . . 11 6.3.13. V_QUICKTIME . . . . . . . . . . . . . . . . . . . . . 12
6.3.14. V_THEORA . . . . . . . . . . . . . . . . . . . . . . 11 6.3.14. V_THEORA . . . . . . . . . . . . . . . . . . . . . . 13
6.3.15. V_PRORES . . . . . . . . . . . . . . . . . . . . . . 12 6.3.15. V_PRORES . . . . . . . . . . . . . . . . . . . . . . 13
6.3.16. V_VP8 . . . . . . . . . . . . . . . . . . . . . . . . 12 6.3.16. V_VP8 . . . . . . . . . . . . . . . . . . . . . . . . 14
6.3.17. V_VP9 . . . . . . . . . . . . . . . . . . . . . . . . 13 6.3.17. V_VP9 . . . . . . . . . . . . . . . . . . . . . . . . 14
6.3.18. V_FFV1 . . . . . . . . . . . . . . . . . . . . . . . 13 6.3.18. V_FFV1 . . . . . . . . . . . . . . . . . . . . . . . 14
6.4. Audio Codec Mappings . . . . . . . . . . . . . . . . . . 13 6.4. Audio Codec Mappings . . . . . . . . . . . . . . . . . . 15
6.4.1. A_MPEG/L3 . . . . . . . . . . . . . . . . . . . . . . 13 6.4.1. A_MPEG/L3 . . . . . . . . . . . . . . . . . . . . . . 15
6.4.2. A_MPEG/L2 . . . . . . . . . . . . . . . . . . . . . . 14 6.4.2. A_MPEG/L2 . . . . . . . . . . . . . . . . . . . . . . 15
6.4.3. A_MPEG/L1 . . . . . . . . . . . . . . . . . . . . . . 14 6.4.3. A_MPEG/L1 . . . . . . . . . . . . . . . . . . . . . . 15
6.4.4. A_PCM/INT/BIG . . . . . . . . . . . . . . . . . . . . 14 6.4.4. A_PCM/INT/BIG . . . . . . . . . . . . . . . . . . . . 16
6.4.5. A_PCM/INT/LIT . . . . . . . . . . . . . . . . . . . . 14 6.4.5. A_PCM/INT/LIT . . . . . . . . . . . . . . . . . . . . 16
6.4.6. A_PCM/FLOAT/IEEE . . . . . . . . . . . . . . . . . . 15 6.4.6. A_PCM/FLOAT/IEEE . . . . . . . . . . . . . . . . . . 16
6.4.7. A_MPC . . . . . . . . . . . . . . . . . . . . . . . . 15 6.4.7. A_MPC . . . . . . . . . . . . . . . . . . . . . . . . 16
6.4.8. A_AC3 . . . . . . . . . . . . . . . . . . . . . . . . 15 6.4.8. A_AC3 . . . . . . . . . . . . . . . . . . . . . . . . 17
6.4.9. A_AC3/BSID9 . . . . . . . . . . . . . . . . . . . . . 15 6.4.9. A_AC3/BSID9 . . . . . . . . . . . . . . . . . . . . . 17
6.4.10. A_AC3/BSID10 . . . . . . . . . . . . . . . . . . . . 16 6.4.10. A_AC3/BSID10 . . . . . . . . . . . . . . . . . . . . 17
6.4.11. A_ALAC . . . . . . . . . . . . . . . . . . . . . . . 16 6.4.11. A_ALAC . . . . . . . . . . . . . . . . . . . . . . . 18
6.4.12. A_DTS . . . . . . . . . . . . . . . . . . . . . . . . 16 6.4.12. A_DTS . . . . . . . . . . . . . . . . . . . . . . . . 18
6.4.13. A_DTS/EXPRESS . . . . . . . . . . . . . . . . . . . . 17 6.4.13. A_DTS/EXPRESS . . . . . . . . . . . . . . . . . . . . 18
6.4.14. A_DTS/LOSSLESS . . . . . . . . . . . . . . . . . . . 17 6.4.14. A_DTS/LOSSLESS . . . . . . . . . . . . . . . . . . . 18
6.4.15. A_VORBIS . . . . . . . . . . . . . . . . . . . . . . 17 6.4.15. A_VORBIS . . . . . . . . . . . . . . . . . . . . . . 19
6.4.16. A_FLAC . . . . . . . . . . . . . . . . . . . . . . . 17 6.4.16. A_FLAC . . . . . . . . . . . . . . . . . . . . . . . 19
6.4.17. A_REAL/14_4 . . . . . . . . . . . . . . . . . . . . . 18 6.4.17. AREAL/144 . . . . . . . . . . . . . . . . . . . . . . 19
6.4.18. A_REAL/28_8 . . . . . . . . . . . . . . . . . . . . . 18 6.4.18. AREAL/288 . . . . . . . . . . . . . . . . . . . . . . 19
6.4.19. A_REAL/COOK . . . . . . . . . . . . . . . . . . . . . 18 6.4.19. A_REAL/COOK . . . . . . . . . . . . . . . . . . . . . 20
6.4.20. A_REAL/SIPR . . . . . . . . . . . . . . . . . . . . . 18 6.4.20. A_REAL/SIPR . . . . . . . . . . . . . . . . . . . . . 20
6.4.21. A_REAL/RALF . . . . . . . . . . . . . . . . . . . . . 19 6.4.21. A_REAL/RALF . . . . . . . . . . . . . . . . . . . . . 20
6.4.22. A_REAL/ATRC . . . . . . . . . . . . . . . . . . . . . 19 6.4.22. A_REAL/ATRC . . . . . . . . . . . . . . . . . . . . . 21
6.4.23. A_MS/ACM . . . . . . . . . . . . . . . . . . . . . . 19 6.4.23. A_MS/ACM . . . . . . . . . . . . . . . . . . . . . . 21
6.4.24. A_AAC/MPEG2/MAIN . . . . . . . . . . . . . . . . . . 19 6.4.24. A_AAC/MPEG2/MAIN . . . . . . . . . . . . . . . . . . 21
6.4.25. A_AAC/MPEG2/LC . . . . . . . . . . . . . . . . . . . 20 6.4.25. A_AAC/MPEG2/LC . . . . . . . . . . . . . . . . . . . 21
6.4.26. A_AAC/MPEG2/LC/SBR . . . . . . . . . . . . . . . . . 20 6.4.26. A_AAC/MPEG2/LC/SBR . . . . . . . . . . . . . . . . . 22
6.4.27. A_AAC/MPEG2/SSR . . . . . . . . . . . . . . . . . . . 20 6.4.27. A_AAC/MPEG2/SSR . . . . . . . . . . . . . . . . . . . 22
6.4.28. A_AAC/MPEG4/MAIN . . . . . . . . . . . . . . . . . . 20 6.4.28. A_AAC/MPEG4/MAIN . . . . . . . . . . . . . . . . . . 22
6.4.29. A_AAC/MPEG4/LC . . . . . . . . . . . . . . . . . . . 21 6.4.29. A_AAC/MPEG4/LC . . . . . . . . . . . . . . . . . . . 23
6.4.30. A_AAC/MPEG4/LC/SBR . . . . . . . . . . . . . . . . . 21 6.4.30. A_AAC/MPEG4/LC/SBR . . . . . . . . . . . . . . . . . 23
6.4.31. A_AAC/MPEG4/SSR . . . . . . . . . . . . . . . . . . . 21 6.4.31. A_AAC/MPEG4/SSR . . . . . . . . . . . . . . . . . . . 23
6.4.32. A_AAC/MPEG4/LTP . . . . . . . . . . . . . . . . . . . 22 6.4.32. A_AAC/MPEG4/LTP . . . . . . . . . . . . . . . . . . . 23
6.4.33. A_QUICKTIME . . . . . . . . . . . . . . . . . . . . . 22 6.4.33. A_QUICKTIME . . . . . . . . . . . . . . . . . . . . . 24
6.4.34. A_QUICKTIME/QDMC . . . . . . . . . . . . . . . . . . 22 6.4.34. A_QUICKTIME/QDMC . . . . . . . . . . . . . . . . . . 24
6.4.35. A_QUICKTIME/QDM2 . . . . . . . . . . . . . . . . . . 23 6.4.35. A_QUICKTIME/QDM2 . . . . . . . . . . . . . . . . . . 24
6.4.36. A_TTA1 . . . . . . . . . . . . . . . . . . . . . . . 23 6.4.36. A_TTA1 . . . . . . . . . . . . . . . . . . . . . . . 25
6.4.37. A_WAVPACK4 . . . . . . . . . . . . . . . . . . . . . 23 6.4.37. A_WAVPACK4 . . . . . . . . . . . . . . . . . . . . . 25
6.5. Subtitle Codec Mappings . . . . . . . . . . . . . . . . . 23 6.5. Subtitle Codec Mappings . . . . . . . . . . . . . . . . . 26
6.5.1. S_TEXT/UTF8 . . . . . . . . . . . . . . . . . . . . . 24 6.5.1. S_TEXT/UTF8 . . . . . . . . . . . . . . . . . . . . . 26
6.5.2. S_TEXT/SSA . . . . . . . . . . . . . . . . . . . . . 24 6.5.2. S_TEXT/SSA . . . . . . . . . . . . . . . . . . . . . 26
6.5.3. S_TEXT/ASS . . . . . . . . . . . . . . . . . . . . . 24 6.5.3. S_TEXT/ASS . . . . . . . . . . . . . . . . . . . . . 26
6.5.4. S_TEXT/USF . . . . . . . . . . . . . . . . . . . . . 24 6.5.4. S_TEXT/USF . . . . . . . . . . . . . . . . . . . . . 26
6.5.5. S_TEXT/WEBVTT . . . . . . . . . . . . . . . . . . . . 24 6.5.5. S_TEXT/WEBVTT . . . . . . . . . . . . . . . . . . . . 26
6.5.6. S_IMAGE/BMP . . . . . . . . . . . . . . . . . . . . . 25 6.5.6. S_IMAGE/BMP . . . . . . . . . . . . . . . . . . . . . 27
6.5.7. S_DVBSUB . . . . . . . . . . . . . . . . . . . . . . 25 6.5.7. S_DVBSUB . . . . . . . . . . . . . . . . . . . . . . 27
6.5.8. S_VOBSUB . . . . . . . . . . . . . . . . . . . . . . 25 6.5.8. S_VOBSUB . . . . . . . . . . . . . . . . . . . . . . 27
6.5.9. S_HDMV/PGS . . . . . . . . . . . . . . . . . . . . . 26 6.5.9. S_HDMV/PGS . . . . . . . . . . . . . . . . . . . . . 28
6.5.10. S_HDMV/TEXTST . . . . . . . . . . . . . . . . . . . . 26 6.5.10. S_HDMV/TEXTST . . . . . . . . . . . . . . . . . . . . 28
6.5.11. S_KATE . . . . . . . . . . . . . . . . . . . . . . . 26 6.5.11. S_KATE . . . . . . . . . . . . . . . . . . . . . . . 28
6.6. Button Codec Mappings . . . . . . . . . . . . . . . . . . 26 6.6. Button Codec Mappings . . . . . . . . . . . . . . . . . . 28
6.6.1. B_VOBBTN . . . . . . . . . . . . . . . . . . . . . . 26 6.6.1. B_VOBBTN . . . . . . . . . . . . . . . . . . . . . . 28
7. Subtitles . . . . . . . . . . . . . . . . . . . . . . . . . . 26 7. Subtitles . . . . . . . . . . . . . . . . . . . . . . . . . . 29
7.1. Images Subtitles . . . . . . . . . . . . . . . . . . . . 27 7.1. Images Subtitles . . . . . . . . . . . . . . . . . . . . 29
7.2. SRT Subtitles . . . . . . . . . . . . . . . . . . . . . . 30 7.2. SRT Subtitles . . . . . . . . . . . . . . . . . . . . . . 32
7.3. SSA/ASS Subtitles . . . . . . . . . . . . . . . . . . . . 31 7.3. SSA/ASS Subtitles . . . . . . . . . . . . . . . . . . . . 33
7.4. USF Subtitles . . . . . . . . . . . . . . . . . . . . . . 34 7.4. USF Subtitles . . . . . . . . . . . . . . . . . . . . . . 37
7.5. WebVTT . . . . . . . . . . . . . . . . . . . . . . . . . 34 7.5. WebVTT . . . . . . . . . . . . . . . . . . . . . . . . . 37
7.5.1. Storage of WebVTT in Matroska . . . . . . . . . . . . 35 7.5.1. Storage of WebVTT in Matroska . . . . . . . . . . . . 37
7.5.1.1. CodecID: codec identification . . . . . . . . . . 35 7.5.2. Examples of transformation . . . . . . . . . . . . . 38
7.5.1.2. CodecPrivate: storage of global WebVTT blocks . . 35 7.5.3. Storage of WebVTT in Matroska vs. WebM . . . . . . . 41
7.5.1.3. Storage of non-global WebVTT blocks . . . . . . . 35 7.6. HDMV presentation graphics subtitles . . . . . . . . . . 42
7.5.1.4. Storage of Cues in Matroska blocks . . . . . . . 35 7.6.1. Storage of HDMV presentation graphics
7.5.1.5. BlockAdditions: storing non-global WebVTT blocks, subtitles . . . . . . . . . . . . . . . . . . . . . . 42
Cue Settings Lists and Cue identifiers . . . . . 35 7.7. HDMV text subtitles . . . . . . . . . . . . . . . . . . . 42
7.5.2. Examples of transformation . . . . . . . . . . . . . 36 7.7.1. Storage of HDMV text subtitles . . . . . . . . . . . 42
7.5.2.1. Example WebVTT file . . . . . . . . . . . . . . . 36 7.8. Digital Video Broadcasting (DVB) subtitles . . . . . . . 43
7.5.2.2. Example of CodecPrivate . . . . . . . . . . . . . 38 7.8.1. Storage of DVB subtitles . . . . . . . . . . . . . . 44
7.5.2.3. Storage of Cue 1 . . . . . . . . . . . . . . . . 38 8. Block Additional Mapping . . . . . . . . . . . . . . . . . . 44
7.5.2.4. Storage of Cue 2 . . . . . . . . . . . . . . . . 39 9. Normative References . . . . . . . . . . . . . . . . . . . . 45
7.5.2.5. Storage of Cue 3 . . . . . . . . . . . . . . . . 39
7.5.2.6. Storage of Cue 4 . . . . . . . . . . . . . . . . 39
7.5.3. Storage of WebVTT in Matroska vs. WebM . . . . . . . 39
7.6. HDMV presentation graphics subtitles . . . . . . . . . . 40
7.6.1. Storage of HDMV presentation graphics subtitles . . . 40
7.6.1.1. Storage of HDMV PGS Segments in Matroska Blocks . 40
7.7. HDMV text subtitles . . . . . . . . . . . . . . . . . . . 40
7.7.1. Storage of HDMV text subtitles . . . . . . . . . . . 40
7.7.1.1. Storage of HDMV TextST Dialog Presentation
Segments in Matroska Blocks . . . . . . . . . . . 41
7.7.1.2. Character set . . . . . . . . . . . . . . . . . . 41
7.8. Digital Video Broadcasting (DVB) subtitles . . . . . . . 41
7.8.1. Storage of DVB subtitles . . . . . . . . . . . . . . 42
7.8.1.1. CodecID . . . . . . . . . . . . . . . . . . . . . 42
7.8.1.2. CodecPrivate . . . . . . . . . . . . . . . . . . 42
7.8.1.3. Storage of DVB subtitles in Matroska Blocks . . . 42
8. References . . . . . . . . . . . . . . . . . . . . . . . . . 42
8.1. Normative References . . . . . . . . . . . . . . . . . . 42
8.2. URIs . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 45 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 45
1. Introduction 1. Introduction
Matroska aims to become THE standard of multimedia container formats. Matroska aims to become THE standard of multimedia container formats.
It stores interleaved and timestamped audio/video/subtitle data using It stores interleaved and timestamped audio/video/subtitle data using
various codecs. To interpret the codec data, a mapping between the various codecs. To interpret the codec data, a mapping between the
way the data is stored in Matroska and how it is understood by such a way the data is stored in Matroska and how it is understood by such a
codec is necessary. codec is necessary.
This document intends to define this mapping for many commonly used This document intends to define this mapping for many commonly used
codecs in Matroska. codecs in Matroska.
2. Status of this document 2. Status of this document
This document is a work-in-progress specification defining the This document is a work-in-progress specification defining the
Matroska file format as part of the IETF Cellar working group [1]. Matroska file format as part of the IETF Cellar working group
It uses basic elements and concept already defined in the Matroska (https://datatracker.ietf.org/wg/cellar/charter/). It uses basic
specifications defined by this workgroup. elements and concept already defined in the Matroska specifications
defined by this workgroup.
3. Security Considerations 3. Security Considerations
This document inherits security considerations from the EBML and This document inherits security considerations from the EBML and
Matroska documents. Matroska documents.
4. IANA Considerations 4. IANA Considerations
To be determined. To be determined.
5. Notations and Conventions 5. Notations and Conventions
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
document are to be interpreted as described in RFC 2119 [2]. "OPTIONAL" in this document are to be interpreted as described in BCP
14 [RFC2119] [RFC8174] when, and only when, they appear in all
capitals, as shown here.
6. Codec Mappings 6. Codec Mappings
A "Codec Mapping" is a set of attributes to identify, name, and A "Codec Mapping" is a set of attributes to identify, name, and
contextualize the format and characteristics of encoded data that can contextualize the format and characteristics of encoded data that can
be contained within Matroska Clusters. be contained within Matroska Clusters.
Each TrackEntry used within Matroska MUST reference a defined "Codec Each TrackEntry used within Matroska MUST reference a defined "Codec
Mapping" using the "Codec ID" to identify and describe the format of Mapping" using the "Codec ID" to identify and describe the format of
the encoded data in its associated Clusters. This "Codec ID" is a the encoded data in its associated Clusters. This "Codec ID" is a
skipping to change at page 6, line 7 skipping to change at page 6, line 7
Each codec supported for storage in Matroska MUST have a unique Each codec supported for storage in Matroska MUST have a unique
"Codec ID". Each "Codec ID" MUST be prefixed with the string from "Codec ID". Each "Codec ID" MUST be prefixed with the string from
the following table according to the associated type of the codec. the following table according to the associated type of the codec.
All characters of a "Codec ID Prefix" MUST be capital letters (A-Z) All characters of a "Codec ID Prefix" MUST be capital letters (A-Z)
except for the last character of a "Codec ID Prefix" which MUST be an except for the last character of a "Codec ID Prefix" which MUST be an
underscore ("_"). underscore ("_").
+------------+-----------------+ +------------+-----------------+
| Codec Type | Codec ID Prefix | | Codec Type | Codec ID Prefix |
+============+=================+
| Video | "V_" |
+------------+-----------------+ +------------+-----------------+
| Video | "V_" | | Audio | "A_" |
| Audio | "A_" | +------------+-----------------+
| Subtitle | "S_" | | Subtitle | "S_" |
| Button | "B_" | +------------+-----------------+
| Button | "B_" |
+------------+-----------------+ +------------+-----------------+
Table 1
Each "Codec ID" MUST include a "Major Codec ID" immediately following Each "Codec ID" MUST include a "Major Codec ID" immediately following
the "Codec ID Prefix". A "Major Codec ID" MAY be followed by an the "Codec ID Prefix". A "Major Codec ID" MAY be followed by an
OPTIONAL "Codec ID Suffix" to communicate a refinement of the "Major OPTIONAL "Codec ID Suffix" to communicate a refinement of the "Major
Codec ID". If a "Codec ID Suffix" is used, then the "Codec ID" MUST Codec ID". If a "Codec ID Suffix" is used, then the "Codec ID" MUST
include a forward slash ("/") as a separator between the "Major Codec include a forward slash ("/") as a separator between the "Major Codec
ID" and the "Codec ID Suffix". The "Major Codec ID" MUST be composed ID" and the "Codec ID Suffix". The "Major Codec ID" MUST be composed
of only capital letters (A-Z) and numbers (0-9). The "Codec ID of only capital letters (A-Z) and numbers (0-9). The "Codec ID
Suffix" MUST be composed of only capital letters (A-Z), numbers Suffix" MUST be composed of only capital letters (A-Z), numbers
(0-9), underscore ("_"), and forward slash ("/"). (0-9), underscore ("_"), and forward slash ("/").
The following table provides examples of valid "Codec IDs" and their The following table provides examples of valid "Codec IDs" and their
components: components:
+---------+---------+-----------+--------------+--------------------+ +----------+----------+-----------+-----------+-----------------+
| Codec | Major | Separator | Codec ID | Codec ID | | Codec ID | Major | Separator | Codec ID | Codec ID |
| ID | Codec | | Suffix | | | Prefix | Codec ID | | Suffix | |
| Prefix | ID | | | | +==========+==========+===========+===========+=================+
+---------+---------+-----------+--------------+--------------------+ | A_ | AAC | / | MPEG2/LC/ | A_AAC/MPEG2/LC/ |
| A_ | AAC | / | MPEG2/LC/SBR | A_AAC/MPEG2/LC/SBR | | | | | SBR | SBR |
| V_ | MPEG4 | / | ISO/ASP | V_MPEG4/ISO/ASP | +----------+----------+-----------+-----------+-----------------+
| V_ | MPEG1 | | | V_MPEG1 | | V_ | MPEG4 | / | ISO/ASP | V_MPEG4/ISO/ASP |
+---------+---------+-----------+--------------+--------------------+ +----------+----------+-----------+-----------+-----------------+
| V_ | MPEG1 | | | V_MPEG1 |
+----------+----------+-----------+-----------+-----------------+
Table 2
6.1.2. Codec Name 6.1.2. Codec Name
Each encoding supported for storage in Matroska MUST have a "Codec Each encoding supported for storage in Matroska MUST have a "Codec
Name". The "Codec Name" provides a readable label for the encoding. Name". The "Codec Name" provides a readable label for the encoding.
6.1.3. Description 6.1.3. Description
An optional description for the encoding. This value is only An optional description for the encoding. This value is only
intended for human consumption. intended for human consumption.
skipping to change at page 7, line 12 skipping to change at page 7, line 24
necessary to initialize the decoder, which MUST be stored within the necessary to initialize the decoder, which MUST be stored within the
"CodecPrivate Element". When the Initialization is updated within a "CodecPrivate Element". When the Initialization is updated within a
track then that updated Initialization data MUST be written into the track then that updated Initialization data MUST be written into the
"CodecState Element" of the first "Cluster" to require it. If the "CodecState Element" of the first "Cluster" to require it. If the
encoding does not require any form of Initialization then "none" MUST encoding does not require any form of Initialization then "none" MUST
be used to define the Initialization and the "CodecPrivate Element" be used to define the Initialization and the "CodecPrivate Element"
SHOULD NOT be written and MUST be ignored. Data that is defined SHOULD NOT be written and MUST be ignored. Data that is defined
Initialization to be stored in the "CodecPrivate Element" is known as Initialization to be stored in the "CodecPrivate Element" is known as
"Private Data". "Private Data".
6.1.5. Citation 6.1.5. Codec BlockAdditions
Additional data that contextualizes or supplements a "Block" can be
stored within the "BlockAdditional Element" of a "BlockMore Element".
This "BlockAdditional" data MAY be passed to the associated decoder
along with the content of the "Block Element". Each
"BlockAdditional" is coupled with a "BlockAddID" that identifies the
kind of data it contains. The following table defines the meanings
of "BlockAddID" values.
+------------+-------------------------------------------------+
| BlockAddID | Definition |
| Value | |
+============+=================================================+
| 0 | Invalid. |
+------------+-------------------------------------------------+
| 1 | Indicates that the context of the |
| | "BlockAdditional" data is defined by the |
| | corresponding "Codec Mapping". |
+------------+-------------------------------------------------+
| 2 or | "BlockAddID" values of 2 and greater are mapped |
| greater | to the "BlockAddIDValue" of the |
| | "BlockAdditionMapping" of the associated Track. |
+------------+-------------------------------------------------+
Table 3
The values of "BlockAddID" that are 2 of greater have no semantic
meaning, but simply associate the "BlockMore Element" with a
"BlockAdditionMapping" of the associated Track. See the section on
Block Additional Mappings (#block-additional-mapping) for more
information.
The following XML depicts the nested Elements of a "BlockGroup
Element" with an example of BlockAdditions:
<BlockGroup> <Block>{Binary data of a VP9 video frame in YUV}</Block> <BlockAdditions> <BlockMore> <BlockAddID>1</BlockAddID> <BlockAdditional> {alpha channel encoding to supplement the VP9 frame} </BlockAdditional> </BlockMore> </BlockAdditions> </BlockGroup>
6.1.6. Citation
Documentation of the associated normative and informative references Documentation of the associated normative and informative references
for the codec is RECOMMENDED. for the codec is RECOMMENDED.
6.1.6. Deprecation Date 6.1.7. Deprecation Date
A timestamp, expressed in [RFC3339] that notes when support for the A timestamp, expressed in [RFC3339] that notes when support for the
"Codec Mapping" within Matroska was deprecated. If a "Codec Mapping" "Codec Mapping" within Matroska was deprecated. If a "Codec Mapping"
is defined with a "Deprecation Date", then it is RECOMMENDED that is defined with a "Deprecation Date", then it is RECOMMENDED that
Matroska writers SHOULD NOT use the "Codec Mapping" after the Matroska writers SHOULD NOT use the "Codec Mapping" after the
"Deprecation Date". "Deprecation Date".
6.1.7. Superseded By 6.1.8. Superseded By
A "Codec Mapping" MAY only be defined with a "Superseded By" value, A "Codec Mapping" MAY only be defined with a "Superseded By" value,
if it has an expressed "Deprecation Date". If used, the "Superseded if it has an expressed "Deprecation Date". If used, the "Superseded
By" value MUST store the "Codec ID" of another "Codec Mapping" that By" value MUST store the "Codec ID" of another "Codec Mapping" that
has superseded the "Codec Mapping". has superseded the "Codec Mapping".
6.2. Recommendations for the Creation of New Codec Mappings 6.2. Recommendations for the Creation of New Codec Mappings
Creators of new "Codec Mappings" to be used in the context of Creators of new "Codec Mappings" to be used in the context of
Matroska: Matroska:
o SHOULD assume that all "Codec Mappings" they create might become * SHOULD assume that all "Codec Mappings" they create might become
standardized, public, commonly deployed, or usable across multiple standardized, public, commonly deployed, or usable across multiple
implementations. implementations.
o SHOULD employ meaningful values for "Codec ID" and "Codec Name" * SHOULD employ meaningful values for "Codec ID" and "Codec Name"
that they have reason to believe are currently unused. that they have reason to believe are currently unused.
o SHOULD NOT prefix their "Codec ID" with "X_" or similar * SHOULD NOT prefix their "Codec ID" with "X_" or similar
constructs. constructs.
These recommendations are based upon Section 3 of [RFC6648]. These recommendations are based upon Section 3 of [RFC6648].
6.3. Video Codec Mappings 6.3. Video Codec Mappings
6.3.1. V_MS/VFW/FOURCC 6.3.1. V_MS/VFW/FOURCC
Codec ID: "V_MS/VFW/FOURCC" Codec ID: "V_MS/VFW/FOURCC"
Codec Name: Microsoft (TM) Video Codec Manager (VCM) Codec Name: Microsoft (TM) Video Codec Manager (VCM)
Description: The private data contains the VCM structure Description: The private data contains the VCM structure
BITMAPINFOHEADER including the extra private bytes, as defined by BITMAPINFOHEADER including the extra private bytes, as defined by
Microsoft [3]. The data are stored in little endian format (like on Microsoft (https://msdn.microsoft.com/en-us/library/windows/desktop/
IA32 machines). Where is the Huffman table stored in HuffYUV, not dd318229(v=vs.85).aspx). The data are stored in little endian format
AVISTREAMINFO ??? And the FourCC, not in AVISTREAMINFO.fccHandler ??? (like on IA32 machines). Where is the Huffman table stored in
HuffYUV, not AVISTREAMINFO ??? And the FourCC, not in
AVISTREAMINFO.fccHandler ???
Initialization: "Private Data" contains the VCM structure Initialization: "Private Data" contains the VCM structure
BITMAPINFOHEADER including the extra private bytes, as defined by BITMAPINFOHEADER including the extra private bytes, as defined by
Microsoft in <https://msdn.microsoft.com/en- Microsoft in https://msdn.microsoft.com/en-
us/library/windows/desktop/dd183376(v=vs.85).aspx>. us/library/windows/desktop/dd183376(v=vs.85).aspx
(https://msdn.microsoft.com/en-us/library/windows/desktop/
dd183376(v=vs.85).aspx).
Citation: <https://msdn.microsoft.com/en-us/library/windows/desktop/ Citation: https://msdn.microsoft.com/en-us/library/windows/desktop/
dd183376(v=vs.85).aspx> dd183376(v=vs.85).aspx (https://msdn.microsoft.com/en-
us/library/windows/desktop/dd183376(v=vs.85).aspx)
6.3.2. V_UNCOMPRESSED 6.3.2. V_UNCOMPRESSED
Codec ID: V_UNCOMPRESSED Codec ID: V_UNCOMPRESSED
Codec Name: Video, raw uncompressed video frames Codec Name: Video, raw uncompressed video frames
Description: All details about the used color specs and bit depth are Description: All details about the used color specs and bit depth are
to be put/read from the KaxCodecColourSpace elements. to be put/read from the KaxCodecColourSpace elements.
skipping to change at page 10, line 34 skipping to change at page 11, line 34
6.3.9. V_REAL/RV10 6.3.9. V_REAL/RV10
Codec ID: V_REAL/RV10 Codec ID: V_REAL/RV10
Codec Name: RealVideo 1.0 aka RealVideo 5 Codec Name: RealVideo 1.0 aka RealVideo 5
Description: Individual slices from the Real container are combined Description: Individual slices from the Real container are combined
into a single frame. into a single frame.
Initialization: The "Private Data" contains a "real_video_props_t" Initialization: The "Private Data" contains a "real_video_props_t"
structure in Big Endian byte order as found in librmff [4]. structure in Big Endian byte order as found in librmff
(https://github.com/mbunkus/mkvtoolnix/blob/master/lib/librmff/
librmff.h).
6.3.10. V_REAL/RV20 6.3.10. V_REAL/RV20
Codec ID: V_REAL/RV20 Codec ID: V_REAL/RV20
Codec Name: RealVideo G2 and RealVideo G2+SVT Codec Name: RealVideo G2 and RealVideo G2+SVT
Description: Individual slices from the Real container are combined Description: Individual slices from the Real container are combined
into a single frame. into a single frame.
Initialization: The "Private Data" contains a "real_video_props_t" Initialization: The "Private Data" contains a "real_video_props_t"
structure in Big Endian byte order as found in librmff [5]. structure in Big Endian byte order as found in librmff
(https://github.com/mbunkus/mkvtoolnix/blob/master/lib/librmff/
librmff.h).
6.3.11. V_REAL/RV30 6.3.11. V_REAL/RV30
Codec ID: V_REAL/RV30 Codec ID: V_REAL/RV30
Codec Name: RealVideo 8 Codec Name: RealVideo 8
Description: Individual slices from the Real container are combined Description: Individual slices from the Real container are combined
into a single frame. into a single frame.
Initialization: The "Private Data" contains a "real_video_props_t" Initialization: The "Private Data" contains a "real_video_props_t"
structure in Big Endian byte order as found in librmff [6]. structure in Big Endian byte order as found in librmff
(https://github.com/mbunkus/mkvtoolnix/blob/master/lib/librmff/
librmff.h).
6.3.12. V_REAL/RV40 6.3.12. V_REAL/RV40
Codec ID: V_REAL/RV40 Codec ID: V_REAL/RV40
Codec Name: rv40 : RealVideo 9 Codec Name: rv40 : RealVideo 9
Description: Individual slices from the Real container are combined Description: Individual slices from the Real container are combined
into a single frame. into a single frame.
Initialization: The "Private Data" contains a "real_video_props_t" Initialization: The "Private Data" contains a "real_video_props_t"
structure in Big Endian byte order as found in librmff [7]. structure in Big Endian byte order as found in librmff
(https://github.com/mbunkus/mkvtoolnix/blob/master/lib/librmff/
librmff.h).
6.3.13. V_QUICKTIME 6.3.13. V_QUICKTIME
Codec ID: V_QUICKTIME Codec ID: V_QUICKTIME
Codec Name: Video taken from QuickTime(TM) files Codec Name: Video taken from QuickTime(TM) files
Description: Several codecs as stored in QuickTime, e.g. Sorenson or Description: Several codecs as stored in QuickTime, e.g. Sorenson or
Cinepak. Cinepak.
Initialization: The "Private Data" contains all additional data that Initialization: The "Private Data" contains all additional data that
is stored in the 'stsd' (sample description) atom in the QuickTime is stored in the 'stsd' (sample description) atom in the QuickTime
file *after* the mandatory video descriptor structure (starting with file *after* the mandatory video descriptor structure (starting with
the size and FourCC fields). For an explanation of the QuickTime the size and FourCC fields). For an explanation of the QuickTime
file format read QuickTime File Format Specification [8]. file format read QuickTime File Format Specification
(https://developer.apple.com/library/mac/documentation/QuickTime/
QTFF/QTFFPreface/qtffPreface.html).
6.3.14. V_THEORA 6.3.14. V_THEORA
Codec ID: V_THEORA Codec ID: V_THEORA
Codec Name: Theora Codec Name: Theora
Initialization: The "Private Data" contains the first three Theora Initialization: The "Private Data" contains the first three Theora
packets in order. The lengths of the packets precedes them. The packets in order. The lengths of the packets precedes them. The
actual layout is: actual layout is:
o Byte 1: number of distinct packets '"#p"' minus one inside the * Byte 1: number of distinct packets '"#p"' minus one inside the
CodecPrivate block. This MUST be '2' for current (as of CodecPrivate block. This MUST be '2' for current (as of
2016-07-08) Theora headers. 2016-07-08) Theora headers.
o Bytes 2..n: lengths of the first '"#p"' packets, coded in Xiph- * Bytes 2..n: lengths of the first '"#p"' packets, coded in Xiph-
style lacing. The length of the last packet is the length of the style lacing. The length of the last packet is the length of the
CodecPrivate block minus the lengths coded in these bytes minus CodecPrivate block minus the lengths coded in these bytes minus
one. one.
o Bytes n+1..: The Theora identification header, followed by the * Bytes n+1..: The Theora identification header, followed by the
commend header followed by the codec setup header. Those are commend header followed by the codec setup header. Those are
described in the Theora specs [9]. described in the Theora specs (http://www.theora.org/doc/
Theora.pdf).
6.3.15. V_PRORES 6.3.15. V_PRORES
Codec ID: V_PRORES Codec ID: V_PRORES
Codec Name: Apple ProRes Codec Name: Apple ProRes
Initialization: The "Private Data" contains the FourCC as found in Initialization: The "Private Data" contains the FourCC as found in
MP4 movies: MP4 movies:
o ap4x: ProRes 4444 XQ * ap4x: ProRes 4444 XQ
o ap4h: ProRes 4444
o apch: ProRes 422 High Quality * ap4h: ProRes 4444
o apcn: ProRes 422 Standard Definition * apch: ProRes 422 High Quality
o apcs: ProRes 422 LT * apcn: ProRes 422 Standard Definition
o apco: ProRes 422 Proxy * apcs: ProRes 422 LT
o aprh: ProRes RAW High Quality * apco: ProRes 422 Proxy
o aprn: ProRes RAW Standard Definition * aprh: ProRes RAW High Quality
this page for more technical details on ProRes [10] * aprn: ProRes RAW Standard Definition
this page for more technical details on ProRes
(http://wiki.multimedia.cx/index.php?title=Apple_ProRes#Frame_layout)
6.3.16. V_VP8 6.3.16. V_VP8
Codec ID: V_VP8 Codec ID: V_VP8
Codec Name: VP8 Codec format Codec Name: VP8 Codec format
Description: VP8 is an open and royalty free video compression format Description: VP8 is an open and royalty free video compression format
developed by Google and created by On2 Technologies as a successor to developed by Google and created by On2 Technologies as a successor to
VP7. [RFC6386] VP7. [RFC6386]
Codec BlockAdditions: A single-channel encoding of an alpha channel
MAY be stored in "BlockAdditions". The "BlockAddId" of the
"BlockMore" containing these data MUST be 1.
Initialization: none Initialization: none
6.3.17. V_VP9 6.3.17. V_VP9
Codec ID: V_VP9 Codec ID: V_VP9
Codec Name: VP9 Codec format Codec Name: VP9 Codec format
Description: VP9 is an open and royalty free video compression format Description: VP9 is an open and royalty free video compression format
developed by Google as a successor to VP8. Draft VP9 Bitstream and developed by Google as a successor to VP8. Draft VP9 Bitstream and
Decoding Process Specification [11] Decoding Process Specification (https://www.webmproject.org/vp9/)
Codec BlockAdditions: A single-channel encoding of an alpha channel
MAY be stored in "BlockAdditions". The "BlockAddId" of the
"BlockMore" containing these data MUST be 1.
Initialization: none Initialization: none
6.3.18. V_FFV1 6.3.18. V_FFV1
Codec ID: V_FFV1 Codec ID: V_FFV1
Codec Name: FF Video Codec 1 Codec Name: FF Video Codec 1
Description: FFV1 is a lossless intra-frame video encoding format Description: FFV1 is a lossless intra-frame video encoding format
designed to efficiently compress video data in a variety of pixel designed to efficiently compress video data in a variety of pixel
formats. Compared to uncompressed video, FFV1 offers storage formats. Compared to uncompressed video, FFV1 offers storage
compression, frame fixity, and self-description, which makes FFV1 compression, frame fixity, and self-description, which makes FFV1
useful as a preservation or intermediate video format. Draft FFV1 useful as a preservation or intermediate video format. Draft FFV1
Specification [12] Specification (https://datatracker.ietf.org/doc/draft-ietf-cellar-
ffv1/)
Initialization: For FFV1 versions 0 or 1, "Private Data" SHOULD NOT Initialization: For FFV1 versions 0 or 1, "Private Data" SHOULD NOT
be written. For FFV1 version 3 or greater, the "Private Data" MUST be written. For FFV1 version 3 or greater, the "Private Data" MUST
contain the FFV1 Configuration Record structure, as defined in contain the FFV1 Configuration Record structure, as defined in
<https://tools.ietf.org/html/draft-ietf-cellar-ffv1-04#section-4.2>, https://tools.ietf.org/html/draft-ietf-cellar-ffv1-04#section-4.2
(https://tools.ietf.org/html/draft-ietf-cellar-ffv1-04#section-4.2),
and no other data. and no other data.
6.4. Audio Codec Mappings 6.4. Audio Codec Mappings
6.4.1. A_MPEG/L3 6.4.1. A_MPEG/L3
Codec ID: A_MPEG/L3 Codec ID: A_MPEG/L3
Codec Name: MPEG Audio 1, 2, 2.5 Layer III Codec Name: MPEG Audio 1, 2, 2.5 Layer III
skipping to change at page 16, line 35 skipping to change at page 18, line 14
6.4.11. A_ALAC 6.4.11. A_ALAC
Codec ID: A_ALAC Codec ID: A_ALAC
Codec Name: ALAC (Apple Lossless Audio Codec) Codec Name: ALAC (Apple Lossless Audio Codec)
Initialization: The "Private Data" contains ALAC's magic cookie (both Initialization: The "Private Data" contains ALAC's magic cookie (both
the codec specific configuration as well as the optional channel the codec specific configuration as well as the optional channel
layout information). Its format is described in ALAC's official layout information). Its format is described in ALAC's official
source code [13]. source code (http://alac.macosforge.org/trac/browser/trunk/
ALACMagicCookieDescription.txt).
6.4.12. A_DTS 6.4.12. A_DTS
Codec ID: A_DTS Codec ID: A_DTS
Codec Name: Digital Theatre System Codec Name: Digital Theatre System
Description: Supports DTS, DTS-ES, DTS-96/26, DTS-HD High Resolution Description: Supports DTS, DTS-ES, DTS-96/26, DTS-HD High Resolution
Audio and DTS-HD Master Audio. The private data is void. Audio and DTS-HD Master Audio. The private data is void.
Corresponding ACM wFormatTag : 0x2001 Corresponding ACM wFormatTag : 0x2001
skipping to change at page 17, line 41 skipping to change at page 19, line 19
Codec Name: Vorbis Codec Name: Vorbis
Initialization: The "Private Data" contains the first three Vorbis Initialization: The "Private Data" contains the first three Vorbis
packet in order. The lengths of the packets precedes them. The packet in order. The lengths of the packets precedes them. The
actual layout is: - Byte 1: number of distinct packets '"#p"' minus actual layout is: - Byte 1: number of distinct packets '"#p"' minus
one inside the CodecPrivate block. This MUST be '2' for current (as one inside the CodecPrivate block. This MUST be '2' for current (as
of 2016-07-08) Vorbis headers. - Bytes 2..n: lengths of the first of 2016-07-08) Vorbis headers. - Bytes 2..n: lengths of the first
'"#p"' packets, coded in Xiph-style lacing. The length of the last '"#p"' packets, coded in Xiph-style lacing. The length of the last
packet is the length of the CodecPrivate block minus the lengths packet is the length of the CodecPrivate block minus the lengths
coded in these bytes minus one. - Bytes n+1..: The Vorbis coded in these bytes minus one. - Bytes n+1..: The Vorbis
identification header [14], followed by the Vorbis comment header identification header (https://xiph.org/vorbis/doc/
[15] followed by the codec setup header [16]. Vorbis_I_spec.html), followed by the Vorbis comment header
(https://xiph.org/vorbis/doc/v-comment.html) followed by the codec
setup header (https://xiph.org/vorbis/doc/Vorbis_I_spec.html).
6.4.16. A_FLAC 6.4.16. A_FLAC
Codec ID: A_FLAC Codec ID: A_FLAC
Codec Name: FLAC (Free Lossless Audio Codec) [17] Codec Name: FLAC (Free Lossless Audio Codec)
(http://flac.sourceforge.net/)
Initialization: The "Private Data" contains all the header/metadata Initialization: The "Private Data" contains all the header/metadata
packets before the first data packet. These include the first header packets before the first data packet. These include the first header
packet containing only the word "fLaC" as well as all metadata packet containing only the word "fLaC" as well as all metadata
packets. packets.
6.4.17. A_REAL/14_4 6.4.17. A_REAL/14_4
Codec ID: A_REAL/14_4 Codec ID: A_REAL/14_4
Codec Name: Real Audio 1 Codec Name: Real Audio 1
Initialization: The "Private Data" contains either the Initialization: The "Private Data" contains either the
"real_audio_v4_props_t" or the "real_audio_v5_props_t" structure "real_audio_v4_props_t" or the "real_audio_v5_props_t" structure
(differentiated by their "version" field; Big Endian byte order) as (differentiated by their "version" field; Big Endian byte order) as
found in librmff [18]. found in librmff
(https://github.com/mbunkus/mkvtoolnix/blob/master/lib/librmff/
librmff.h).
6.4.18. A_REAL/28_8 6.4.18. A_REAL/28_8
Codec ID: A_REAL/28_8 Codec ID: A_REAL/28_8
Codec Name: Real Audio 2 Codec Name: Real Audio 2
Initialization: The "Private Data" contains either the Initialization: The "Private Data" contains either the
"real_audio_v4_props_t" or the "real_audio_v5_props_t" structure "real_audio_v4_props_t" or the "real_audio_v5_props_t" structure
(differentiated by their "version" field; Big Endian byte order) as (differentiated by their "version" field; Big Endian byte order) as
found in librmff [19]. found in librmff
(https://github.com/mbunkus/mkvtoolnix/blob/master/lib/librmff/
librmff.h).
6.4.19. A_REAL/COOK 6.4.19. A_REAL/COOK
Codec ID: A_REAL/COOK Codec ID: A_REAL/COOK
Codec Name: Real Audio Cook Codec (codename: Gecko) Codec Name: Real Audio Cook Codec (codename: Gecko)
Initialization: The "Private Data" contains either the Initialization: The "Private Data" contains either the
"real_audio_v4_props_t" or the "real_audio_v5_props_t" structure "real_audio_v4_props_t" or the "real_audio_v5_props_t" structure
(differentiated by their "version" field; Big Endian byte order) as (differentiated by their "version" field; Big Endian byte order) as
found in librmff [20]. found in librmff
(https://github.com/mbunkus/mkvtoolnix/blob/master/lib/librmff/
librmff.h).
6.4.20. A_REAL/SIPR 6.4.20. A_REAL/SIPR
Codec ID: A_REAL/SIPR Codec ID: A_REAL/SIPR
Codec Name: Sipro Voice Codec Codec Name: Sipro Voice Codec
Initialization: The "Private Data" contains either the Initialization: The "Private Data" contains either the
"real_audio_v4_props_t" or the "real_audio_v5_props_t" structure "real_audio_v4_props_t" or the "real_audio_v5_props_t" structure
(differentiated by their "version" field; Big Endian byte order) as (differentiated by their "version" field; Big Endian byte order) as
found in librmff [21]. found in librmff
(https://github.com/mbunkus/mkvtoolnix/blob/master/lib/librmff/
librmff.h).
6.4.21. A_REAL/RALF 6.4.21. A_REAL/RALF
Codec ID: A_REAL/RALF Codec ID: A_REAL/RALF
Codec Name: Real Audio Lossless Format Codec Name: Real Audio Lossless Format
Initialization: The "Private Data" contains either the Initialization: The "Private Data" contains either the
"real_audio_v4_props_t" or the "real_audio_v5_props_t" structure "real_audio_v4_props_t" or the "real_audio_v5_props_t" structure
(differentiated by their "version" field; Big Endian byte order) as (differentiated by their "version" field; Big Endian byte order) as
found in librmff [22]. found in librmff
(https://github.com/mbunkus/mkvtoolnix/blob/master/lib/librmff/
librmff.h).
6.4.22. A_REAL/ATRC 6.4.22. A_REAL/ATRC
Codec ID: A_REAL/ATRC Codec ID: A_REAL/ATRC
Codec Name: Sony Atrac3 Codec Codec Name: Sony Atrac3 Codec
Initialization: The "Private Data" contains either the Initialization: The "Private Data" contains either the
"real_audio_v4_props_t" or the "real_audio_v5_props_t" structure "real_audio_v4_props_t" or the "real_audio_v5_props_t" structure
(differentiated by their "version" field; Big Endian byte order) as (differentiated by their "version" field; Big Endian byte order) as
found in librmff [23]. found in librmff
(https://github.com/mbunkus/mkvtoolnix/blob/master/lib/librmff/
librmff.h).
6.4.23. A_MS/ACM 6.4.23. A_MS/ACM
Codec ID: A_MS/ACM Codec ID: A_MS/ACM
Codec Name: Microsoft(TM) Audio Codec Manager (ACM) Codec Name: Microsoft(TM) Audio Codec Manager (ACM)
Description: The data are stored in little endian format (like on Description: The data are stored in little endian format (like on
IA32 machines). IA32 machines).
Initialization: The "Private Data" contains the ACM structure Initialization: The "Private Data" contains the ACM structure
WAVEFORMATEX including the extra private bytes, as defined by WAVEFORMATEX including the extra private bytes, as defined by
Microsoft [24]. Microsoft
(http://msdn.microsoft.com/library/default.asp?url=/library/en-
us/multimed/mmstr_625u.asp).
6.4.24. A_AAC/MPEG2/MAIN 6.4.24. A_AAC/MPEG2/MAIN
Codec ID: A_AAC/MPEG2/MAIN Codec ID: A_AAC/MPEG2/MAIN
Codec Name: MPEG2 Main Profile Codec Name: MPEG2 Main Profile
Description: Channel number and sample rate have to be read from the Description: Channel number and sample rate have to be read from the
corresponding audio element. Audio stream is stripped from ADTS corresponding audio element. Audio stream is stripped from ADTS
headers and normal Matroska frame based muxing scheme is applied. headers and normal Matroska frame based muxing scheme is applied.
skipping to change at page 22, line 31 skipping to change at page 24, line 22
Codec Name: Audio taken from QuickTime(TM) files Codec Name: Audio taken from QuickTime(TM) files
Description: Several codecs as stored in QuickTime, e.g. QDesign Description: Several codecs as stored in QuickTime, e.g. QDesign
Music v1 or v2. Music v1 or v2.
Initialization: The "Private Data" contains all additional data that Initialization: The "Private Data" contains all additional data that
is stored in the 'stsd' (sample description) atom in the QuickTime is stored in the 'stsd' (sample description) atom in the QuickTime
file *after* the mandatory sound descriptor structure (starting with file *after* the mandatory sound descriptor structure (starting with
the size and FourCC fields). For an explanation of the QuickTime the size and FourCC fields). For an explanation of the QuickTime
file format read QuickTime File Format Specification [25]. file format read QuickTime File Format Specification
(https://developer.apple.com/library/mac/documentation/QuickTime/
QTFF/QTFFPreface/qtffPreface.html).
6.4.34. A_QUICKTIME/QDMC 6.4.34. A_QUICKTIME/QDMC
Codec ID: A_QUICKTIME/QDMC Codec ID: A_QUICKTIME/QDMC
Codec Name: QDesign Music Codec Name: QDesign Music
Description: Description:
Initialization: The "Private Data" contains all additional data that Initialization: The "Private Data" contains all additional data that
is stored in the 'stsd' (sample description) atom in the QuickTime is stored in the 'stsd' (sample description) atom in the QuickTime
file *after* the mandatory sound descriptor structure (starting with file *after* the mandatory sound descriptor structure (starting with
the size and FourCC fields). For an explanation of the QuickTime the size and FourCC fields). For an explanation of the QuickTime
file format read QuickTime File Format Specification [26]. file format read QuickTime File Format Specification
(https://developer.apple.com/library/mac/documentation/QuickTime/
QTFF/QTFFPreface/qtffPreface.html).
Superseded By: A_QUICKTIME Superseded By: A_QUICKTIME
6.4.35. A_QUICKTIME/QDM2 6.4.35. A_QUICKTIME/QDM2
Codec ID: A_QUICKTIME/QDM2 Codec ID: A_QUICKTIME/QDM2
Codec Name: QDesign Music v2 Codec Name: QDesign Music v2
Description: Description:
Initialization: The "Private Data" contains all additional data that Initialization: The "Private Data" contains all additional data that
is stored in the 'stsd' (sample description) atom in the QuickTime is stored in the 'stsd' (sample description) atom in the QuickTime
file *after* the mandatory sound descriptor structure (starting with file *after* the mandatory sound descriptor structure (starting with
the size and FourCC fields). For an explanation of the QuickTime the size and FourCC fields). For an explanation of the QuickTime
file format read QuickTime File Format Specification [27]. file format read QuickTime File Format Specification
(https://developer.apple.com/library/mac/documentation/QuickTime/
QTFF/QTFFPreface/qtffPreface.html).
Superseded By: A_QUICKTIME Superseded By: A_QUICKTIME
6.4.36. A_TTA1 6.4.36. A_TTA1
Codec ID: A_TTA1 Codec ID: A_TTA1
Codec Name: The True Audio [28] lossless audio compressor Codec Name: The True Audio (http://tausoft.org/) lossless audio
compressor
Description: TTA format description [29] Each frame is kept intact, Description: TTA format description (http://tausoft.org/wiki/
including the CRC32. The header and seektable are dropped. True_Audio_Codec_Format) Each frame is kept intact, including the
SamplingFrequency, Channels and BitDepth are used in the TrackEntry. CRC32. The header and seektable are dropped. SamplingFrequency,
wFormatTag = 0x77A1 Channels and BitDepth are used in the TrackEntry. wFormatTag = 0x77A1
Initialization: none Initialization: none
6.4.37. A_WAVPACK4 6.4.37. A_WAVPACK4
Codec ID: A_WAVPACK4 Codec ID: A_WAVPACK4
Codec Name: WavPack [30] lossless audio compressor Codec Name: WavPack (http://www.wavpack.com/) lossless audio
compressor
Description: The Wavpack packets consist of a stripped header Description: The Wavpack packets consist of a stripped header
followed by the frame data. For multi-track (> 2 tracks) a frame followed by the frame data. For multi-track (> 2 tracks) a frame
consists of many packets. For hybrid files (lossy part + correction consists of many packets. For more details, check the WavPack muxing
part), the correction part is stored in an additional block (level description (wavpack.html).
1). For more details, check the WavPack muxing description [31].
Codec BlockAdditions: For hybrid "A_WAVPACK4" encodings (that include
a lossy encoding with a supplemental correction to produce a lossless
encoding), the correction part is stored in BlockAdditional. The
"BlockAddId" of the "BlockMore" containing these data MUST be 1.
Initialization: none Initialization: none
6.5. Subtitle Codec Mappings 6.5. Subtitle Codec Mappings
6.5.1. S_TEXT/UTF8 6.5.1. S_TEXT/UTF8
Codec ID: S_TEXT/UTF8 Codec ID: S_TEXT/UTF8
Codec Name: UTF-8 Plain Text Codec Name: UTF-8 Plain Text
Description: Basic text subtitles. For more information, please look Description: Basic text subtitles. For more information, please look
at Section 7. at the Subtitles section (#subtitles).
6.5.2. S_TEXT/SSA 6.5.2. S_TEXT/SSA
Codec ID: S_TEXT/SSA Codec ID: S_TEXT/SSA
Codec Name: Subtitles Format Codec Name: Subtitles Format
Description: The [Script Info] and [V4 Styles] sections are stored in Description: The [Script Info] and [V4 Styles] sections are stored in
the codecprivate. Each event is stored in its own Block. For more the codecprivate. Each event is stored in its own Block. For more
information, see Section 7. information, see the SSA/ASS section in Subtitles (#subtitles).
6.5.3. S_TEXT/ASS 6.5.3. S_TEXT/ASS
Codec ID: S_TEXT/ASS Codec ID: S_TEXT/ASS
Codec Name: Advanced Subtitles Format Codec Name: Advanced Subtitles Format
Description: The [Script Info] and [V4 Styles] sections are stored in Description: The [Script Info] and [V4 Styles] sections are stored in
the codecprivate. Each event is stored in its own Block. For more the codecprivate. Each event is stored in its own Block. For more
information, see Section 7. information, see the SSA/ASS section in Subtitles (#subtitles).
6.5.4. S_TEXT/USF 6.5.4. S_TEXT/USF
Codec ID: S_TEXT/USF Codec ID: S_TEXT/USF
Codec Name: Universal Subtitle Format Codec Name: Universal Subtitle Format
Description: This is mostly defined, but not typed out yet. It will Description: This is mostly defined, but not typed out yet. It will
first be available on the USF specification Section 7. first be available on the USF specification in Subtitles
(#subtitles).
6.5.5. S_TEXT/WEBVTT 6.5.5. S_TEXT/WEBVTT
Codec ID: S_TEXT/WEBVTT Codec ID: S_TEXT/WEBVTT
Codec Name: Web Video Text Tracks Format (WebVTT) Codec Name: Web Video Text Tracks Format (WebVTT)
Description: Advanced text subtitles. For more information, see the
Description: Advanced text subtitles. For more information, see WebVTT section in Subtitles (#subtitles).
Section 7.
6.5.6. S_IMAGE/BMP 6.5.6. S_IMAGE/BMP
Codec ID: S_IMAGE/BMP Codec ID: S_IMAGE/BMP
Codec Name: Bitmap Codec Name: Bitmap
Description: Basic image based subtitle format; The subtitles are Description: Basic image based subtitle format; The subtitles are
stored as images, like in the DVD. The timestamp in the block header stored as images, like in the DVD. The timestamp in the block header
of Matroska indicates the start display time, the duration is set of Matroska indicates the start display time, the duration is set
with the Duration element. The full data for the subtitle bitmap is with the Duration element. The full data for the subtitle bitmap is
stored in the Block's data section. stored in the Block's data section.
6.5.7. S_DVBSUB 6.5.7. S_DVBSUB
Codec ID: S_DVBSUB Codec ID: S_DVBSUB
Codec Name: Digital Video Broadcasting (DVB) subtitles Codec Name: Digital Video Broadcasting (DVB) subtitles
Description: This is the graphical subtitle format used in the Description: This is the graphical subtitle format used in the
Digital Video Broadcasting standard. For more information, see Digital Video Broadcasting standard. For more information, see the
Section 7. Digital Video Broadcasting (DVB) section in Subtitles (#subtitles).
6.5.8. S_VOBSUB 6.5.8. S_VOBSUB
Codec ID: S_VOBSUB Codec ID: S_VOBSUB
Codec Name: VobSub subtitles Codec Name: VobSub subtitles
Description: The same subtitle format used on DVDs. Supported is Description: The same subtitle format used on DVDs. Supported is
only format version 7 and newer. VobSubs consist of two files, the only format version 7 and newer. VobSubs consist of two files, the
.idx containing information, and the .sub, containing the actual .idx containing information, and the .sub, containing the actual
skipping to change at page 26, line 12 skipping to change at page 28, line 12
MPEG program stream data is discarded, and each SPU packet is put MPEG program stream data is discarded, and each SPU packet is put
into one Matroska frame. into one Matroska frame.
6.5.9. S_HDMV/PGS 6.5.9. S_HDMV/PGS
Codec ID: S_HDMV/PGS Codec ID: S_HDMV/PGS
Codec Name: HDMV presentation graphics subtitles (PGS) Codec Name: HDMV presentation graphics subtitles (PGS)
Description: This is the graphical subtitle format used on Blu-rays. Description: This is the graphical subtitle format used on Blu-rays.
For more information, see Section 7. For more information, see HDMV text presentation in Subtitles
(#subtitles).
6.5.10. S_HDMV/TEXTST 6.5.10. S_HDMV/TEXTST
Codec ID: S_HDMV/TEXTST Codec ID: S_HDMV/TEXTST
Codec Name: HDMV text subtitles Codec Name: HDMV text subtitles
Description: This is the textual subtitle format used on Blu-rays. Description: This is the textual subtitle format used on Blu-rays.
For more information, see Section 7. For more information, see HDMV graphics presentation in Subtitles
(#subtitles).
6.5.11. S_KATE 6.5.11. S_KATE
Codec ID: S_KATE Codec ID: S_KATE
Codec Name: Karaoke And Text Encapsulation Codec Name: Karaoke And Text Encapsulation
Description: A subtitle format developed for ogg. The mapping for Description: A subtitle format developed for ogg. The mapping for
Matroska is described on the Xiph wiki [32]. As for Theora and Matroska is described on the Xiph wiki
Vorbis, Kate headers are stored in the private data as xiph-laced (http://wiki.xiph.org/index.php/OggKate#Matroska_mapping). As for
packets. Theora and Vorbis, Kate headers are stored in the private data as
xiph-laced packets.
6.6. Button Codec Mappings 6.6. Button Codec Mappings
6.6.1. B_VOBBTN 6.6.1. B_VOBBTN
Codec ID: B_VOBBTN Codec ID: B_VOBBTN
Codec Name: VobBtn Buttons Codec Name: VobBtn Buttons
Description: Based on MPEG/VOB PCI packets [33]. The file contains a Description: Based on MPEG/VOB PCI packets
header consisting of the string "butonDVD" followed by the width and (http://dvd.sourceforge.net/dvdinfo/pci_pkt.html). The file contains
height in pixels (16 bits integer each) and 4 reserved bytes. The a header consisting of the string "butonDVD" followed by the width
rest is full PCI packets [34]. and height in pixels (16 bits integer each) and 4 reserved bytes.
The rest is full PCI packets (http://dvd.sourceforge.net/dvdinfo/
pci_pkt.html).
7. Subtitles 7. Subtitles
Because Matroska is a general container format, we try to avoid Because Matroska is a general container format, we try to avoid
specifying the formats to store in it. This type of work is really specifying the formats to store in it. This type of work is really
outside of the scope of a container-only format. However, because outside of the scope of a container-only format. However, because
the use of subtitles in A/V containers has been so limited (with the the use of subtitles in A/V containers has been so limited (with the
exception of DVD) we are taking the time to specify how to store some exception of DVD) we are taking the time to specify how to store some
of the more common subtitle formats in Matroska. This is being done of the more common subtitle formats in Matroska. This is being done
to help facilitate their growth. Otherwise, incompatibilities could to help facilitate their growth. Otherwise, incompatibilities could
skipping to change at page 27, line 19 skipping to change at page 29, line 26
This page is not meant to be a complete listing of all subtitle This page is not meant to be a complete listing of all subtitle
formats that will be used in Matroska, it is only meant to be a guide formats that will be used in Matroska, it is only meant to be a guide
for the more common, current formats. It is possible that we will for the more common, current formats. It is possible that we will
add future formats to this page as they are created, but it is not add future formats to this page as they are created, but it is not
likely as any other new subtitle format designer would likely have likely as any other new subtitle format designer would likely have
their own specifications. Any specification listed here SHOULD be their own specifications. Any specification listed here SHOULD be
strictly adhered to or it SHOULD NOT use the corresponding Codec ID. strictly adhered to or it SHOULD NOT use the corresponding Codec ID.
Here is a list of pointers for storing subtitles in Matroska: Here is a list of pointers for storing subtitles in Matroska:
o Any Matroska file containing only subtitles SHOULD use the * Any Matroska file containing only subtitles SHOULD use the
extension ".mks". extension ".mks".
o As a general rule of thumb for all codecs, information that is * As a general rule of thumb for all codecs, information that is
global to an entire stream SHOULD be stored in the CodecPrivate global to an entire stream SHOULD be stored in the CodecPrivate
element. element.
o Start and stop timestamps that are used in a timestamps native * Start and stop timestamps that are used in a timestamps native
storage format SHOULD be removed when being placed in Matroska as storage format SHOULD be removed when being placed in Matroska as
they could interfere if the file is edited afterwards. Instead, they could interfere if the file is edited afterwards. Instead,
the Blocks timestamp and Duration SHOULD be used to say when the the Blocks timestamp and Duration SHOULD be used to say when the
timestamp is displayed. timestamp is displayed.
o Because a "subtitle" stream is actually just an overlay stream, * Because a "subtitle" stream is actually just an overlay stream,
anything with a transparency layer could be use, including video. anything with a transparency layer could be use, including video.
7.1. Images Subtitles 7.1. Images Subtitles
The first image format that is a goal to import into Matroska is the The first image format that is a goal to import into Matroska is the
VobSub subtitle format. This subtitle type is generated by exporting VobSub subtitle format. This subtitle type is generated by exporting
the subtitles from a DVD. the subtitles from a DVD.
The requirement for muxing VobSub into Matroska is v7 subtitles (see The requirement for muxing VobSub into Matroska is v7 subtitles (see
first line of the .IDX file). If the version is smaller, you must first line of the .IDX file). If the version is smaller, you must
skipping to change at page 28, line 16 skipping to change at page 30, line 23
The .IDX file is reformatted (see below) and placed in the The .IDX file is reformatted (see below) and placed in the
CodecPrivate. CodecPrivate.
Each .BMP will be stored in its own Block. The Timestamp with be Each .BMP will be stored in its own Block. The Timestamp with be
stored in the Blocks Timestamp and the duration will be stored in the stored in the Blocks Timestamp and the duration will be stored in the
Default Duration. Default Duration.
Here is an example .IDX file: Here is an example .IDX file:
# VobSub index file, v7 (do not modify this line!) # VobSub index file, v7 (do not modify this line!)
# #
# To repair desynchronization, you can insert gaps this way: # To repair desynchronization, you can insert gaps this way:
# (it usually happens after vob id changes) # (it usually happens after vob id changes)
# #
# delay: [sign]hh:mm:ss:ms # delay: [sign]hh:mm:ss:ms
# #
# Where: # Where:
# [sign]: +, - (optional) # [sign]: +, - (optional)
# hh: hours (0 <= hh) # hh: hours (0 <= hh)
# mm/ss: minutes/seconds (0 <= mm/ss <= 59) # mm/ss: minutes/seconds (0 <= mm/ss <= 59)
# ms: milliseconds (0 <= ms <= 999) # ms: milliseconds (0 <= ms <= 999)
# #
# Note: You can't position a sub before the previous with a negative # Note: You can't position a sub before the previous with a negative
# value. # value.
# #
# You can also modify timestamps or delete a few subs you don't like. # You can also modify timestamps or delete a few subs you don't
# Just make sure they stay in increasing order. # like. Just make sure they stay in increasing order.
# Settings # Settings
# Original frame size # Original frame size
size: 720x480 size: 720x480
# Origin, relative to the upper-left corner, can be overloaded by # Origin, relative to the upper-left corner, can be overloaded by
# alignment # alignment
org: 0, 0 org: 0, 0
# Image scaling (hor,ver), origin is at the upper-left corner or at # Image scaling (hor,ver), origin is at the upper-left corner or at
# the alignment coord (x, y) # the alignment coord (x, y)
scale: 100%, 100% scale: 100%, 100%
# Alpha blending # Alpha blending
alpha: 100% alpha: 100%
# Smoothing for very blocky images (use OLD for no filtering) # Smoothing for very blocky images (use OLD for no filtering)
smooth: OFF smooth: OFF
# In millisecs # In millisecs
fadein/out: 50, 50 fadein/out: 50, 50
# Force subtitle placement relative to (org.x, org.y) # Force subtitle placement relative to (org.x, org.y)
align: OFF at LEFT TOP align: OFF at LEFT TOP
# For correcting non-progressive desync. (in millisecs or hh:mm:ss:ms) # For correcting non-progressive desync. (in millisecs or
# Note: Not effective in DirectVobSub, use "delay: ... " instead. # hh:mm:ss:ms)
time offset: 0 # Note: Not effective in DirectVobSub, use "delay: ... " instead.
time offset: 0
# ON: displays only forced subtitles, OFF: shows everything # ON: displays only forced subtitles, OFF: shows everything
forced subs: OFF forced subs: OFF
# The original palette of the DVD # The original palette of the DVD
palette: 000000, 7e7e7e, fbff8b, cb86f1, 7f74b8, e23f06, 0a48ea, \ palette: 000000, 7e7e7e, fbff8b, cb86f1, 7f74b8, e23f06, 0a48ea, \
b3d65a, 6b92f1, 87f087, c02081, f8d0f4, e3c411, 382201, e8840b, fdfdfd b3d65a, 6b92f1, 87f087, c02081, f8d0f4, e3c411, 382201, e8840b, \
fdfdfd
# Custom colors (transp idxs and the four colors) # Custom colors (transp idxs and the four colors)
custom colors: OFF, tridx: 0000, colors: 000000, 000000, 000000, \ custom colors: OFF, tridx: 0000, colors: 000000, 000000, 000000, \
000000 000000
# Language index in use # Language index in use
langidx: 0 langidx: 0
# English # English
id: en, index: 0 id: en, index: 0
# Uncomment next line to activate alternative name in DirectVobSub / # Uncomment next line to activate alternative name in DirectVobSub /
# Windows Media Player 6.x # Windows Media Player 6.x
# alt: English # alt: English
# Vob/Cell ID: 1, 1 (PTS: 0) # Vob/Cell ID: 1, 1 (PTS: 0)
timestamp: 00:00:01:101, filepos: 000000000 timestamp: 00:00:01:101, filepos: 000000000
timestamp: 00:00:08:708, filepos: 000001000 timestamp: 00:00:08:708, filepos: 000001000
First, lines beginning with "#" are removed. These are comments to First, lines beginning with "#" are removed. These are comments to
make text file editing easier, and as this is not a text file, they make text file editing easier, and as this is not a text file, they
aren't needed. aren't needed.
Next remove the "langidx" and "id" lines. These are used to Next remove the "langidx" and "id" lines. These are used to
differentiate the subtitle streams and define the language. As the differentiate the subtitle streams and define the language. As the
streams will be stored separately anyway, there is no need to streams will be stored separately anyway, there is no need to
differentiate them here. Also, the language setting will be stored differentiate them here. Also, the language setting will be stored
in the Matroska tags, so there is no need to store it here. in the Matroska tags, so there is no need to store it here.
skipping to change at page 30, line 4 skipping to change at page 32, line 13
aren't needed. aren't needed.
Next remove the "langidx" and "id" lines. These are used to Next remove the "langidx" and "id" lines. These are used to
differentiate the subtitle streams and define the language. As the differentiate the subtitle streams and define the language. As the
streams will be stored separately anyway, there is no need to streams will be stored separately anyway, there is no need to
differentiate them here. Also, the language setting will be stored differentiate them here. Also, the language setting will be stored
in the Matroska tags, so there is no need to store it here. in the Matroska tags, so there is no need to store it here.
Finally, the "timestamp" will be used to set the Block's timestamp. Finally, the "timestamp" will be used to set the Block's timestamp.
Once it is set there, there is no need for it to be stored here. Once it is set there, there is no need for it to be stored here.
Also, as it may interfere if the file is edited, it SHOULD NOT be Also, as it may interfere if the file is edited, it SHOULD NOT be
stored here. stored here.
Once all of these items are removed, the data to store in the Once all of these items are removed, the data to store in the
CodecPrivate SHOULD look like this: CodecPrivate SHOULD look like this:
size: 720x480 size: 720x480
org: 0, 0 org: 0, 0
scale: 100%, 100% scale: 100%, 100%
alpha: 100% alpha: 100%
smooth: OFF smooth: OFF
fadein/out: 50, 50 fadein/out: 50, 50
align: OFF at LEFT TOP align: OFF at LEFT TOP
time offset: 0 time offset: 0
forced subs: OFF forced subs: OFF
palette: 000000, 7e7e7e, fbff8b, cb86f1, 7f74b8, e23f06, 0a48ea, \ palette: 000000, 7e7e7e, fbff8b, cb86f1, 7f74b8, e23f06, 0a48ea, \
b3d65a, 6b92f1, 87f087, c02081, f8d0f4, e3c411, 382201, e8840b, fdfdfd b3d65a, 6b92f1, 87f087, c02081, f8d0f4, e3c411, 382201, e8840b, \
custom colors: OFF, tridx: 0000, colors: 000000, 000000, 000000, \ fdfdfd
000000 custom colors: OFF, tridx: 0000, colors: 000000, 000000, 000000, \
000000
There SHOULD also be two Blocks containing one image each with the There SHOULD also be two Blocks containing one image each with the
timestamps "00:00:01:101" and "00:00:08:708". timestamps "00:00:01:101" and "00:00:08:708".
7.2. SRT Subtitles 7.2. SRT Subtitles
SRT is perhaps the most basic of all subtitle formats. SRT is perhaps the most basic of all subtitle formats.
It consists of four parts, all in text.. It consists of four parts, all in text..
skipping to change at page 31, line 5 skipping to change at page 33, line 7
disappears. 3. The subtitle itself. 4. A blank line indicating disappears. 3. The subtitle itself. 4. A blank line indicating
the start of a new subtitle. the start of a new subtitle.
When placing SRT in Matroska, part 3 is converted to UTF-8 (S_TEXT/ When placing SRT in Matroska, part 3 is converted to UTF-8 (S_TEXT/
UTF8) and placed in the data portion of the Block. Part 2 is used to UTF8) and placed in the data portion of the Block. Part 2 is used to
set the timestamp of the Block, and BlockDuration element. Nothing set the timestamp of the Block, and BlockDuration element. Nothing
else is used. else is used.
Here is an example SRT file: Here is an example SRT file:
1 1
00:02:17,440 --> 00:02:20,375 00:02:17,440 --> 00:02:20,375
Senator, we're making Senator, we're making
our final approach into Coruscant. our final approach into Coruscant.
2 2
00:02:20,476 --> 00:02:22,501 00:02:20,476 --> 00:02:22,501
Very good, Lieutenant. Very good, Lieutenant.
In this example, the text "Senator, we're making our final approach In this example, the text "Senator, we're making our final approach
into Coruscant." would be converted into UTF-8 and placed in the into Coruscant." would be converted into UTF-8 and placed in the
Block. The timestamp of the block would be set to "00:02:17,440". Block. The timestamp of the block would be set to "00:02:17,440".
And the BlockDuration element would be set to "00:00:02,935". And the BlockDuration element would be set to "00:00:02,935".
The same is repeated for the next subtitle. The same is repeated for the next subtitle.
Because there are no general settings for SRT, the CodecPrivate is Because there are no general settings for SRT, the CodecPrivate is
left blank. left blank.
7.3. SSA/ASS Subtitles 7.3. SSA/ASS Subtitles
SSA stands for Sub Station Alpha. It's the file format used by the SSA stands for Sub Station Alpha. It's the file format used by the
popular subtitle editor, SubStation Alpha [35]. This format is popular subtitle editor, SubStation Alpha (http://wiki.multimedia.cx/
widely used by fansubbers. index.php?title=SubStation_Alpha). This format is widely used by
fansubbers.
It allows you to do some advanced display features, like positioning, It allows you to do some advanced display features, like positioning,
karaoke, style managements... karaoke, style managements...
For detailed information on SSA/ASS, see the SSA specs [36]. It For detailed information on SSA/ASS, see the SSA specs
includes an SSA specs description and the advanced features added by (http://moodub.free.fr/video/ass-specs.doc). It includes an SSA
ASS format (standing for Advanced SSA). Because SSA and ASS are so specs description and the advanced features added by ASS format
similar, they are treated the same here. (standing for Advanced SSA). Because SSA and ASS are so similar,
they are treated the same here.
Like SRT, this format is text based with a particular syntax. Like SRT, this format is text based with a particular syntax.
A file consists of 4 or 5 parts, declared ala INI file (but it's not A file consists of 4 or 5 parts, declared ala INI file (but it's not
an INI !) an INI !)
The first, "[Script Info]" contains some information about the The first, "[Script Info]" contains some information about the
subtitle file, such as it's title, who created it, type of script and subtitle file, such as it's title, who created it, type of script and
a very important one : "PlayResY". Be careful of this value, a very important one : "PlayResY". Be careful of this value,
everything in your script (font size, positioning) is scaled by it. everything in your script (font size, positioning) is scaled by it.
skipping to change at page 32, line 11 skipping to change at page 34, line 13
value, so if a friend with a large monitor and a high screen value, so if a friend with a large monitor and a high screen
resolution gives you an edited script, you can mess everything up by resolution gives you an edited script, you can mess everything up by
saving the script in SSA with your low-cost monitor. saving the script in SSA with your low-cost monitor.
The second, "[V4 Styles]", is a list of style definitions. A style The second, "[V4 Styles]", is a list of style definitions. A style
describe how will look a text on the screen. It defines font, font describe how will look a text on the screen. It defines font, font
size, primary/.../outile colour, position, alignment, etc. size, primary/.../outile colour, position, alignment, etc.
For example this : For example this :
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, TertiaryColour, BackColour, Bold, Italic, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, Encoding Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, \
Style: Wolf main,Wolf_Rain,56,15724527,15724527,15724527,4144959,0,0,1,1,2,2,5,5,30,0,0 TertiaryColour, BackColour, Bold, Italic, BorderStyle, Outline, \
Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, Encoding
Style: Wolf main,Wolf_Rain,56,15724527,15724527,15724527,4144959,0,\
0,1,1,2,2,5,5,30,0,0
The third, "[Events]", is the list of text you want to display at the The third, "[Events]", is the list of text you want to display at the
right timing. You can specify some attribute here. Like the style right timing. You can specify some attribute here. Like the style
to use for this event (MUST be defined in the list), the position of to use for this event (MUST be defined in the list), the position of
the text (Left, Right, Vertical Margin), an effect. Name is mostly the text (Left, Right, Vertical Margin), an effect. Name is mostly
used by translator to know who said this sentence. Timing is in used by translator to know who said this sentence. Timing is in
h:mm:ss.cc (centisec). h:mm:ss.cc (centisec).
Format: Marked, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Format: Marked, Start, End, Style, Name, MarginL, MarginR, MarginV, \
Dialogue: Marked=0,0:02:40.65,0:02:41.79,Wolf main,Cher,0000,0000,0000,,Et les enregistrements de ses ondes delta ? Effect, Text
Dialogue: Marked=0,0:02:42.42,0:02:44.15,Wolf main,autre,0000,0000,0000,,Toujours rien. Dialogue: Marked=0,0:02:40.65,0:02:41.79,Wolf main,Cher,0000,0000,\
0000,,Et les enregistrements de ses ondes delta ?
Dialogue: Marked=0,0:02:42.42,0:02:44.15,Wolf main,autre,0000,0000,\
0000,,Toujours rien.
"[Pictures]" or "[Fonts]" part can be found in some SSA file, they "[Pictures]" or "[Fonts]" part can be found in some SSA file, they
contains UUE-encoded pictures/font but those features are only used contains UUE-encoded pictures/font but those features are only used
by Sub Station Alpha, i.e. no filter (Vobsub/Avery Lee Subtiler by Sub Station Alpha, i.e. no filter (Vobsub/Avery Lee Subtiler
filter) use them. filter) use them.
Now, how are they stored in Matroska ? Now, how are they stored in Matroska ?
o All text is converted to UTF-8* All the headers are stored in * All text is converted to UTF-8* All the headers are stored in
CodecPrivate ( Script Info and the Styles list)* Start & End field CodecPrivate ( Script Info and the Styles list)* Start & End field
are used to set TimeStamp and the BlockDuration element. the data are used to set TimeStamp and the BlockDuration element. the data
stored is :* Events are stored in the Block in this order: stored is :* Events are stored in the Block in this order:
ReadOrder, Layer, Style, Name, MarginL, MarginR, MarginV, Effect, ReadOrder, Layer, Style, Name, MarginL, MarginR, MarginV, Effect,
Text (Layer comes from ASS specs ... it's empty for SSA.) Text (Layer comes from ASS specs ... it's empty for SSA.)
"ReadOrder field is needed for the decoder to be able to reorder "ReadOrder field is needed for the decoder to be able to reorder
the streamed samples as they were placed originally in the file." the streamed samples as they were placed originally in the file."
Here is an example of an SSA file. Here is an example of an SSA file.
[Script Info] [Script Info]
; This is a Sub Station Alpha v4 script. ; This is a Sub Station Alpha v4 script.
; For Sub Station Alpha info and downloads, ; For Sub Station Alpha info and downloads,
; go to [http://www.eswat.demon.co.uk/](http://www.eswat.demon.co.uk/) ; go to \
; or email [kotus@eswat.demon.co.uk](mailto:kotus@eswat.demon.co.uk) ; [http://www.eswat.demon.co.uk/](http://www.eswat.demon.co.uk/)
Title: Wolf's rain 2 ; or email \
Original Script: Anime-spirit Ishin-francais ; [kotus@eswat.demon.co.uk](mailto:kotus@eswat.demon.co.uk)
Original Translation: Coolman Title: Wolf's rain 2
Original Editing: Spikewolfwood Original Script: Anime-spirit Ishin-francais
Original Timing: Lord_alucard Original Translation: Coolman
Original Script Checking: Spikewolfwood Original Editing: Spikewolfwood
ScriptType: v4.00 Original Timing: Lord_alucard
Collisions: Normal Original Script Checking: Spikewolfwood
PlayResY: 1024 ScriptType: v4.00
PlayDepth: 0 Collisions: Normal
Wav: 0, 128697,D:\Alex\Anime\- Fansub -\- TAFF -\Wolf's Rain\WR_-_02_Wav.wav PlayResY: 1024
Wav: 0, 120692,H:\team truc\WR_-_02.wav PlayDepth: 0
Wav: 0, 116504,E:\sub\wolf's_rain\WOLF'S RAIN 02.wav Wav: 0, 128697,D:\Alex\Anime\- Fansub -\- TAFF -\WR_-_02_Wav.wav
LastWav: 3 Wav: 0, 120692,H:\team truc\WR_-_02.wav
Timer: 100,0000 Wav: 0, 116504,E:\sub\wolf's_rain\WOLF'S RAIN 02.wav
LastWav: 3
Timer: 100,0000
[V4 Styles] [V4 Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, TertiaryColour, BackColour, Bold, Italic, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, Encoding Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, \
Style: Default,Arial,20,65535,65535,65535,-2147483640,-1,0,1,3,0,2,30,30,30,0,0 TertiaryColour, BackColour, Bold, Italic, BorderStyle, Outline, \
Style: Titre_episode,Akbar,140,15724527,65535,65535,986895,-1,0,1,1,0,3,30,30,30,0,0 Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, Encoding
Style: Wolf main,Wolf_Rain,56,15724527,15724527,15724527,4144959,0,0,1,1,2,2,5,5,30,0,0 Style: Default,Arial,20,65535,65535,65535,-2147483640,-1,0,1,3,0,2,\
30,30,30,0,0
Style: Titre_episode,Akbar,140,15724527,65535,65535,986895,-1,0,1,1,\
0,3,30,30,30,0,0
Style: Wolf main,Wolf_Rain,56,15724527,15724527,15724527,4144959,0,\
0,1,1,2,2,5,5,30,0,0
[Events] [Events]
Format: Marked, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Format: Marked, Start, End, Style, Name, MarginL, MarginR, MarginV, \
Dialogue: Marked=0,0:02:40.65,0:02:41.79,Wolf main,Cher,0000,0000,0000,,Et les enregistrements de ses ondes delta ? Effect, Text
Dialogue: Marked=0,0:02:42.42,0:02:44.15,Wolf main,autre,0000,0000,0000,,Toujours rien. Dialogue: Marked=0,0:02:40.65,0:02:41.79,Wolf main,Cher,0000,0000,\
0000,,Et les enregistrements de ses ondes delta ?
Dialogue: Marked=0,0:02:42.42,0:02:44.15,Wolf main,autre,0000,0000,\
0000,,Toujours rien.
Here is what would be placed into the CodecPrivate element. Here is what would be placed into the CodecPrivate element.
[Script Info] [Script Info]
; This is a Sub Station Alpha v4 script. ; This is a Sub Station Alpha v4 script.
; For Sub Station Alpha info and downloads, ; For Sub Station Alpha info and downloads,
; go to [http://www.eswat.demon.co.uk/](http://www.eswat.demon.co.uk/) ; go to \
; or email [kotus@eswat.demon.co.uk](mailto:kotus@eswat.demon.co.uk) ; [http://www.eswat.demon.co.uk/](http://www.eswat.demon.co.uk/)
Title: Wolf's rain 2 ; or email \
Original Script: Anime-spirit Ishin-francais ; [kotus@eswat.demon.co.uk](mailto:kotus@eswat.demon.co.uk)
Original Translation: Coolman Title: Wolf's rain 2
Original Editing: Spikewolfwood Original Script: Anime-spirit Ishin-francais
Original Timing: Lord_alucard Original Translation: Coolman
Original Script Checking: Spikewolfwood Original Editing: Spikewolfwood
ScriptType: v4.00 Original Timing: Lord_alucard
Collisions: Normal Original Script Checking: Spikewolfwood
PlayResY: 1024 ScriptType: v4.00
PlayDepth: 0 Collisions: Normal
Wav: 0, 128697,D:\Alex\Anime\- Fansub -\- TAFF -\Wolf's Rain\WR_-_02_Wav.wav PlayResY: 1024
Wav: 0, 120692,H:\team truc\WR_-_02.wav PlayDepth: 0
Wav: 0, 116504,E:\sub\wolf's_rain\WOLF'S RAIN 02.wav Wav: 0, 128697,D:\Alex\Anime\- Fansub -\- TAFF -\WR_-_02_Wav.wav
LastWav: 3 Wav: 0, 120692,H:\team truc\WR_-_02.wav
Timer: 100,0000 Wav: 0, 116504,E:\sub\wolf's_rain\WOLF'S RAIN 02.wav
LastWav: 3
Timer: 100,0000
[V4 Styles] [V4 Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, TertiaryColour, BackColour, Bold, Italic, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, Encoding Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, \
Style: Default,Arial,20,65535,65535,65535,-2147483640,-1,0,1,3,0,2,30,30,30,0,0 TertiaryColour, BackColour, Bold, Italic, BorderStyle, Outline, \
Style: Titre_episode,Akbar,140,15724527,65535,65535,986895,-1,0,1,1,0,3,30,30,30,0,0 Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, Encoding
Style: Wolf main,Wolf_Rain,56,15724527,15724527,15724527,4144959,0,0,1,1,2,2,5,5,30,0,0 Style: Default,Arial,20,65535,65535,65535,-2147483640,-1,0,1,3,0,2,\
30,30,30,0,0
Style: Titre_episode,Akbar,140,15724527,65535,65535,986895,-1,0,1,1,\
0,3,30,30,30,0,0
Style: Wolf main,Wolf_Rain,56,15724527,15724527,15724527,4144959,0,\
0,1,1,2,2,5,5,30,0,0
And here are the two blocks that would be generated. And here are the two blocks that would be generated.
Block's timestamp: 00:02:40.650 BlockDuration: 00:00:01.140 Block's timestamp: 00:02:40.650 BlockDuration: 00:00:01.140
1,,Wolf main,Cher,0000,0000,0000,,Et les enregistrements de ses ondes delta ? 1,,Wolf main,Cher,0000,0000,0000,,Et les enregistrements de ses \
ondes delta ?
Block's timestamp: 00:02:42.420 BlockDuration: 00:00:01.730 Block's timestamp: 00:02:42.420 BlockDuration: 00:00:01.730
2,,Wolf main,autre,0000,0000,0000,,Toujours rien. 2,,Wolf main,autre,0000,0000,0000,,Toujours rien.
7.4. USF Subtitles 7.4. USF Subtitles
Under construction Under construction
7.5. WebVTT 7.5. WebVTT
The "Web Video Text Tracks Format" (short: WebVTT) is developed by The "Web Video Text Tracks Format" (short: WebVTT) is developed by
the World Wide Web Consortium (W3C) [37]. Its specifications are the World Wide Web Consortium (W3C) (https://www.w3.org/). Its
freely available [38]. specifications are freely available (https://w3c.github.io/webvtt/).
The guiding principles for the storage of WebVTT in Matroska are: The guiding principles for the storage of WebVTT in Matroska are:
o Consistency: store data in a similar way to other subtitle codecs * Consistency: store data in a similar way to other subtitle codecs
o Simplicity: making decoding and remuxing as easy as possible for * Simplicity: making decoding and remuxing as easy as possible for
existing infrastructures existing infrastructures
o Completeness: keeping as much data as possible from the original * Completeness: keeping as much data as possible from the original
WebVTT file WebVTT file
7.5.1. Storage of WebVTT in Matroska 7.5.1. Storage of WebVTT in Matroska
7.5.1.1. CodecID: codec identification 7.5.1.1. CodecID: codec identification
The CodecID to use is "S_TEXT/WEBVTT". The CodecID to use is "S_TEXT/WEBVTT".
7.5.1.2. CodecPrivate: storage of global WebVTT blocks 7.5.1.2. CodecPrivate: storage of global WebVTT blocks
skipping to change at page 37, line 5 skipping to change at page 38, line 41
Identifier, Cue Comments) MUST be assumed to be absent. Identifier, Cue Comments) MUST be assumed to be absent.
7.5.2. Examples of transformation 7.5.2. Examples of transformation
Here's an example how a WebVTT is transformed. Here's an example how a WebVTT is transformed.
7.5.2.1. Example WebVTT file 7.5.2.1. Example WebVTT file
Let's take the following example file: Let's take the following example file:
WEBVTT with text after the signature WEBVTT with text after the signature
STYLE STYLE
::cue { ::cue {
background-image: linear-gradient(to bottom, dimgray, lightgray); background-image: linear-gradient(to bottom, dimgray, lightgray);
color: papayawhip; color: papayawhip;
} }
/* Style blocks cannot use blank lines nor "dash dash greater than" */ /* Style blocks cannot use blank lines nor "dash dash greater \
than" */
NOTE comment blocks can be used between style blocks. NOTE comment blocks can be used between style blocks.
STYLE STYLE
::cue(b) { ::cue(b) {
color: peachpuff; color: peachpuff;
} }
REGION REGION
id:bill id:bill
width:40% width:40%
lines:3 lines:3
regionanchor:0%,100% regionanchor:0%,100%
viewportanchor:10%,90% viewportanchor:10%,90%
scroll:up scroll:up
NOTE NOTE
Notes always span a whole block and can cover multiple Notes always span a whole block and can cover multiple
lines. Like this one. lines. Like this one.
An empty line ends the block. An empty line ends the block.
hello hello
00:00:00.000 --> 00:00:10.000 00:00:00.000 --> 00:00:10.000
Example entry 1: Hello <b>world</b>. Example entry 1: Hello <b>world</b>.
NOTE style blocks cannot appear after the first cue. NOTE style blocks cannot appear after the first cue.
00:00:25.000 --> 00:00:35.000 00:00:25.000 --> 00:00:35.000
Example entry 2: Another entry. Example entry 2: Another entry.
This one has multiple lines. This one has multiple lines.
00:01:03.000 --> 00:01:06.500 position:90% align:right size:35% 00:01:03.000 --> 00:01:06.500 position:90% align:right size:35%
Example entry 3: That stuff to the right of the timestamps are cue settings. Example entry 3: That stuff to the right of the timestamps are cue \
settings.
00:03:10.000 --> 00:03:20.000 00:03:10.000 --> 00:03:20.000
Example entry 4: Entries can even include timestamps. Example entry 4: Entries can even include timestamps.
For example:<00:03:15.000>This becomes visible five seconds For example:<00:03:15.000>This becomes visible five seconds
after the first part. after the first part.
7.5.2.2. Example of CodecPrivate 7.5.2.2. Example of CodecPrivate
The resulting CodecPrivate element will look like this: The resulting CodecPrivate element will look like this:
WEBVTT with text after the signature WEBVTT with text after the signature
STYLE STYLE
::cue { ::cue {
background-image: linear-gradient(to bottom, dimgray, lightgray); background-image: linear-gradient(to bottom, dimgray, lightgray);
color: papayawhip; color: papayawhip;
} }
/* Style blocks cannot use blank lines nor "dash dash greater than" */ /* Style blocks cannot use blank lines nor "dash dash greater \
than" */
NOTE comment blocks can be used between style blocks. NOTE comment blocks can be used between style blocks.
STYLE STYLE
::cue(b) { ::cue(b) {
color: peachpuff; color: peachpuff;
} }
REGION REGION
id:bill id:bill
width:40% width:40%
lines:3 lines:3
regionanchor:0%,100% regionanchor:0%,100%
viewportanchor:10%,90% viewportanchor:10%,90%
scroll:up scroll:up
NOTE NOTE
Notes always span a whole block and can cover multiple Notes always span a whole block and can cover multiple
lines. Like this one. lines. Like this one.
An empty line ends the block. An empty line ends the block.
7.5.2.3. Storage of Cue 1 7.5.2.3. Storage of Cue 1
Example Cue 1: timestamp 00:00:00.000, duration 00:00:10.000, Block's Example Cue 1: timestamp 00:00:00.000, duration 00:00:10.000, Block's
content: content:
Example entry 1: Hello <b>world</b>. Example entry 1: Hello <b>world</b>.
BlockAddition's content starts with one empty line as there's no Cue BlockAddition's content starts with one empty line as there's no Cue
Settings List: Settings List:
hello hello
7.5.2.4. Storage of Cue 2 7.5.2.4. Storage of Cue 2
Example Cue 2: timestamp 00:00:25.000, duration 00:00:10.000, Block's Example Cue 2: timestamp 00:00:25.000, duration 00:00:10.000, Block's
content: content:
Example entry 2: Another entry. Example entry 2: Another entry.
This one has multiple lines. This one has multiple lines.
BlockAddition's content starts with two empty lines as there's BlockAddition's content starts with two empty lines as there's
neither a Cue Settings List nor a Cue Identifier: neither a Cue Settings List nor a Cue Identifier:
NOTE style blocks cannot appear after the first cue. NOTE style blocks cannot appear after the first cue.
7.5.2.5. Storage of Cue 3 7.5.2.5. Storage of Cue 3
Example Cue 3: timestamp 00:01:03.000, duration 00:00:03.500, Block's Example Cue 3: timestamp 00:01:03.000, duration 00:00:03.500, Block's
content: content:
Example entry 3: That stuff to the right of the timestamps are cue settings. Example entry 3: That stuff to the right of the timestamps are cue \
settings.
BlockAddition's content ends with an empty line as there's no Cue BlockAddition's content ends with an empty line as there's no Cue
Identifier and there were no WebVTT Comment blocks: Identifier and there were no WebVTT Comment blocks:
position:90% align:right size:35% position:90% align:right size:35%
7.5.2.6. Storage of Cue 4 7.5.2.6. Storage of Cue 4
Example Cue 4: timestamp 00:03:10.000, duration 00:00:10.000, Block's Example Cue 4: timestamp 00:03:10.000, duration 00:00:10.000, Block's
content: content:
Example entry 4: Entries can even include timestamps. For Example entry 4: Entries can even include timestamps. For
example:<00:00:05.000>This becomes visible five seconds after the example:00:00:05.000 (00:00:05.000)This becomes visible five seconds
first part. after the first part.
This Block does not need a BlockAddition as the Cue did not contain This Block does not need a BlockAddition as the Cue did not contain
an Identifier, nor a Settings List, and it wasn't preceded by Comment an Identifier, nor a Settings List, and it wasn't preceded by Comment
blocks. blocks.
7.5.3. Storage of WebVTT in Matroska vs. WebM 7.5.3. Storage of WebVTT in Matroska vs. WebM
Note: the storage of WebVTT in Matroska is not the same as the design Note: the storage of WebVTT in Matroska is not the same as the design
document for storage of WebVTT in WebM. There are several reasons document for storage of WebVTT in WebM. There are several reasons
for this including but not limited to: the WebM document is old (from for this including but not limited to: the WebM document is old (from
February 2012) and was based on an earlier draft of WebVTT and February 2012) and was based on an earlier draft of WebVTT and
ignores several parts that were added to WebVTT later; WebM does ignores several parts that were added to WebVTT later; WebM does
still not support subtitles at all [39]; the proposal suggests still not support subtitles at all (http://www.webmproject.org/docs/
splitting the information across multiple tracks making demuxer's and container/); the proposal suggests splitting the information across
remuxer's life very difficult. multiple tracks making demuxer's and remuxer's life very difficult.
7.6. HDMV presentation graphics subtitles 7.6. HDMV presentation graphics subtitles
The specifications for the HDMV presentation graphics subtitle format The specifications for the HDMV presentation graphics subtitle format
(short: HDMV PGS) can be found in the document "Blu-ray Disc Read- (short: HDMV PGS) can be found in the document "Blu-ray Disc Read-
Only Format; Part 3 -- Audio Visual Basic Specifications" in section Only Format; Part 3 -- Audio Visual Basic Specifications" in section
9.14 "HDMV graphics streams". 9.14 "HDMV graphics streams".
7.6.1. Storage of HDMV presentation graphics subtitles 7.6.1. Storage of HDMV presentation graphics subtitles
skipping to change at page 42, line 16 skipping to change at page 44, line 16
7.8.1.1. CodecID 7.8.1.1. CodecID
The CodecID to use is "S_DVBSUB". The CodecID to use is "S_DVBSUB".
7.8.1.2. CodecPrivate 7.8.1.2. CodecPrivate
The CodecPrivate element is five bytes long and has the following The CodecPrivate element is five bytes long and has the following
structure: structure:
o 2 bytes: composition page ID (bit string, left bit first) * 2 bytes: composition page ID (bit string, left bit first)
o 2 bytes: ancillary page ID (bit string, left bit first) * 2 bytes: ancillary page ID (bit string, left bit first)
o 1 byte: subtitling type (bit string, left bit first) * 1 byte: subtitling type (bit string, left bit first)
The semantics of these bytes are the same as the ones described in The semantics of these bytes are the same as the ones described in
section 6.2.41 "Subtitling descriptor" of ETSI EN 300 468. section 6.2.41 "Subtitling descriptor" of ETSI EN 300 468.
7.8.1.3. Storage of DVB subtitles in Matroska Blocks 7.8.1.3. Storage of DVB subtitles in Matroska Blocks
Each Matroska Block consists of one or more DVB Subtitle Segments as Each Matroska Block consists of one or more DVB Subtitle Segments as
described in segment 7.2 "Syntax and semantics of the subtitling described in segment 7.2 "Syntax and semantics of the subtitling
segment" of ETSI EN 300 743. segment" of ETSI EN 300 743.
Each Matroska Block SHOULD have a Duration indicating how long the Each Matroska Block SHOULD have a Duration indicating how long the
DVB Subtitle Segments in that Block SHOULD be displayed. DVB Subtitle Segments in that Block SHOULD be displayed.
8. References 8. Block Additional Mapping
8.1. Normative References Extra data or metadata can be added to each "Block" using
"BlockAdditional" data. Each "BlockAdditional" contains a
"BlockAddID" that identifies the kind of data it contains. When the
"BlockAddID" is set to "1" the contents of the "BlockAdditional
Element" are define by the Codec Mappings defines (see
Section 6.1.5). When the "BlockAddID" is set a value greater than
"1", then the contents of the "BlockAdditional Element" are defined
by the "BlockAdditionalMapping Element" within the associated "Track
Element" where the "BlockAddID Element" of "BlockAdditional Element"
equals the "BlockAddIDValue" of the associated Track's
"BlockAdditionalMapping Element". That "BlockAdditionalMapping
Element" then identifies a particular Block Additional Mapping by the
"BlockAddIDType".
[IEEE.754.1985] The following XML depicts a use of a Block Additional Mapping to
Institute of Electrical and Electronics Engineers, associate a timecode value with a "Block":
"Standard for Binary Floating-Point Arithmetic",
IEEE Standard 754, August 1985. <Segment> <!--Mandatory elements ommitted for readability--> <Tracks> <TrackEntry> <TrackNumber>1</TrackNumber> <TrackUID>568001708</TrackUID> <TrackType>1</TrackType> <BlockAdditionalMapping> <BlockAddIDValue>2</BlockAddIDValue><!--arbitrary value used in BlockAddID--> <BlockAddIDName>timecode</BlockAddIDName> <BlockAddIDType>12</BlockAddIDType> </BlockAdditionalMapping> <CodecID>V_FFV1</CodecID> <Video> <PixelWidth>1920</PixelWidth> <PixelHeight>1080</PixelHeight> </Video> </TrackEntry> </Tracks> <Cluster> <Timestamp>3000</Timestamp> <BlockGroup> <Block>{binary video frame}</Block> <BlockAdditions> <BlockMore> <BlockAddID>2</BlockAddID><!--arbitrary value from BlockAdditionalMapping--> <BlockAdditional>01:00:00:00</BlockAdditional> </BlockMore> </BlockAdditions> </BlockGroup> </Cluster> </Segment>
Block Additional Mappings detail how additional data MAY be stored in
the "BlockMore Element" with a "BlockAdditionMapping Element" within
the "Track Element" which identifies the "BlockAdditional" content.
Block Additional Mappings define the "BlockAddIDType" value reserved
to identify that type of data as well as providing an optional label
stored within the "BlockAddIDName Element". When the Block
Additional Mapping is dependent on additional contextual information
then the Mapping SHOULD describe how such additional contextual
information is stored within the "BlockAddIDExtraData Element".
The following Block Additional Mappings are defined.
9. Normative References
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
May 2017, <https://www.rfc-editor.org/info/rfc8174>.
[RFC3339] Klyne, G. and C. Newman, "Date and Time on the Internet: [RFC3339] Klyne, G. and C. Newman, "Date and Time on the Internet:
Timestamps", RFC 3339, DOI 10.17487/RFC3339, July 2002, Timestamps", RFC 3339, DOI 10.17487/RFC3339, July 2002,
<https://www.rfc-editor.org/info/rfc3339>. <https://www.rfc-editor.org/info/rfc3339>.
[RFC6386] Bankoski, J., Koleszar, J., Quillio, L., Salonen, J.,
Wilkins, P., and Y. Xu, "VP8 Data Format and Decoding
Guide", RFC 6386, DOI 10.17487/RFC6386, November 2011,
<https://www.rfc-editor.org/info/rfc6386>.
[RFC6648] Saint-Andre, P., Crocker, D., and M. Nottingham, [RFC6648] Saint-Andre, P., Crocker, D., and M. Nottingham,
"Deprecating the "X-" Prefix and Similar Constructs in "Deprecating the "X-" Prefix and Similar Constructs in
Application Protocols", BCP 178, RFC 6648, Application Protocols", BCP 178, RFC 6648,
DOI 10.17487/RFC6648, June 2012, DOI 10.17487/RFC6648, June 2012,
<https://www.rfc-editor.org/info/rfc6648>. <https://www.rfc-editor.org/info/rfc6648>.
8.2. URIs [RFC6386] Bankoski, J., Koleszar, J., Quillio, L., Salonen, J.,
Wilkins, P., and Y. Xu, "VP8 Data Format and Decoding
[1] https://datatracker.ietf.org/wg/cellar/charter/ Guide", RFC 6386, DOI 10.17487/RFC6386, November 2011,
<https://www.rfc-editor.org/info/rfc6386>.
[2] https://tools.ietf.org/html/rfc2119
[3] https://msdn.microsoft.com/en-us/library/windows/desktop/
dd318229(v=vs.85).aspx
[4] https://github.com/mbunkus/mkvtoolnix/blob/master/lib/librmff/
librmff.h
[5] https://github.com/mbunkus/mkvtoolnix/blob/master/lib/librmff/
librmff.h
[6] https://github.com/mbunkus/mkvtoolnix/blob/master/lib/librmff/
librmff.h
[7] https://github.com/mbunkus/mkvtoolnix/blob/master/lib/librmff/
librmff.h
[8] https://developer.apple.com/library/mac/documentation/QuickTime/
QTFF/QTFFPreface/qtffPreface.html
[9] http://www.theora.org/doc/Theora.pdf
[10] http://wiki.multimedia.cx/
index.php?title=Apple_ProRes#Frame_layout
[11] https://www.webmproject.org/vp9/
[12] https://datatracker.ietf.org/doc/draft-ietf-cellar-ffv1/
[13] http://alac.macosforge.org/trac/browser/trunk/
ALACMagicCookieDescription.txt
[14] https://xiph.org/vorbis/doc/Vorbis_I_spec.html
[15] https://xiph.org/vorbis/doc/v-comment.html
[16] https://xiph.org/vorbis/doc/Vorbis_I_spec.html
[17] http://flac.sourceforge.net/
[18] https://github.com/mbunkus/mkvtoolnix/blob/master/lib/librmff/
librmff.h
[19] https://github.com/mbunkus/mkvtoolnix/blob/master/lib/librmff/
librmff.h
[20] https://github.com/mbunkus/mkvtoolnix/blob/master/lib/librmff/
librmff.h
[21] https://github.com/mbunkus/mkvtoolnix/blob/master/lib/librmff/
librmff.h
[22] https://github.com/mbunkus/mkvtoolnix/blob/master/lib/librmff/
librmff.h
[23] https://github.com/mbunkus/mkvtoolnix/blob/master/lib/librmff/
librmff.h
[24] http://msdn.microsoft.com/library/default.asp?url=/library/en-
us/multimed/mmstr_625u.asp
[25] https://developer.apple.com/library/mac/documentation/QuickTime/
QTFF/QTFFPreface/qtffPreface.html
[26] https://developer.apple.com/library/mac/documentation/QuickTime/
QTFF/QTFFPreface/qtffPreface.html
[27] https://developer.apple.com/library/mac/documentation/QuickTime/
QTFF/QTFFPreface/qtffPreface.html
[28] http://tausoft.org/
[29] http://tausoft.org/wiki/True_Audio_Codec_Format
[30] http://www.wavpack.com/
[31] wavpack.html
[32] http://wiki.xiph.org/index.php/OggKate#Matroska_mapping
[33] http://dvd.sourceforge.net/dvdinfo/pci_pkt.html
[34] http://dvd.sourceforge.net/dvdinfo/pci_pkt.html
[35] http://wiki.multimedia.cx/index.php?title=SubStation_Alpha
[36] http://moodub.free.fr/video/ass-specs.doc
[37] https://www.w3.org/
[38] https://w3c.github.io/webvtt/ [IEEE.754.1985]
Institute of Electrical and Electronics Engineers,
"Standard for Binary Floating-Point Arithmetic", August
1985.
[39] http://www.webmproject.org/docs/container/ [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997,
<https://www.rfc-editor.org/info/rfc2119>.
Authors' Addresses Authors' Addresses
Steve Lhomme Steve Lhomme
Email: slhomme@matroska.org Email: slhomme@matroska.org
Moritz Bunkus Moritz Bunkus
Email: moritz@bunkus.org Email: moritz@bunkus.org
Dave Rice Dave Rice
 End of changes. 150 change blocks. 
560 lines changed or deleted 625 lines changed or added

This html diff was produced by rfcdiff 1.47. The latest version is available from http://tools.ietf.org/tools/rfcdiff/