teematsu @ ウィキ

解析

最終更新:

teematsu

- view
管理者のみ編集可

動画ファイル(主に、mp4)の情報を調べる方法

ffmpeg

ffmpeg -i file.ext

表示例

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'niwa.3gp':
  Duration: 00:00:17.02, start: 0.000000, bitrate: 6209 kb/s
    Stream #0.0(eng): Video: mpeg4, yuv420p, 848x480 [PAR 1:1 DAR 53:30], 60 tbr
, 1k tbn, 60 tbc
    Stream #0.1(eng): Audio: aac, 48000 Hz, stereo, s16

備考

mp4box

概要情報

 mp4box -info file.ext

表示例

[iso file] Box "gnre" has 6 extra bytes
* Movie Info *
        Timescale 1000 - Duration 00:00:17.028
        Fragmented File no - 2 track(s)
        File Brand 3gp4 - version 768
        Created: GMT Mon Feb 21 02:35:57 2011

File has no MPEG4 IOD/OD

Copyrights:
        (und) 〓

Track # 1 Info - TrackID 1 - TimeScale 1000 - Duration 00:00:17.028
Media Info: Language "Undetermined" - Type "vide:mp4v" - 506 samples
MPEG-4 Config: Visual Stream - ObjectTypeIndication 0x20
MPEG-4 Visual Size 848 x 480 - ISO Reserved Profile
Pixel Aspect Ratio 1:1 - Indicated track size 848 x 480
Self-synchronized

Track # 2 Info - TrackID 2 - TimeScale 1000 - Duration 00:00:16.916
Media Info: Language "Undetermined" - Type "soun:mp4a" - 793 samples
MPEG-4 Config: Audio Stream - ObjectTypeIndication 0x40
MPEG-4 Audio AAC LC - 2 Channel(s) - SampleRate 48000
Synchronized on stream 1

※ この例の場合動画ファイルに設定されているCopyrightsがおかしいため表示が化けている。

  • TimeScale
    内部で時刻/時間を表現するときの単位を1秒の何分の1にするかを指定(らしい)。この例では1msec単位となる。

トラックのより詳細な情報

mp4box -info 1 file.ext

1の部分はトラック番号を指定

表示例

[iso file] Box "gnre" has 6 extra bytes
Track # 1 Info - TrackID 1 - TimeScale 1000 - Duration 00:00:17.028
Media Info: Language "Undetermined" - Type "vide:mp4v" - 506 samples
Handler name: VideoHandler
MPEG-4 Config
        Visual Stream - ObjectTypeIndication 0x20
        MPEG-4 Visual Size 848 x 480 - ISO Reserved Profile
Pixel Aspect Ratio 1:1 - Indicated track size 848 x 480
        Decoding Buffer size 73489 - Average bitrate 6000 kbps - Max Bitrate 600
0 kbps
        No stream dependencies for decoding
        StreamPriority 0

Computed info from media:
        Total size 12813185 bytes - Total samples duration 16995 ms
        Average rate 6406 kbps - Max Rate 6455 kbps

box構成をXMLで出力

mp4box -diso file.ext   (file_info.xmlに出力)
mp4box -diso -std file.ext  (標準出力に出力)

出力例

<?xml version="1.0" encoding="UTF-8"?>
<!--MP4Box dump trace-->
<IsoMediaFile Name="niwa.3gp">
<FileTypeBox MajorBrand="3gp4" MinorVersion="768">
<BoxInfo Size="28" Type="ftyp"/>
<BrandEntry AlternateBrand="3gp4"/>
<BrandEntry AlternateBrand="mp41"/>
<BrandEntry AlternateBrand="3gp6"/>
</FileTypeBox>
<MediaDataBox dataSize="13203670">
<BoxInfo Size="13203678" Type="mdat"/>
</MediaDataBox>
<MovieBox>
(略)

インデントはしてくれない。

udta (UserDataBox)は、実際はtrakより前にある場合でも、XMLではtrakの後ろに出力されてしまうようだ。

備考

  • マニュアル
  • Windows版は、例えば、Yambに添付のものを利用できる。

mp4のフォーマット

基本事項

構成概略

mp4
 +-- track 1       トラック
 |     +-- media   メディア これはトラックにつき1個
 |          +-- chunk 1         sampleの塊
 |          |     +- sample 1    動画ならフレーム
 |          |     +- sample 2
 |          |     +- ...
 |          +-- chunk 2
 |          +-- ...
 +-- track 2
 +-- ...

trackは、1がビデオで2がオーディオ、など。
sampleはchunkにグルーピングされ、chunkの連なりでビデオ全体またはオーディオ全体となる。
オーディオがステレオの場合にどう表現されるかは? 少なくとも別トラックになるわけではない模様。

T-01Cで録画した.3gpの例

