Λεξικό

Τι είναι τα B-frames σε ένα βίντεο;

Ένα B-frame είναι ένα καρέ βίντεο που μπορεί να χρησιμοποιεί τόσο ένα προηγούμενο όσο και ένα επόμενο καρέ. Μάθετε πώς λειτουργούν τα B-frames και τι σημαίνει η τιμή Has B Frames στο αρχείο σας.

b-frames

Ένα B-frame είναι ένα καρέ βίντεο που μπορεί να χρησιμοποιεί τόσο ένα προηγούμενο όσο και ένα επόμενο καρέ για να δημιουργήσει την εικόνα του. Το B σημαίνει bidirectional (αμφίδρομο). Τα B-frames προσφέρουν μεγαλύτερη συμπίεση από τους άλλους τύπους καρέ, κάτι που βοηθά να παραμένει ένα βίντεο μικρό σε μέγεθος.

Στα μεταδεδομένα ενός αρχείου βίντεο, μπορεί να δείτε ένα πεδίο που ονομάζεται Has B Frames, επίσης γραμμένο has_b_frames. Το όνομα υπονοεί μια απάντηση ναι ή όχι, αλλά η τιμή είναι ένας αριθμός. Ο αριθμός δείχνει πόσα καρέ πρέπει να μπορεί να κρατήσει ένας αποκωδικοποιητής στη μνήμη για να προβάλλει το βίντεο με τη σωστή σειρά.

Πώς διαφέρουν τα B-frames από τα I-frames και τα P-frames

Η συμπίεση βίντεο γενικά λειτουργεί συγκρίνοντας καρέ και καταγράφοντας τις διαφορές μεταξύ τους. Το βίντεο MPEG-2 ορίζει αυτούς τους 3 τύπους καρέ:

  • I-frame: κωδικοποιημένο χωρίς αναφορά σε άλλα καρέ, ώστε η αποκωδικοποίηση να μπορεί να ξεκινήσει από εδώ
  • P-frame: μπορεί να χρησιμοποιεί το προηγούμενο I-frame ή P-frame
  • B-frame: μπορεί να χρησιμοποιεί το προηγούμενο και το επόμενο I-frame ή P-frame

Ένα B-frame μπορεί να εξαρτάται από ένα καρέ που έρχεται αργότερα χρονικά, επομένως αυτό το μεταγενέστερο καρέ πρέπει να αποθηκευτεί πρώτο. Έτσι, η σειρά αποθήκευσης διαφέρει από τη σειρά που βλέπετε στην οθόνη. Μια τυπική ακολουθία MPEG-2 μοιάζει ως εξής:

  • Σειρά προβολής: B1 B2 I3 B4 B5 P6 B7 B8 P9 B10 B11 P12
  • Σειρά αποθήκευσης: I3 B1 B2 P6 B4 B5 P9 B7 B8 P12 B10 B11

Πώς φαίνονται οι τιμές

Το Has B Frames είναι ένας ακέραιος αριθμός. Το FFmpeg περιγράφει την τιμή ως το μέγεθος του buffer αναδιάταξης καρέ στον αποκωδικοποιητή. Για βίντεο MPEG-2, το FFmpeg ορίζει 2 τιμές:

  • 0: βίντεο χαμηλής καθυστέρησης μόνο με I-frames και P-frames
  • 1: βίντεο με I-frames, P-frames και B-frames

Οι κωδικοποιητές H.264 και HEVC μπορούν επίσης να κρατούν μερικά B-frames ως αναφορές για άλλα καρέ. Τα αρχεία δοκιμής του FFmpeg για H.264 δείχνουν πώς αυτό αλλάζει την τιμή. Τα ονόματα των αρχείων δίνουν τις ρυθμίσεις του κωδικοποιητή:

  • Το πολύ 3 B-frames στη σειρά, κανένα αποθηκευμένο ως αναφορά: 1
  • Το πολύ 3 B-frames στη σειρά, μερικά αποθηκευμένα ως αναφορές: 2
  • Το πολύ 4 B-frames στη σειρά, μερικά αποθηκευμένα ως αναφορές: 2

Άρα η τιμή δεν είναι ένας απλός αριθμός B-frames. Το πρόγραμμα ffprobe εμφανίζει τον τύπο κάθε καρέ ως τιμή pict_type: I, P ή B. Το πεδίο NB Frames δίνει τον αριθμό των καρέ, αλλά όχι τους τύπους τους.

Από πού προέρχεται η τιμή

Το όνομα του πεδίου προέρχεται από το FFmpeg, του οποίου το πρόγραμμα ffprobe εκτυπώνει has_b_frames για ροές βίντεο. Μια ροή H.264 μπορεί να δηλώνει τον αριθμό στη δική της κεφαλίδα. Αν η κεφαλίδα δεν δηλώνει τον αριθμό, το FFmpeg τον υπολογίζει από τα καρέ και τους χρόνους τους.

Οι ρυθμίσεις του κωδικοποιητή καθορίζουν αν ένα βίντεο χρησιμοποιεί B-frames. Στο FFmpeg και στον κωδικοποιητή Microsoft H.264, μια ρύθμιση 0 απενεργοποιεί τα B-frames.

Ποια αρχεία το φέρουν

Το πεδίο υπάρχει μόνο για ροές βίντεο. Μπορείτε να δείτε το πεδίο για βίντεο σε αρχεία MP4, MOV, MKV, WebM και AVI. Ένα αρχείο MOV με αναδιατεταγμένα καρέ αποθηκεύει επίσης έναν πίνακα με τον χρόνο μεταξύ αποκωδικοποίησης και προβολής για κάθε καρέ.

Ο κωδικοποιητής (codec) καθορίζει αν τα B-frames είναι δυνατά. Το βίντεο MPEG-2 και το προφίλ H.264 Main μπορούν να τα χρησιμοποιούν, αλλά το προφίλ H.264 Baseline δεν μπορεί. Το VP8, ένας κωδικοποιητής που χρησιμοποιείται σε αρχεία WebM, δεν έχει B-frames, επειδή τα καρέ του δεν προβλέπονται ποτέ από μεταγενέστερα καρέ.

Γιατί έχει σημασία

Τα B-frames βοηθούν να παραμένει ένα βίντεο μικρό σε μέγεθος, αλλά προσθέτουν καθυστέρηση. Ο κωδικοποιητής πρέπει να αναδιατάξει τα καρέ πριν τα αποθηκεύσει, και αυτή η καθυστέρηση εξαρτάται από τον αριθμό των B-frames στη σειρά.

Ένα αναδιατεταγμένο βίντεο έχει επίσης 2 διαφορετικούς χρόνους για κάθε καρέ: πότε θα αποκωδικοποιηθεί το καρέ και πότε θα προβληθεί. Το FFmpeg δίνει και τους δύο ως timestamps στη χρονική βάση της ροής.

Meta Keys