it-swarm-eu.dev

Každý, kdo zná strukturu dat mp4?

Kde ve struktuře mp4 souboru je doba trvání?

32
Tom Brito

To nemusí být odpověď na váš problém, ale mělo to být: http://mediainfo.sourceforge.net/

(Má knihovnu a je to open source, takže stačí zkontrolovat, které části potřebujete)

13
Camilo Martin

Viz https://github.com/sannies/mp4parser project. Jedná se o knihovnu Java, která zobrazuje strukturu souborů mp4.

8
Aftershock

Pokud vím - kontejner "mp4" je odvozen od struktury atomů QuickTime. Můžete si přečíst popis formátu souboru QuickTime.

Analyzování quicktime atomů není velký problém (podívejte se na atomicParsley project ). Nejsem si jistý, pro MP4, ale jako pro MOV-soubory - tam je "trvání" pole v "mvhd" (film záhlaví) atom a také v "tkhd" (záhlaví stopy) atom. Tato doba je obvykle počet snímků vynásobených atributem "time scale". Časové měřítko lze nalézt ve stejných atomech.

6
2can

Pro čtečku Red5 MP4 jsem použil atom "mvhd", protože obsahuje pole času i trvání. Získání doby trvání od atomu se bude lišit podle použité verze, níže je uveden příklad:

public long create_full_atom(MP4DataStream bitstream) throws IOException {
    long value = bitstream.readBytes(4);
    version = (int)value >> 24;
    flags = (int)value & 0xffffff;
    readed += 4;
    return readed;
}

public long create_movie_header_atom(MP4DataStream bitstream) throws IOException { create_full_atom(bitstream); if (version == 1) { creationTime = createDate(bitstream.readBytes(8)); modificationTime = createDate(bitstream.readBytes(8)); timeScale = (int)bitstream.readBytes(4); duration = bitstream.readBytes(8); readed += 28; } else { creationTime = createDate(bitstream.readBytes(4)); modificationTime = createDate(bitstream.readBytes(4)); timeScale = (int)bitstream.readBytes(4); duration = bitstream.readBytes(4); readed += 16; } int qt_preferredRate = (int)bitstream.readBytes(4); int qt_preferredVolume = (int)bitstream.readBytes(2); bitstream.skipBytes(10); long qt_matrixA = bitstream.readBytes(4); long qt_matrixB = bitstream.readBytes(4); long qt_matrixU = bitstream.readBytes(4); long qt_matrixC = bitstream.readBytes(4); long qt_matrixD = bitstream.readBytes(4); long qt_matrixV = bitstream.readBytes(4); long qt_matrixX = bitstream.readBytes(4); long qt_matrixY = bitstream.readBytes(4); long qt_matrixW = bitstream.readBytes(4); long qt_previewTime = bitstream.readBytes(4); long qt_previewDuration = bitstream.readBytes(4); long qt_posterTime = bitstream.readBytes(4); long qt_selectionTime = bitstream.readBytes(4); long qt_selectionDuration = bitstream.readBytes(4); long qt_currentTime = bitstream.readBytes(4); long nextTrackID = bitstream.readBytes(4); readed += 80;
return readed;
}


Na postranní poznámce jsem použil hodnoty pro výpočet hracího času a fps tak:
    double fps = (videoSampleCount * timeScale) / (double) duration;
    double videoTime = ((double) duration / (double) timeScale);
Proměnná videoSampleCount pochází z "stsz" atomu.

6
Paul Gregoire

MP4 je "kontejnerový" formát, který v podstatě znamená, že může obsahovat řadu různých audio nebo video proudů. Každý proud by mohl mít vlastní hodnotu trvání ...

Chcete-li vykopat to, co potřebujete, budete chtít nějaké další referenční soubory. Mohl bych navrhnout, abyste se podívali na zde a zde ... ale pravděpodobně budete muset hledat i jiné typy proudů A/V, které chcete podporovat.

4
ewall

Použitím programu MP4Parser http://code.google.com/p/mp4parser/ jako předchozí zmíněný plakát mají dokonce i vzorek, který poskytuje trvání: 

https://mp4parser.googlecode.com/svn/trunk/examples/src/main/Java/com/googlecode/mp4parser/GetDuration.Java

1
Francis Shanahan

Struktura MP4 je v podstatě strom. Makro oblasti jsou:

  • ftyp - typ souboru
  • moov - obsahuje meta data (název skladby, autory, adresu URL a další informace)
  • volný prostor pro oddělené záhlaví a data
  • mdat - obsahuje audio rámce

Můžete vyzkoušet tento freeware MP4 Analyzer nástroj 

http://www.thinmultimedia.co.kr/products/MP4Reader_download.html

1

Doba trvání filmu je v záhlaví filmu mvhd. Délka v sekundách je odvozena ze dvou polí v mvhd.

  • Časový rozsah 4 bajtů 
  • Doba trvání 4 bajty

Jedná se o řádky 380 a 382 ve specifikaci @Tom Brito.

Tak daný časový rozsah 'ts' a trvání 'dur' Duration in seconds = dur / ts

0
Peter Tran