2005年11月27日

時間軸とはなんぞや

【概要】時間軸とは。タイムスケールとは。タイムスタンプとは。
映像と音声の再生時間が異なるのはQT系も一緒?」に頂いたコメントにビ ビったので、誠に勝手ながらエントリ化させていただきます。悪しからずご海容賜りたくm(_ _)m。
引用以外の後半部分は逐次書き換えていきます。

==== ======引用ここから==========

私も以前、不用 意に時間軸という単語を使ってしまったので、ちょっと整理
して説明します。長文失礼。

A〜DのIDをつけた4枚の画像をスライドショーにする場合を考えてみます。
まず、A→B→C→Dの順番で表示するというルールを設定します。
この時点で、このスライドショーは図1のように時間軸を持っています。

◎図1(すみませんが等幅フォントで見てください)
 −− −−−−−−− −>(時間軸)
 A B  C  D 

AとBの間隔よりもBとCの間隔が長いのはワザとです。最 初のルールは画像の
表示順序を規定しただけですから、個々の画像の表示タイミングはまだ決まって
いません。
そこでまず、時間軸のタイムスケールの最小単位は1秒というルールを追加します。

◎図2
 0123456789(秒)
 ++++++++++>(時間軸)

時間軸が図2のように、タイムスケールを持つようになりま した。
しかし、これだけではどの時点でどの画像を表示するかは決定できません。
時間軸の0秒から0.5fpsで表示するというルールを追加しましょう。(2 秒で1フレーム)
結果は図3のようになります。

◎図3
 0123456789(秒)
 ++++++++++>(時間軸)
 A B C D  

固定フレームレートが実現できました。しかし、個々の画像 の表示間隔
は一定なので、開始時刻とフレームレートを指定するだけでは、図4の
ようなフレームレートが一定ではない状態を表現できません。

◎図4
 0123456789(秒)
 ++++++++++>(時間軸)
 A B  C  D 

図4のような状態を実現するには、各画像のタイムスタンプ を保存する
必要があります。図4から各画像のタイムスタンプを抜き出したのが、
表1です。

◎表1
A=0
B=2
C=5
D=8

Bのタイムスタンプが2である事は、始まってから2秒後にBが表示される
事を意味「しない」事に注意してください。
タイムスケールの最小単位が1分であれば、Bは2分後に表示されます。

ここまで、以下の事を説明しました。
  • 時間軸とタイムスケールは別物で、時間軸はタイムスケールを持つ場合と持たない場合がある。
  • 時間軸とタイムスケールの最小単位は固定フレームレートにも存在する。
  • 完全な可変フレームレートを実現するには、タイムスケールの最小単位と、タイムスタンプを保存する必要がある。

(大雑把ですが)結論はこうです。
タイムスタンプを保存しないと可変フレームレートを実現できない。

正直、QuickTime用語はよく分かりませんので、もし誤解や間違いがあれば
指摘をお願いします。>Yoshikiさん
Posted by at 2005年11月26日 19:00

==== ======引用ここまで==========

■概念をざっくり把握するための例え(案)
  • 時間軸は目盛りの無いモノサシ。
  • タイムスケールはモノサシの目盛り。センチ、インチ、尺貫法、、、どのような目盛りを刻むかはわりと自由。映像がセンチ、音声は インチ、とか。
  • タイムスタンプはただの数字。目盛り(度量衡)が違えば値は変わる。
  • A/V Syncだけでなく、字幕やカラオケなど、視覚要素同士の Syncで死活的に重要と思われる。
mp4boxの表示例

*1と2はいずれ同一素材で揃えます。

1)MEncoder映像(x264) + ffmpeg音声 + mp4box
$ mp4box -info XXX.mp4
* Movie Info *
Timescale 600 - Duration 00:24:59.353
Fragmented File no - 2 track(s)
File Brand isom - version 1

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 23975 - Duration 00:24:59.353
Media Info: Language "und" - Type "vide" - Sub Type "avc1" - 35947 samples
MPEG-4 Config: Visual Stream - ObjectTypeIndication 0x21
AVC/H264 Video - Visual Size 640 x 480
Self-synchronized

Track # 2 Info - TrackID 2 - TimeScale 48000 - Duration 00:24:59.136
Media Info: Language "und" - Type "soun" - Sub Type "mp4a" - 70272 samples
MPEG-4 Config: Audio Stream - ObjectTypeIndication 0x40
MPEG-4 Audio AAC LC - 2 Channel(s) - SampleRate 48000
Synchronized on stream 1
  • タイムスケール
    • 全体:600Hz -- 目盛りは1秒間に600個。mux時に未指定 = mp4boxのデフォ。
    • 映像:23975Hz -- 目盛りは1秒間に23976個。タイムスタンプは、フレームの表示タイミング1sec/23.976の1000倍精度で打てる。mux時に指定。
    • 音声:48000Hz -- 目盛りは1秒間に48000個。素材と同一。
2)QuickTime Player 7 Pro (Apple-H.264),映像のみ。
$ mp4box -info xxx.mp4 
* Movie Info *
Timescale 90000 - Duration 00:00:14.958
Fragmented File no - 1 track(s)
File Brand mp42 - version 1

File has no MPEG4 IOD/OD

Track # 1 Info - TrackID 1 - TimeScale 90000 - Duration 00:00:14.958
Media Info: Language "eng" - Type "vide" - Sub Type "avc1" - 449 samples
MPEG-4 Config: Visual Stream - ObjectTypeIndication 0x21
AVC/H264 Video - Visual Size 640 x 480
Self-synchronized
posted by ばる at 02:22| Comment(4) | TrackBack(0) | その他 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
勉強させていただきました。今までタイムコードとか時間軸とか少々適当に使ってました。すいません。これからは気をつけねばならんですね。
Posted by Yoshiki@その蜩blog at 2005年11月27日 16:27
DVだけかもしれませんが、QTはv.6辺りから音声もVFRとして扱っています。編集時にカメラの精度が問題となりズレるからだそうです。48KHzといっても48000サンプルあるとは限りません。
Posted by Y at 2005年11月28日 17:42
QuickTimeでは、MovieVideoChartというサンプルコードがあるのですが、これが時間軸の理解の一助になるかと。

自分とこの記事をはっておきます
>http://blog.so-net.ne.jp/MyCometG3/2005-11-14-1
時間軸がQTでどう使われているか、理解の助けになれば。

H.264でのBフレームがQT上でどう扱われているか、
「見れます」。えらく単純な方法のようです。
Posted by MyCometG3 at 2005年12月18日 20:54
MovieVideoChartは有り難く使わせて頂いておりますm(_ _)m
 図のあるページ:http://www6.atwiki.jp/how_to_use_ffmpegx/pages/69.html
 図:http://www6.atwiki.jp/how_to_use_ffmpegx/?cmd=upload&act=open&pageid=69&file=050124-Chart.jpg

ちょっと下記を元に、音ズレとDelay frameがごっちゃになってるのを整理して訂正しないといけないようです。
>http://htffmpegx.seesaa.net/article/10797422.html
Posted by ばる at 2005年12月18日 23:45
コメントを書く
お名前: [必須入力]

メールアドレス: [必須入力]

ホームページアドレス: [必須入力]

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。