Time Base คือหน่วยเวลาที่สตรีมใช้ในการนับ แทนที่จะเก็บเวลาเป็นวินาที ไฟล์สื่อจะนับเป็นจำนวน "ติ๊ก" ของนาฬิกาของตัวเอง และ Time Base จะบอกว่าติ๊กหนึ่งครั้งกินเวลานานเท่าไร โดยเขียนเป็นเศษส่วนของวินาที
ไฟล์ใดที่มีค่านี้และค่ามาจากที่ใด
คุณจะพบ Time Base อยู่ในสตรีมแต่ละสตรีมภายในไฟล์สื่อ เช่น ภาพ เสียง และคำบรรยาย ในไฟล์ MP4, MOV, MKV, WebM, AVI และ MPEG transport stream รวมถึงไฟล์เสียงเดี่ยวด้วย แต่ละสตรีมจะมีของตัวเอง ดังนั้นเสียงและวิดีโอในไฟล์เดียวกันมักจะนับคนละหน่วยกัน
ค่าจะถูกเลือกโดยตัวเข้ารหัส (encoder) หรือโปรแกรมที่รวมไฟล์ขึ้นมา ฟอร์แมตคอนเทนเนอร์บางชนิดกำหนด Time Base แบบตายตัวไว้แล้ว ส่วนฟอร์แมตที่เปิดให้เลือกได้ โปรแกรมที่เขียนไฟล์จะเลือกค่าที่เหมาะกับเนื้อหา และไฟล์อาจใช้ค่าเริ่มต้นของโปรแกรมนั้นโดยตรง
ลักษณะของค่านั้นเป็นอย่างไร
มันจะเป็นเศษส่วนเสมอ และตัวเลขด้านล่างคือจำนวนติ๊กต่อวินาที:
1/1000- หนึ่งมิลลิวินาทีต่อหนึ่งติ๊ก ใช้กันเป็นปกติในไฟล์ Matroska และ WebM1/90000- ใช้กันมานานใน MPEG transport stream1/48000- สตรีมเสียงมักนับเป็นตัวอย่าง (sample) ดังนั้น Time Base จึงตรงกับอัตราการสุ่มสัญญาณ1/12800- ค่าแบบหนึ่งที่พบได้บ่อยในสตรีมวิดีโอของไฟล์ MP4
การจะแปลง timestamp ให้เป็นวินาที ให้คูณมันด้วยค่าเศษส่วน ตัวอย่างเช่น Presentation timestamp เท่ากับ 12800 ในสตรีมที่มี Time Base เป็น 1/12800 จะเท่ากับเวลา 1 วินาทีพอดี หรือถ้า Time Base เป็น 1/1000 ค่า timestamp 3500 จะเท่ากับเวลา 3 วินาทีครึ่ง นี่คือเหตุผลที่ timestamp ดิบในรายงานดูเป็นตัวเลขขนาดใหญ่มาก เพราะมันคือจำนวนติ๊ก ไม่ใช่วินาที แอปเก่าบางตัวอาจแสดงแถว Codec Time Base แยกต่างหากเพิ่มจากคอลัมน์นี้ด้วย
ทำไมมันจึงสำคัญ
ทุกอย่างในไฟล์สื่อจะเกิดขึ้นที่จำนวนติ๊กเต็ม ๆ ดังนั้น Time Base จึงเป็นตัวกำหนดความละเอียดสูงสุดของเวลาในสตรีม ถ้าเฟรมหรือ sample อยู่ระหว่างสองติ๊ก ค่า timestamp จะต้องถูกปัดเศษ และความคลาดเคลื่อนจากการปัดเศษจะสะสมเรื่อย ๆ
ปัญหานี้ชัดเจนเป็นพิเศษกับอัตราเฟรมวิดีโอที่ไม่ใช่จำนวนเต็ม ที่อัตราออกอากาศ 30000 เฟรมต่อ 1001 วินาที เฟรมหนึ่งจะยาวกว่า 33 มิลลิวินาทีเล็กน้อย แต่ไม่ใช่จำนวนมิลลิวินาทีแบบลงตัว ดังนั้น Time Base แบบมิลลิวินาทีจึงวางตำแหน่งเฟรมใด ๆ ได้ไม่เป๊ะ Time Base ที่มีจำนวนติ๊กต่อวินาทีมากกว่า หรือก็คือมีตัวส่วนของเศษส่วนใหญ่กว่า จะวางตำแหน่งตรงขอบเฟรมทุกเฟรมได้แม่นยำ ซึ่งเป็นเหตุผลที่ตัวเข้ารหัสนิยมใช้ค่าอย่าง 1/12800 หรือ 1/90000 แทนที่จะใช้มิลลิวินาทีตรง ๆ
ผลที่ตามมาจะปรากฏเป็นความคลาดเคลื่อนด้านเวลา มากกว่าสิ่งที่มองเห็นได้ในเฟรมเดียว เช่น เสียงค่อย ๆ หลุดจังหวะจากภาพ ระยะห่างระหว่างเฟรมไม่สม่ำเสมอ จุดตัดต่อหรือจุดเลื่อนไปที่ไม่ตรงตำแหน่งเป๊ะ การนำไฟล์ที่สตรีมนับเวลาใน Time Base ต่างกันมารวมกัน หมายถึง timestamp ทั้งหมดต้องถูกสเกลใหม่ ซึ่งเป็นสาเหตุคลาสสิกของบั๊กด้านการซิงก์ ฟิลด์นี้ไม่มีผลต่อคุณภาพของภาพหรือเสียงโดยตรง และไม่เก็บข้อมูลส่วนบุคคลใด ๆ