Η Time Base είναι η μονάδα χρόνου με την οποία μετρά ένας stream. Αντί να αποθηκεύει χρονικές σημάνσεις σε δευτερόλεπτα, ένα αρχείο πολυμέσων μετρά σε «βήματα» (ticks) του δικού του ρολογιού και η time base ορίζει πόσο διαρκεί κάθε βήμα. Γράφεται ως κλάσμα του δευτερολέπτου.
Σε ποια αρχεία περιέχεται και από πού προέρχεται η τιμή
Θα βρείτε μια time base στα επιμέρους streams μέσα στα αρχεία πολυμέσων: την εικόνα, τον ήχο και τυχόν υπότιτλους σε MP4, MOV, MKV, WebM, AVI και MPEG transport streams, καθώς και σε αυτόνομα αρχεία ήχου. Κάθε stream έχει τη δική του, επομένως ο ήχος και το βίντεο στο ίδιο αρχείο συνήθως μετρούν σε διαφορετικές μονάδες.
Η τιμή επιλέγεται από τον encoder ή το πρόγραμμα που δημιούργησε το αρχείο. Ορισμένα container formats απαιτούν συγκεκριμένη time base και την καθορίζουν σταθερά. Όπου η προδιαγραφή αφήνει την επιλογή ανοιχτή, το πρόγραμμα εγγραφής διαλέγει κάτι που ταιριάζει στο περιεχόμενο και ένα αρχείο μπορεί απλώς να φέρει την προεπιλογή αυτού του προγράμματος.
Πώς φαίνεται η τιμή
Είναι πάντα ένα κλάσμα και ο παρονομαστής είναι ο αριθμός των ticks ανά δευτερόλεπτο:
1/1000- ένα millisecond ανά tick, η συνήθης επιλογή σε αρχεία Matroska και WebM1/90000- χρησιμοποιείται εδώ και καιρό σε MPEG transport streams1/48000- τα audio streams συχνά μετρούν σε samples, οπότε η time base ταιριάζει με το sampling rate1/12800- τιμή που εμφανίζεται συχνά σε video streams σε αρχεία MP4
Για να μετατρέψετε μια χρονική σήμανση σε δευτερόλεπτα, πολλαπλασιάστε την με το κλάσμα. Μια presentation timestamp 12800 σε stream με time base 1/12800 αντιστοιχεί ακριβώς σε ένα δευτερόλεπτο. Με time base 1/1000, μια χρονική σήμανση 3500 αντιστοιχεί σε τριάμισι δευτερόλεπτα. Γι’ αυτό οι ακατέργαστες χρονικές σημάνσεις σε μια αναφορά φαίνονται σαν τεράστιοι αριθμοί: είναι μετρήσεις σε ticks, όχι σε δευτερόλεπτα. Παλαιότερα εργαλεία μπορεί επίσης να εμφανίζουν ξεχωριστή γραμμή Codec Time Base δίπλα σε αυτήν.
Γιατί έχει σημασία
Όλα σε ένα αρχείο πολυμέσων συμβαίνουν σε ακέραιο αριθμό ticks, επομένως η time base καθορίζει τη μέγιστη χρονική ακρίβεια που μπορεί να εκφράσει το stream. Αν ένα frame ή ένα sample «πέσει» ανάμεσα σε δύο ticks, η χρονική σήμανσή του πρέπει να στρογγυλοποιηθεί και τα σφάλματα στρογγυλοποίησης συσσωρεύονται.
Αυτό είναι πραγματικό πρόβλημα σε ρυθμούς καρέ βίντεο που δεν είναι ακέραιοι. Στον broadcast ρυθμό των 30000 καρέ ανά 1001 δευτερόλεπτα, κάθε καρέ διαρκεί λίγο πάνω από 33 milliseconds αλλά όχι ακέραιο πλήθος από αυτά, οπότε μια time base σε milliseconds δεν μπορεί να τοποθετήσει κανένα καρέ με απόλυτη ακρίβεια. Μια time base με περισσότερα ticks ανά δευτερόλεπτο, δηλαδή με μεγαλύτερο παρονομαστή στο κλάσμα, μπορεί να «κάτσει» ακριβώς σε κάθε όριο καρέ. Γι’ αυτό οι encoders προτιμούν τιμές όπως 1/12800 ή 1/90000 αντί για απλά milliseconds.
Οι συνέπειες εμφανίζονται ως σφάλματα χρονισμού και όχι ως κάτι ορατό σε ένα μόνο καρέ: ο ήχος να ξεφεύγει σταδιακά από τη συγχρονισμένη αναπαραγωγή με την εικόνα, άνισες αποστάσεις μεταξύ καρέ, ένα cut ή seek που «προσγειώνεται» λίγο εκτός στόχου. Όταν ενώνονται αρχεία των οποίων τα streams μετρούν σε διαφορετικές time bases, όλες οι χρονικές σημάνσεις πρέπει να επανακλιμακωθούν και αυτή η μετατροπή είναι κλασική πηγή σφαλμάτων συγχρονισμού. Το πεδίο από μόνο του δεν επηρεάζει την ποιότητα εικόνας ή ήχου και δεν περιέχει προσωπικές πληροφορίες.