Video και Audio

MPEG κόψιμο-ράψιμο

10/11/2010 12:00 μμ | parsifal από parsifal


MPEG κόψιμο-ράψιμο

 

 

__TOC__

 

 

==Εισαγωγή==

Σκοπός μας είναι να δουλέψουμε σε επίπεδο elementary stream, χωρίς να χρειαστεί να καταφύγουμε ενδιάμεσα σε επανακωδικοποίηση των video μας. Για να γίνει αυτό σωστά, είναι σκόπιμο να γνωρίζουμε τα παρακάτω.

 

Στα πρότυπα συμπίεσης video που ο αλγόριθμος ομαδοποιεί τα frames για καλύτερο αποτέλεσμα (π.χ. MPEG-1/2/4), κάθε ομάδα frames που προκύπτει έχει απαραίτητα ως πρώτο, ένα μοναδικό frame που λέγεται Keyframe ή Intra-Frame (I-Frame) και λειτουργεί ως σημείο αναφοράς για το επόμενο, το οποίο με τη σειρά του για το επόμενο κ.ο.κ. μέχρι να φτάσουμε ξανά σε νέο GOP (group of pictures), δηλαδή στο αμέσως επόμενο I-Frame. Αυτό σημαίνει ότι όταν κόβουμε video που έχουν συμπιεστεί με MPEG-τάδε, πρέπει το τμήμα να αρχίζει από I-Frame.

 

Τα ενδιάμεσα frames μπορεί να είναι 2 τύπων: P-Frames ή B-Frames. Στα πρώτα, η λογική της εξάρτησης λειτουργεί κατά τη φορά του βέλους του χρόνου. Δηλαδή, κάθε P-Frame αποτελεί αναφορά για το επόμενό του. Στα B-Frames συμβαίνει το εξής οξύμωρον. Για να αποκωδικοποιηθούν πλήρως, εξαρτώνται τόσο από το προηγούμενο P-Frame, όσο και από το επόμενο (B: Bidirectional, δικατευθυντικό). Γι' αυτό αν το video που κόβουμε χρησιμοποιεί B-Frames, πρέπει το τμήμα να τελειώνει σε P-Frame και όχι σε B.

 

 

 

==Απαιτούμενο λογισμικό==

Θα χρειαστούμε τα παρακάτω ελεύθερα διατιθέμενα προγράμματα:

 

[TEMPLATE]Insomnia Wiki templates - Greek paths warning[/TEMPLATE]

 

 

 

==Χρήση DGIndex==

Αποσυμπιέζουμε το DGMPGDec στον υποκατάλογο της επιλογής μας και δημιουργούμε οπουδήποτε μας βολεύει ένα shortcut προς το εκτελέσιμο αρχείο DGIndex.exe. Εκκινούμε το πρόγραμμα:

 

010.png

 

Με F2 ή από το μενού File --> Open οδηγούμαστε σε διάλογο όπου επιλέγουμε ένα MPG/MPEG αρχείο. Αφού γίνει η επιλογή:

 

020.png

 

Παρατηρήστε ότι οδηγούμαστε σε παράθυρο που επιτρέπει περαιτέρω επιλογές, όπως να προσθέσουμε με ADD επιπλέον αρχεία στη λίστα, να αλλάξουμε τη σειρά τους με UP/DOWN και να αφαιρέσουμε κάποιο ή όλα τα αρχεία από τη λίστα με DEL/DEL ALL. Αν θέλουμε λοιπόν να ενώσουμε ένα η περισσότερα αρχεία MPG, μπορούμε με εύκολο τρόπο να το κάνουμε εδώ.

ΣΗΜΕΙΩΣΗ:
Όπως υπάρχουν περιορισμοί για το τί είδους αρχεία AVI μπορούμε να ενώσουμε χωρίς επανακωδικοποίηση σε επίπεδο stream π.χ. με το VirtualDubMod, έτσι ακριβώς υπάρχουν αντίστοιχοι για τα MPG αρχεία. Εν ολίγοις, πρέπει τα αρχεία να έχουν κοινή κωδικοποίηση (είτε όλα MPEG1 είτε όλα MPEG2), ίδια ανάλυση και ρυθμό καρέ ανά δευτερόλεπτο (όχι ένα MPG από PAL VideoCD ανάλυσης 352x288 pixels με 25 fps και ένα από NTSC VideoCD-352χ240-29.97 fps). Το ίδιο ισχύει και για τα χαρακτηριστικά του ήχου.

