2011年9月21日水曜日

mp4boxでfpsを間違えてmuxしちゃったのでdemuxする

mp4boxでmp4ファイルを作ったのですが、23.976fpsの動画を間違えて29.970fpsでMUXしてしまいました。
という訳でDEMUXしてもう一度MUXするまでの流れを記載。
demuxてのは動画と音声を抽出するみたいな?

0.mp4boxのdemux方法を調べる
1.動画の情報を調べる
2.demux
3.mux

できるだけ省略しないように書いてみる。
全くの初心者じゃないけど、超詳しいわけじゃないような人向けになってると嬉しい。
ファイルは全部Cドライブ直下に置くとする。

0.mp4boxのdemux方法を調べる

コマンドプロンプトを開いて以下を打ち込んで実行します

C:\Windows\System32>C:\mp4box.exe -h

ファイルはわざわざ打ちこまなくてもコマンドプロンプト上にドラッグアンドドロップでフルパスが入力される。
「-h」はhelpの略でmp4box実行時のオプション。

すると出力がこんな感じ

MP4Box [option] input [option]
 -h general:          general options help
 -h hint:             hinting options help
 -h import:           import options help
 -h encode:           encode options help
 -h meta:             meta handling options help
 -h extract:          extraction options help
 -h dump:             dump options help
 -h swf:              Flash (SWF) options help
 -h crypt:            ISMA E&A options help
 -h format:           supported formats help

 -nodes:              lists supported MPEG4 nodes
 -node NodeName:      gets MPEG4 node syntax and QP info
 -xnodes:             lists supported X3D nodes
 -xnode NodeName:     gets X3D node syntax
 -snodes:             lists supported SVG nodes
 -snode NodeName:     gets SVG node syntax
 -languages:              lists supported ISO 639 languages

 -version:            gets build version

今回の目的はdemuxなので、動画と音声を抽出(extract)したい。
という訳で「-h extract」に注目。
「extraction options help」が見れますよということが書いてある。
なのでコマンドプロンプトに打ち込み実行

C:\Windows\System32>C:\mp4box.exe -h extract

そして出力がこれ。

Extracting Options
 -raw TrackID:        extracts track in raw format when supported
 -raws TrackID:       extract each track sample to a file
                       * Note: "TrackID:N" extracts Nth sample
 -nhnt TrackID:       extracts track in nhnt format
 -nhml TrackID:       extracts track in nhml format (XML nhnt).
                       * Note: "-nhml +TrackID" for full dump
 -single TrackID:     extracts track to a new mp4 file
 -avi TrackID:        extracts visual track to an avi file
 -qcp TrackID:        same as '-raw' but defaults to QCP file for EVRC/SMV
 -aviraw TK:          extracts AVI track in raw format
                      $TK can be one of "video" "audio" "audioN"
 -saf:                remux file to SAF multiplex
                       * Note: can be used when encoding scene descriptions

「-raw」というオプションを使えば動画や音声の生データが抽出できるようです。
「TrackID」と書いてありますが、これはそのまま文字を打つ訳ではなく、数字で指定する必要があります。
動画のTrackIDが何番なのか、音声のTrackIDが何番なのかを調べる必要があります。

1.動画の情報を調べる

以下を実行。

C:\Windows\System32>C:\mp4box.exe -Info C:\Movie.mp4

出力

* Movie Info *
           Timescale 600 - Duration 02:38:58.346
           Fragmented File no - 2 track(s)
           File Brand isom - version 1
           Created: GMT Tue Sep 20 00:13:19 2011

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 02:07:10.623
Media Info: Language "Undetermind" - Type "vide:avc1" - 228690 samples
MPEG-4 Config: Visual Stream - ObjectTypeIndication 0x21
ABC/H264 Video - Visual Size 960 x 540 - Profile Main @ Level 3
NAL Unit length bits: 32
Pixel Aspect Ratio 1:1 - Indicated track size 960 x 540
Self-synchronized

Track # 2 Info - TrackID 2 - TimeScale 48000 - Duration 02:28:58.346
Media Info: Language "Undetermind" - Type "soun:mp4a" - 447110 samples
MPEG-4 Config: Audio Stream - ObjectTypeIndication 0x40
MPEG-4 Audio AAC LC - 2 Channel(s) - SampleRate 48000
Synchronized on stream 1

出力結果は当然動画によって違います。
どうやらTrackID 1に動画が、TrackID 2に音声が入っているようです。
長さ(Duration)が動画と音声で違っているのがわかります。
音声の方が正しい長さですね。

2.demux

調べたオプションとTrackIDを使って抽出する。

動画を抽出

C:\Windows\System32>C:\mp4box.exe -raw 1 C:\Movie.mp4

音声を抽出

C:\Windows\System32>C:\mp4box.exe -raw 2 C:\Movie.mp4

これだけ。

3.mux

fpsが23.976であることを忘れずにMUXしなおす

C:\Windows\System32>C:\mp4box.exe -fps 23.976 -par 1=1:1 -add "C:\Movie.264" -add "C:\Movie.aac" -new "C:\Movie_fix.MP4"

0 件のコメント:

コメントを投稿