内容の説明は、前記「携帯ゲーム機PSPの動画ファイル「MP4」とは何か」を参考に記載。

 ボックスの種類     mp4box -disoのXMLのタグ名      内容
 ftyp               FileTypeBox                    互換性情報
                                                     MajorBrand: 3gp4 MinorVersion 768
                                                     AlternateBrand: 3gp4, mp41, 3gp6
 
 mdat               MediaDataBox                   ビデオ、オーディオのバイト列(本体)
                                                     ここのサイズがとても大きい
 moov               MovieBox                       
   mvhd             MovieHeaderBox                 ムービーのヘッダ  長さ(時間)、更新時刻、
                                                     TimeScale(時間を指定するときの単位)
 
   udta             UserDataBox                    タイトル、製作者などの情報?
                                                     mp4boxの-disoで出力したXMLでは2つのtrakの後にあるが
                                                     実際にはこの位置に存在
     cprt           CopyrightBox
     auth           UnknownBox
     titl           UnknownBox
     dscp           UnknownBox
     perf           UnknownBox
     gnre           GenreBox
     rtng           UnknownBox
     clsf           UnknownBox
     kywd           UnknownBox
     loci           UnknownBox
     albm           UnknownBox
     yrrc           UnknownBox
 
   trak             TrackBox                       トラック
     tkhd           TrackHeaderBox                 トラックのヘッダ  長さ(時間)、更新時刻、
                                                     縦横ドット数、
     mdia           MediaBox                       メディア
       mdhd         MediaHeaderBox                 メディアのヘッダ 長さ(時間)、更新時刻、言語?など
                                                     TimeScale(時間を指定するときの単位)
       hdlr         MediaHeaderBox                 メディアの種類(ビデオかオーディオか)
                                                     ここの場合はビデオ
       minf         MediaInformationBox
         vmhd       VideoMediaHeaderBox            ビデオトラックデータ固有の情報
                                                     らしいが実質的なデータは持っていない?
         dinf       DataInformationBox             トラックデータの存在場所の情報
           dref     DataReferenceBox               
             url    URLDataEntryBox                ファイル外部にデータ本体があるときはそのURL?
                                                     ファイル内部にあるためか実質的データはなし。
         stbl       SampleTableBox                 
           stsd     SampleDescriptionBox           エンコーディングの情報?
             mp4v   MPEGVisualSampleDescriptionBox エンコーディングのパラメータ? 
                                                     幅高さ、DPI、色深度 
               esds MPEG4ESDescriptorBox           エンコーディングのパラメータ? ビットレートなど
           stts     TimeToSampleBox                各sampleの再生時間の一覧
           stss     SyncSampleBox                  トラックデータのランダムアクセス可能な位置
                                                   (フレーム番号)の一覧
           stsc     SampleToChunkBox               各chunkのsample数の一覧
           stsz     SampleSizeBox                  各sampleのバイト長
           stco     ChunkOffsetBox                 各chunkのバイト位置(ファイルの先頭を0とする)
 
   trak             TrackBox                       
     tkhd           TrackHeaderBox                 トラックのヘッダ  長さ(時間)、ボリューム
     mdia           MediaBox                       メディア
       mdhd         MediaHeaderBox                 メディアのヘッダ 長さ(時間)、更新時刻、言語?など
                                                     時間を指定するときの単位
       hdlr         MediaHeaderBox                 メディアの種類(ビデオかオーディオか)
                                                     ここの場合はオーディオ
       minf         MediaInformationBox
         smhd       SoundMediaHeaderBox            オーディオトラックデータ固有の情報
 
         dinf       DataInformationBox             トラックデータの存在場所の情報
           dref     DataReferenceBox               
             url    URLDataEntryBox                ファイル外部にデータ本体があるときはそのURL?
                                                     ファイル内部にあるためか実質的データはなし。
         stbl       SampleTableBox                 
           stsd     SampleDescriptionBox           エンコーディングの情報?
             mp4a   MPEGAudioSampleDescriptionBox  エンコーディングのパラメータ? 
                                                     サンプリングレート(=1000)、チャンネル数(=2)
                                                     サンプルのビット数(=16)
               esds MPEG4ESDescriptorBox           エンコーディングのパラメータ? ビットレートなど
                                                     ビデオと同じBOXが使われている(esds)
           stts     TimeToSampleBox                各sampleの再生時間の一覧
           stsc     SampleToChunkBox               各chunkのsample数の一覧
           stsz     SampleSizeBox                  各sampleのバイト長
           stco     ChunkOffsetBox                 各chunkのバイト位置(ファイルの先頭を0とする)

stblに出現するstts, stsc, stsz, stcoは、おそらく以下の関係にあるのだろう。

                              バイト数/位置の情報            時間の情報
 
         --  +------+--------+  ← stcoのエントリで   
         ↑  |chunk |sample  |       chunkのファイル内バイト位置を
             |      |        |  
stscの       |      +--------+   --                           --
エントリで   |      |sample  |   ↑stszのエントリで           ↑sttsのエントリで
chunk内の    |      |        |   ↓  sampleのサイズを         ↓  sampleの再生時間を
sample数を   |      +--------+   --                           --
             |      |sample  |
             |      +--------+
             |      |sample  |
             |      +--------+
         ↓  |      |sample  |
         --  +------+--------+  ← stcoのエントリ
             |chunk |sample  |
             |      +--------+
             |      |sample  |
             +------+--------+  ← stcoのエントリ
             |chunk |sample  |
             |      +--------+
              ...    .....

stssはビデオのほうのみ存在。各エントリーはsampleの番号をさし、1,30,60,90,と30置きになっているが、sampleのサイズから判断してキーフレームが30置きに出現しているわけでもなさそうで、stssが指す先は必ずしもキーフレームではなさそう。

ビデオとオーディオはすでにインターリーブされている。mdat中にビデオのchunk1個とオーディオのチャンク2個(最後だけ1個)が交互に出現。


名前:
コメント:
目安箱バナー