37

mp4ファイル構造のどこにその期間がありますか?

4

9 に答える 9

16

これはあなたの問題への答えではないかもしれませんが、それは私のものでした:http: //mediainfo.sourceforge.net/

(ライブラリがあり、オープンソースなので、必要な部分を確認するだけです)

于 2010-06-25T05:18:43.717 に答える
7

Red5 MP4リーダーには、タイムスケールフィールドと期間フィールドの両方が含まれているため、「mvhd」アトムを使用しました。アトムからの継続時間の取得は、使用されているバージョンによって異なります。以下に例を示します。

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


ちなみに、私は次のように再生時間とfpsを計算するために値を使用しました
    double fps = (videoSampleCount * timeScale) / (double) duration;
    double videoTime = ((double) duration / (double) timeScale);
。videoSampleCount変数は「stsz」アトムから取得されます。

于 2010-09-03T22:29:27.560 に答える
6

私の知る限り、「mp4」コンテナはQuickTimeアトム構造から派生しています。QuickTime File Format の説明を読むことができます。

quicktime アトムの解析は大したことではありません ( atomicParsley プロジェクトを見てください)。MP4についてはわかりませんが、MOVファイルについては、「mvhd」(ムービーヘッダー)アトムと「tkhd」(トラックヘッダー)アトムに「デュレーション」フィールドがあります。この持続時間は、通常、フレーム数に「タイム スケール」アトリビュートを掛けたものです。時間スケールは同じ原子で見つけることができます。

于 2010-07-13T00:47:21.697 に答える
3

MP4は「コンテナ」形式です。つまり、基本的に、多数の異なるオーディオまたはビデオ ストリームを含めることができます。そして、各ストリームには独自の期間値があります...

必要なものを掘り下げるには、さらにいくつかの参照ファイルが必要になります。ここここを参照することをお勧めしますが、サポートしたいさまざまな種類の A/V ストリームについては、おそらくそれ以上に検索する必要があります。

于 2010-06-24T21:27:36.160 に答える
2

ムービーの長さは、ムービー ヘッダー mvhd にあります。秒単位の期間は、mvhd の 2 つのフィールドから取得されます。

  • 4バイトのタイムスケール
  • 4 バイトの長さ

これらは、@Tom Brito によって投稿された仕様の 380 行目と 382 行目です。

したがって、タイムスケール「ts」と期間「dur」が与えられた場合 Duration in seconds = dur / ts

于 2015-07-11T00:49:41.940 に答える
2

基本的に MP4 構造はツリーです。マクロ領域は次のとおりです。

  • ftyp - ファイルタイプ
  • moov - メタデータ (曲のタイトル、作者、URL、その他の情報) が含まれています
  • free - ヘッダーとデータを分離するための空の領域
  • mdat - オーディオ フレームを含む

このフリーウェア MP4 アナライザー ツールを試すことができます

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

于 2015-03-25T11:03:43.540 に答える
-1

メディア ボックス ビューアーを使用できます。MP4 と Quicktime パーサーです。Quicktime ファイルを開くと、原子構造が表示されます。動画の説明アトムを探します。そのプロパティの 1 つは期間です。Media Box Viewer はwww.jdxsoftware.orgからダウンロードできます。

于 2012-10-19T17:14:43.023 に答える