プロが教えるわが家の防犯対策術!

素材mp4形式ムービーファイルがある
1.mp4boxでDEMUX
2.映像を縮小再エンコーディング
3.2で再エンコーディングした映像と、1で取り出した音声をMUX

ここで、音声のTimeScale ・ Durationがおかしくなり、およそ3倍の時間に変化してしまうという状態です。

映像の方ですとFPS指定などで強制する手段があるようですし、WEBで検索した資料でもそちらの対処法は見つかりました。
しかし今回は映像の側は正しく、音声の側がおかしいという状態で資料がなく困っております。

下記に、元mp4の作成概略と、今回の変換、およびmp4box -infoによる状況を記します。
改善点などの指摘がありましたらよろしくお願いします。
(映像側は問題ないので、主に音声に関する部分のみを記載します)


==以下資料==


※MP4BOXのバージョン
MP4Box - GPAC version 0.4.5 (build 33 - Dec 11 2008) - compiled by Kurtnoise
GPAC Copyright: (c) Jean Le Feuvre 2000-2005
(c) ENST 2005-200X

※元mp4ファイル作成時
NeroAACEnc 付加したオプション -br 128000 -lc -ignorelength
mp4boxにてmp4コンテナに収める
MP4Box.exe -add "(入力映像ファイル):fps=30"#video -add "(入力音声ファイル)"#audio -new (出力MP4ファイル)

※縮小再エンコーディング前のDEMUX
MP4Box.exe -raw 2 (分離音声ファイル)
この時点のxxxx_track2.aacは正常に再生可能

※再MUX
MP4Box.exe -add "(再エンコード映像ファイル):fps=30"#video -add "(分離音声ファイル)"#audio -new (出力MP4ファイル)

また、xxxx_track2.aacを一回mp4コンテナに収めてから上記作業を行っても同じ状況になります。
ともかくMP4Boxで分離したaac(rawデータ)をmp4コンテナに収める段階で不具合が発生している模様です。


※素材MP4ファイルのmp4box -info出力。(注:重要な相違点に『』を付加しています)

* Movie Info *
Timescale 600 - Duration 00:00:14.303
Fragmented File no - 2 track(s)
File Brand isom - version 1
Created: GMT Mon Jan 12 02:13:13 2009

File has root IOD
Scene PL 0xff - Graphics PL 0xff - OD PL 0xff
Visual PL: AVC/H264 Profile (0x15)
Audio PL: AAC Profile @ Level 2 (0x29)
No streams included in root OD

Chapters:
Chapter #1 - 00:00:14.293 - ""

Track # 1 Info - TrackID 1 - TimeScale 30000 - Duration 00:00:14.266
Media Info: Language "Undetermined" - Type "vide:avc1" - 428 samples
MPEG-4 Config: Visual Stream - ObjectTypeIndication 0x21
AVC/H264 Video - Visual Size 1024 x 768 - Profile High @ Level 4
NAL Unit length bits: 32
Pixel Aspect Ratio 1:1 - Indicated track size 1024 x 768
Self-synchronized

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

※結果MP4ファイルのmp4box -info出力。(注:重要な相違点に『』を付加しています)

* Movie Info *
Timescale 600 - Duration 00:00:45.075
Fragmented File no - 2 track(s)
File Brand isom - version 1
Created: GMT Sat Jan 31 02:37:39 2009

File has root IOD
Scene PL 0xff - Graphics PL 0xff - OD PL 0xff
Visual PL: AVC/H264 Profile (0x15)
Audio PL: AAC Profile @ Level 2 (0x29)
No streams included in root OD

Track # 1 Info - TrackID 1 - TimeScale 30000 - Duration 00:00:14.300
Media Info: Language "Undetermined" - Type "vide:avc1" - 429 samples
MPEG-4 Config: Visual Stream - ObjectTypeIndication 0x21
AVC/H264 Video - Visual Size 360 x 272 - Profile Main @ Level 3
NAL Unit length bits: 32
Pixel Aspect Ratio 136:135 - Indicated track size 362 x 272
Self-synchronized

Track # 2 Info - TrackID 2 - TimeScale 『30464』 - Duration 『00:00:45.075』
Media Info: Language "Undetermined" - Type "soun:mp4a" - 1341 samples
MPEG-4 Config: Audio Stream - ObjectTypeIndication 0x40
MPEG-4 Audio AAC LC - 2 Channel(s) - SampleRate 96000
Synchronized on stream 1


注:映像を納めず、音声aac(raw)データをMP4コンテナに収めただけでも同じ症状になります。

A 回答 (1件)

原因は GPAC (MP4Box のバックエンド) のバグ。



本来 32ビットで扱うべき値を 16ビットで処理している。(単純なミス)
ので、65536Hz 以上のサンプルレート値を保持できない。
TimeScale が 30464 (96000 - 65536) となるのはそのため。
Duration は誤った TimeScale を元に計算されるから約 3倍 (96000 ÷ 30464) になる。

とりあえずの対処法は…
mp4box -single 2 xxxx.mp4 で Demux。
AAC 音声は RAW ではなく MP4 コンテナに収められた状態で分離される。
それを -add xxxx_track2.mp4 として Mux。

この回答への補足

すみませんお礼返答の順番を間違えてしまいました。
こちらはお礼文に対する補足となります。

試してみたところ無事動作を確認いたしました。
貴重な情報ありがとうございました。

補足日時:2009/02/02 20:37
    • good
    • 0
この回答へのお礼

明確な回答ありがとうございます。
今晩にでもこちらの対処を試してみようと思います。

お礼日時:2009/02/02 09:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!