Για συνέχεια, κάνουμε κλικ στο OK:

 

030.png

 

Μπορούμε να κάνουμε προεπισκόπηση του video και με το slider να μετακινηθούμε σε διάφορα σημεία του. Επίσης, με F5 ή File --> Preview το πρόγραμμα αρχίζει να κάνει αποκωδικοποίηση του video stream (χωρίς ήχο) για να το προβάλλει στην οθόνη. Το ενδιαφέρον είναι ότι εμφανίζει δίπλα στο κυρίως παράθυρο και ένα επιπλέον χρήσιμο παράθυρο με τις ιδιότητες του video (μερικές είναι πολύ τεχνικές πληροφορίες και απευθύνονται σε χρήστες που έχουν κάποιες παραπάνω γνώσεις σχετικά με το MPEG format):

 

040.png

 

Με ESC σταματάμε το Preview. Μας ενδιαφέρει να χωρίσουμε το αρχείο μας σε elementary streams video και ήχου. Από τα μενού επιλέγουμε Audio --> Output Method --> Demux All Tracks και File --> Save Project and Demux Video. Θα μας ζητηθεί να ορίσουμε path και filename για το D2V αρχείο που θα παραχθεί. Πρόκειται για αρχείο που κάνει indexing στο αρχικό MPEG και δε θα χρειαστούμε αυτό για την όλη διαδικασία, αλλά τα δύο επιπλέον αρχεία που θα προκύψουν στην πορεία. Δίνουμε λοιπόν ένα όνομα και κλικ στο Save. Θα αρχίσει να γίνεται το indexing και μόλις τελειώσει θα ειδοποιηθούμε με ένα χαρακτηριστικό ήχο. Τώρα θα πρέπει να έχουνε προκύψει και τα αρχεία που θέλουμε:

 

050.png

 

Οι καταλήξεις των αρχείων εξαρτώνται από το είδος του αρχικού MPG. Στο παράδειγμά μας, το αρχικό MPG προέρχεται από VideoCD που ως γνωστόν χρησιμοποιεί MPEG1 συμπίεση video. Για αυτό η κατάληξη του elementary video stream είναι .m1v. Αν είχαμε MPG με MPEG2 video stream, η κατάληξη θα ήταν .m2v. Για τον ήχο, στις περισσότερες περιπτώσεις θα είναι με κατάληξη .mpa που αντιστοιχεί σε MPEG Layer 1 ή 2 audio stream. Συνήθως Layer 2, οπότε μπορούμε άνετα να αλλάξουμε την κατάληξή του σε .mp2 για να το χρησιμοποιήσουμε σε προγράμματα που το υποστηρίζουν.

 

 

 

==Χρήση Cuttermaran==

Τώρα εγκαθιστούμε το .NET Framework. Στη συνέχεια αποσυμπιέζουμε το αρχείο του Cuttermaran και τρέχουμε το Setup.Exe. Το μόνο που θα χρειαστεί να εισάγουμε είναι το path εγκατάστασης και αν επιθυμούμε να δημιουργηθούν shortcuts για τον τρέχον χρήστη μόνο ή για όλους. Μόλις ολοκληρωθεί η εγκατάσταση, εκκινούμε το πρόγραμμα από την καταχώρησή του στο Start Menu των Windows.

 

Για να ανοίξουμε το αρχείο με το elementary video stream, κάνουμε κλικ στο κουμπί 060.png επάνω αριστερά. Μόλις επιλέξουμε το σωστό αρχείο το πρόγραμμα θα αρχίσει να δημιουργεί ένα αρχείο με κατάληξη .info στο οποίο κρατάει πληροφορίες για την αποδοτικότερη και γρηγορότερη εργασία του. Σε πολύ μεγάλα MPG ο χρόνος δημιουργίας του αρχείου δεν είναι σημαντικά μεγάλος αλλά σίγουρα υπολογίσιμος, ειδικά σε παλιότερα PCs. Όταν ολοκληρωθεί, θα μας ζητηθεί αυτόματα και το αρχείο με το elementary audio stream που αντιστοιχεί στο συγκεκριμένο video. Το επιλέγουμε και οδηγούμαστε σε κάτι σαν το παρακάτω:

 

070.png

 

Το interface του προγράμματος είναι λίγο φορτωμένο αλλά έχουν σημειωθεί, με τη λογική σειρά που θα τα χρειαστούμε, τα στοιχεία του:

 

