Re: Extract untouched audio track from mkv/webm programatically

Róbert Kohányi <[email protected]> Tue, 12 Mar 2013 19:02:08 +0100
Newsgroups gmane.comp.multimedia.matroska.user
Message-ID <CABFab9dObCn3-YSh7UJAujf61ru3eQ9pjCWU6g-A__mdgSiioA@mail.gmail.com>
Thanks for the thorough answer, I'll look into all of these when I get the
chance.


On Tue, Mar 12, 2013 at 6:38 PM, Moritz Bunkus <[email protected]> wrote:

> Hey,
>
> On Tue, Mar 12, 2013 at 6:24 PM, Róbert Kohányi
> <[email protected]> wrote:
>
> > Now, this is the point where I'm stuck. I've read the
> manual/specification
> > for EBML but I'm not sure if I got it right. As I understood it the
> actual
> > data (video and/or audio) are located *inside* the Cluster element,
>
> Correct so far, but there can be an unlimited number of cluster
> elements, not just one.
>
> > How can I identify the Block/SimpleBlock elements belonging to a
> particular
> > TrackEntry?
>
> The SimpleBlock and Block structures are not EBML master elements with
> child elements (simply due to the overhead that would incur). Their
> binary structure is described in the Matroska specifications here[1]
> for SimpleBlocks and here[2] for Blocks. Code that reads both
> structures can be found in libmatroska[4].
>
> The SimpleBlock and BlockGroup binary structures do indeed contain a
> track number which corresponds to the "TrackNumber" child element of a
> TrackEntry structure.
>
> > But, let's say I've found all the Block/SimpleBlock elements that belong
> to
> > a single audio ogg vorbis audio track. Can I just *append* these after
> each
> > other and be done with it?
>
> For Vorbis? No. You'll have to frame them in Ogg packets.
>
> For an idea how that is usually done: mkvextract contains code[3] just
> for this. However, it does use libvorbis & libogg from
> http://www.xiph.org for this purpose. If you cannot use those
> libraries you'll have to write the Ogg framing yourself. You should
> get help for that elsewhere, though, where there are more Ogg experst
> ;) (Xiph has mailing lists for Vorbis)
>
> Kind regards,
> mosu
>
> [1]
> http://www.matroska.org/technical/specs/index.html#simpleblock_structure
> [2] http://www.matroska.org/technical/specs/index.html#block_structure
> [3]
> https://github.com/mbunkus/mkvtoolnix/blob/master/src/extract/xtr_ogg.cpp#L69
> for the header pages and
>
> https://github.com/mbunkus/mkvtoolnix/blob/master/src/extract/xtr_ogg.cpp#L184
> for how a single frame would be written
> [4]
> https://github.com/Matroska-Org/libmatroska/blob/master/src/KaxBlock.cpp#L414
> reads the "head" of the Block/SimpleBlock structure, the frames
> contained therein are read starting from
>
> https://github.com/Matroska-Org/libmatroska/blob/master/src/KaxBlock.cpp#L450
> _______________________________________________
> Matroska-users mailing list
> [email protected]
> http://lists.matroska.org/cgi-bin/mailman/listinfo/matroska-users
> Read Matroska-Users on GMane:
> http://dir.gmane.org/gmane.comp.multimedia.matroska.user
>

_______________________________________________
Matroska-users mailing list
[email protected]
http://lists.matroska.org/cgi-bin/mailman/listinfo/matroska-users
Read Matroska-Users on GMane: http://dir.gmane.org/gmane.comp.multimedia.matroska.user