2010-06-16 16 views
32

Dove nel mp4 file structure è la durata di esso?Qualcuno ha familiarità con la struttura dei dati mp4?

+0

di ricerca per la durata nel documento. È una lunghezza di 8 byte (versione 1) o di 4 byte nell'intestazione. –

+0

@MichaelTodd L'ho fatto e ci sono molte durate nel file. Leggerò l'intero documento per capire meglio, se nessuno conosce la risposta. –

+0

Correlati (questo per Java): http://stackoverflow.com/questions/3015393/how-to-handle-mp4-files-with-java –

risposta

13

questo non può essere la risposta al vostro problema, ma era al mio: http://mediainfo.sourceforge.net/

(Ha una biblioteca ed è open source, quindi si può solo controllare la parte (s) è necessario)

+0

Non sto più cercando questo, ma questa è probabilmente la migliore risposta qui. –

4

MP4 è un formato "contenitore", che in pratica significa che può contenere un numero di diversi flussi audio o video. E ogni stream può avere il proprio valore di durata ...

Per individuare quello che ti serve, ti serviranno altri file di riferimento. Potrei suggerire di cercare here e here ... ma probabilmente dovrai andare oltre le ricerche per i diversi tipi di flussi A/V che vuoi supportare.

6

Per quanto ne so - il contenitore "mp4" deriva dalla struttura atomica QuickTime. È possibile leggere la descrizione del formato file QuickTime.

L'analisi degli atomi quicktime non è un grosso problema (vedere atomicParsley project). Non sono sicuro per MP4, ma per quanto riguarda i file MOV - c'è un campo "durata" in atomo "mvhd" (intestazione film) e anche in atomo "tkhd" (intestazione traccia). Questa durata è solitamente un numero di fotogrammi moltiplicato per l'attributo "scala temporale". La scala del tempo può essere trovata negli stessi atomi.

6

Per il lettore Red5 MP4 ho usato l'atomo "mvhd", poiché contiene sia i campi della scala temporale che quelli della durata. Ottenere la durata dall'atomo sarà diverso in base alla versione in uso, qui sotto potete vedere un esempio:

 
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;
}


Su un lato nota che ho usato i valori per calcolare il tempo di gioco e fps in questo modo:
 
    double fps = (videoSampleCount * timeScale)/(double) duration; 
    double videoTime = ((double) duration/(double) timeScale); 
Il videoSampleCount variabile deriva dall'atomo "stsz".

-1

È possibile utilizzare Media Box Viewer. È un parser MP4 e Quicktime. Quando apri un file Quicktime, puoi vedere la struttura dell'atomo. Cerca l'atomo della descrizione del video. Una delle sue proprietà è la durata. Media Box Viewer può essere scaricato da www.jdxsoftware.org.

1

Fondamentalmente struttura MP4 è un albero. Macro aree sono:

  • ftyp - tipo di file
  • moov - contiene i metadati (titolo del brano, autors, url, e altre informazioni)
  • gratuito - zona vuota per intestazione separata e dati
  • MDAT - contiene l'audio incornicia

si può provare questo strumento freeware MP4 Analyzer

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

0

La durata del film è nell'intestazione del film mvhd. La durata in secondi è derivata da due campi in mvhd.

  • 4 tempo byte durata scala
  • 4 byte

Queste sono le linee 380 e 382 nelle specifiche inviato da @ Tom Brito.

Quindi, dato 'ts' scala cronologica e durata 'dur' Duration in seconds = dur/ts

Problemi correlati