1. Το slider δείχνει το τρέχον σημείο του video στο οποίο βρισκόμαστε. Μπορούμε να το τραβήξουμε με το δείκτη του ποντικιού για γρηγορότερη μετακίνηση

2. Με κλικ στα βέλη, κινούμαστε ένα frame εμπρός ή πίσω

3. Προεπισκόπηση του τρέχοντος frame

4. Πληροφορίες για το τρέχον frame (χρόνος και είδος: I, P ή B, βλ. Εισαγωγή)

5. Αναπαραγωγή (playback) του video

6. Ορίζουμε το τρέχον frame ως αρχή ενός τμήματος αποκοπής. Το κουμπί απενεργοποιείται όταν δε βρισκόμαστε σε I-Frame

7. Ορίζουμε το τρέχον frame ως τέλος ενός τμήματος αποκοπής. Το κουμπί απενεργοποιείται όταν βρισκόμαστε σε B-Frame

8. Μετάβαση από το τρέχον frame στο αμέσως προηγούμενο ή επόμενο I, P ή B frame αντίστοιχα

9. Όταν έχουμε ορίσει frames στα βήματα 6 και 7, ενεργοποιείται αυτό το κουμπί που δημιουργεί ένα νέο τμήμα αποκοπής

10. Λίστα με τα τμήματα αποκοπής που έχουμε δημιουργήσει. Με δεξί κλικ σε κάποιο, μπορούμε να το διαγράψουμε, να το διορθώσουμε ή να κάνουμε ένα νέο τμήμα-καρμπόν του

11. Όταν έχουμε ορίσει έστω και ένα τμήμα αποκοπής, ενεργοποιείται αυτό το κουμπί που μας παρέχει προεπισκόπηση σε βάθος μερικών δευτερολέπτων της αρχής και του τέλους ενός τμήματος. Αν έχουμε ορίσει περισσότερα τμήματα, μπορούμε επίσης να έχουμε προεπισκόπηση του πως θα φαίνεται η μετάβαση (transition) από το ένα στο άλλο

12. Όταν έχουμε ορίσει το/τα τμήματα που θέλουμε να κοπούν, με το κουμπί αυτό οδηγούμαστε στην επόμενη φάση της διαδικασίας

 

Στο screenshot του παραδείγματος, έχουν επιλεγεί τα τμήματα από 01:00.000 έως 02:00.000 και 03:00.000 έως 04:00.000. Για την ακρίβεια, από το πρώτο I-Frame μετά τη θέση 01:00.000 έως το πρώτο μη B-Frame μετά τη θέση 02:00.000 κλπ. Στη μπάρα που ανήκει το κουμπί 1, φαίνονται με διαφορετικό χρώμα τα αντίστοιχα τμήματα. Κάνοντας κλικ στο κουμπί 12, θα οδηγηθούμε σε διάλογο με τις τελικές ρυθμίσεις:

 

080.png

 

090.png

 

Πέρα από τα ονόματα και το path των τελικών αρχείων, καλό είναι να μην πειράξουμε τις ρυθμίσεις της πρώτης καρτέλας, εκτός ίσως από το να βάλουμε τικ στο Recalculate bitrate. Στη δεύτερη καρτέλα, ενεργοποιούμε το Finally mux result streams και ορίζουμε path για το MPG που θα πάρουμε ως έξοδο. Κλικ στο κουμπί Cut και αν όλα πάνε καλά, θα πρέπει σύντομα να έχουμε αποτέλεσμα.

 

 

 

==Παραρτήματα==

===Μερικά χρήσιμα links===

Για πληρέστερη εξήγηση των δυνατοτήτων του Cuttermaran, επισκεφτείτε το δίγλωσσο (Αγγλικά-Γερμανικά) Wiki του προγράμματος

 

 

===Ιστορικό αλλαγών===

  • 20081025 - Αλλαγές στον TOC, προσθήκη «Ιστορικού αλλαγών», αλλαγή του Wiki standard notice σε νέα τυποποιημένη μορφή, hosting εικόνων στον Insomnia server (parsifal)
  • 20080413 - Προσθήκη Wiki standard notice στο τέλος του άρθρου (parsifal)
  • 20071115 - Προσθήκη παραπομπής στο Cuttermaran Wiki (parsifal)
  • 20071110 - Αρχική έκδοση (parsifal)