「映像と音声の再生時間が異なるのはQT系も一緒?」に頂いたコメントにビ ビったので、誠に勝手ながらエントリ化させていただきます。悪しからずご海容賜りたくm(_ _)m。
引用以外の後半部分は逐次書き換えていきます。
====
======引用ここから==========
私も以前、不用
意に時間軸という単語を使ってしまったので、ちょっと整理
して説明します。長文失礼。
A〜DのIDをつけた4枚の画像をスライドショーにする場合を考えてみます。
まず、A→B→C→Dの順番で表示するというルールを設定します。
この時点で、このスライドショーは図1のように時間軸を持っています。
◎図1(すみませんが等幅フォントで見てください)
−− −−−−−−− −>(時間軸)
A B C D
◎図2
0123456789(秒)
++++++++++>(時間軸)
◎図3
0123456789(秒)
++++++++++>(時間軸)
A B C D
◎図4
0123456789(秒)
++++++++++>(時間軸)
A B C D
◎表1
Bのタイムスタンプが2である事は、始まってから2秒後にBが表示される
事を意味「しない」事に注意してください。
タイムスケールの最小単位が1分であれば、Bは2分後に表示されます。
ここまで、以下の事を説明しました。
(大雑把ですが)結論はこうです。
タイムスタンプを保存しないと可変フレームレートを実現できない。
正直、QuickTime用語はよく分かりませんので、もし誤解や間違いがあれば
指摘をお願いします。>Yoshikiさん
して説明します。長文失礼。
A〜DのIDをつけた4枚の画像をスライドショーにする場合を考えてみます。
まず、A→B→C→Dの順番で表示するというルールを設定します。
この時点で、このスライドショーは図1のように時間軸を持っています。
◎図1(すみませんが等幅フォントで見てください)
−− −−−−−−− −>(時間軸)
A B C D
AとBの間隔よりもBとCの間隔が長いのはワザとです。最
初のルールは画像の
表示順序を規定しただけですから、個々の画像の表示タイミングはまだ決まって
いません。
そこでまず、時間軸のタイムスケールの最小単位は1秒というルールを追加します。
表示順序を規定しただけですから、個々の画像の表示タイミングはまだ決まって
いません。
そこでまず、時間軸のタイムスケールの最小単位は1秒というルールを追加します。
◎図2
0123456789(秒)
++++++++++>(時間軸)
時間軸が図2のように、タイムスケールを持つようになりま
した。
しかし、これだけではどの時点でどの画像を表示するかは決定できません。
時間軸の0秒から0.5fpsで表示するというルールを追加しましょう。(2 秒で1フレーム)
結果は図3のようになります。
しかし、これだけではどの時点でどの画像を表示するかは決定できません。
時間軸の0秒から0.5fpsで表示するというルールを追加しましょう。(2 秒で1フレーム)
結果は図3のようになります。
◎図3
0123456789(秒)
++++++++++>(時間軸)
A B C D
固定フレームレートが実現できました。しかし、個々の画像
の表示間隔
は一定なので、開始時刻とフレームレートを指定するだけでは、図4の
ようなフレームレートが一定ではない状態を表現できません。
は一定なので、開始時刻とフレームレートを指定するだけでは、図4の
ようなフレームレートが一定ではない状態を表現できません。
◎図4
0123456789(秒)
++++++++++>(時間軸)
A B C D
図4のような状態を実現するには、各画像のタイムスタンプ
を保存する
必要があります。図4から各画像のタイムスタンプを抜き出したのが、
表1です。
必要があります。図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で死活的に重要と思われる。
*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時に指定。
- ここでは23975は
表示上の丸め誤差と推断。参考 →mp4boxがfps指定値を地味に守らない件。 - mp4boxの問題だった模様。参考 →mp4boxがfps指定値を地味に守らない件 -- その2
- 音声:48000Hz -- 目盛りは1秒間に48000個。素材と同一。
$ 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
自分とこの記事をはっておきます
>http://blog.so-net.ne.jp/MyCometG3/2005-11-14-1
時間軸がQTでどう使われているか、理解の助けになれば。
H.264でのBフレームがQT上でどう扱われているか、
「見れます」。えらく単純な方法のようです。
図のあるページ: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