Προς το περιεχόμενο

Κόψιμο AVI με variable bitrate audio


leftermann

Προτεινόμενες αναρτήσεις

καλησπέρα.

Παλεύω εδώ και ώρα να χωρίσω σε κομμάτια ένα μεγάλο αρχείο avi (είναι video clip στη σειρά, και θέλω να τα χωρίσω). Το audio stream είναι σε variable bitrate, οπότε κατέφυγα στο nandub (τα virtualdub και virtualdubmod μου έκαναν τον συγχρονισμό μαντάρα).

Όμως το nandub τα έχει μπερδέψει με τον εαυτό του... Κόβει από όπου θέλει αυτό, και όχι από εκεί που του λέω. Βάζω audio και video σε direct stream copy, μαρκάρω την αρχή και το τέλος του τμήματος που θέλω να σώσω, αλλά το νέο avi ξεκινάει 5 ή και παραπάνω sec νωρίτερα από εκεί που όρισα.

Έχει κανένας καμία ιδέα τι κάνω λάθος;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Το έχω γράψει σε πάρα πολλά posts, το VirtualDubMod κάνει μία χαρά τη δουλειά αρκεί στο διάλογο που σου πετάει για "rewrite MP3 header κλπ" να απαντήσεις Νο. Το Nandub έχει codebase αρκετά παλιότερο από του VDM και πρέπει να αποφεύγεται, είναι deprecated εντελώς. Όπως ακριβώς αν θες να κάνεις capture σε avi από μία συσκευή, δε θα το κάνεις με το VDM αλλά με το τελευταίο stable VirtualDub που έχει εξελιχθεί σαν κώδικας πολύ περισσότερο σε αυτόν τον τομέα.

 

Τώρα για το πρόβλημα που λες, μάλλον συμβαίνει επειδή δεν κανονίζεις ώστε το πρώτο frame του τμήματος που κόβεις να είναι Keyframe...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

parsifal μου συγνώμη, αλλά στην αναζήτηση που έκανα για variable bitrate κλπ, δεν βρήκα κανένα από αυτά τα ποστ σου. Ίσως δεν έψαξα καλά, sorry. Κάπου κάποιος πρότεινε το nandub για avi με vbr audio, γι αυτό και το δοκίμασα.

Αντιθέτως, η λύση βρέθηκε στο παραπάνω ποστ σου. Σ' ευχαριστώ για ακόμα μια φορά. Δεν το ήξερα αυτό για το keyframe. Για να είμαι ειλικρινής, δεν ξέρω καν τι είναι keyframe, τεσ'πά...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Θα προσπαθήσω να το εξηγήσω χωρίς να το παρακάνω στην πάρλα:

 

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

 

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

 

Στο VirtualDub(Mod) η status bar του προγράμματος δείχνει αντίστοιχα μέσα σε αγκύλες σε τί είδους frame βρίσκεσαι (π.χ. [K] για keyframe)...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

(άργησα να ποστάρω, είχα καμιά 200 κάμψεις να πάρω...)

 

Απλό, λιτό και κατανοητό... Thanx.

Αν το κατάλαβα καλά, το τμήμα που κόβω πρέπει οπωσδήποτε να αρχίζει με k, ενώ μπορεί να τελειώνει σε k ή σε p, αλλά όχι σε b.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ναι, έτσι ακριβώς. Δες και τί συνέβη έτσι όπως πήγες να το κόψεις εσύ (από http://www.virtualdub.org/docs_processing.html):

 

 

Q: I tried to cut out some frames in direct stream copy mode, and VirtualDub put them back in!?

 

A: You deleted a frame, but didn't delete the non-keyframes after it.

 

A keyframe is a frame that can be decoded on its own; a non-keyframe, or delta frame, is a difference from the previous frame and cannot be decoded if the frame before it is missing. VirtualDub always plays it safe and makes sure that all frames that you don't delete are decodable. This means that any non-keyframe that you include will force inclusion of any frames before it, back to and including the previous keyframe.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

πάντως βλέπω πως η απόσταση ανάμεσα σε δύο k παίζει από 3-4 frames, μέχρι 150+ frames. Ολίγον μπελάς αυτό, δεν μπορώ να κόψω εκεί που θέλω, αλλά ως και 2-3 sec παραπέρα...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Στις παραμέτρους των γνωστών codecs συμπίεσης, μπορείς συνήθως να ορίσεις και το maximum keyframe interval, δηλαδή πόσα το πολύ non-keyframes θα μεσολαβούν μεταξύ δύο keyframes. Αυτό δεν είναι περιοριστικό για το πόσο θα είναι το ελάχιστο τέτοιο νούμερο, εκεί ο codec έχει το ελεύθερο, βάσει ανάλυσης της πηγής, να βάζει και πιο συχνά keyframes (π.χ. όταν ανιχνεύει νέο πλάνο σε μία ταινία). Όταν έχεις μία αργή σκηνή σε σταθερό πλάνο, εκεί συνήθως το κάθε GOP θα εξαντλεί τα περιθώρια του keyframe interval.

 

Το πλεονέκτημα του να ορίζεις μεγάλο keyframe interval είναι ότι έχεις συνολικά λιγότερα τέτοια σε μία ταινία, άρα περισσότερα bits που μπορούν να κατανεμηθούν σε δύσκολες σκηνές (τα keyframes, επειδή πρέπει να είναι πλήρως αποκωδικοποιήσιμα από μόνα τους πιάνουν περισσότερα KBytes από τα άλλα frames). Το μειονέκτημα είναι ότι μειώνεται πολύ η ακρίβεια που έχεις στο editing. Γι' αυτό π.χ. πολλοί «βρίζουν» τις νέες βιντεοκάμερες με MPEG-2 και MPEG-4 και προτιμούν ακόμη τις MiniDV. Στα DV αρχεία, όλα τα frames είναι keyframes και έχεις μεγάλη ακρίβεια στο κόψιμο-ράψιμο. (1/25 sec σε PAL)...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

τα συγκεκριμένα avi τα έκανα capture από vhs (πάλι με δικές σου οδηγίες, και με πολύ καλά αποτελέσματα) με virtualdub και mjpeg (picvideo ή ffdshow). Ρίχνοντας μια γρήγορη ματιά δεν είδα κάποια δυνατότητα τέτοιας ρύθμισης. Θα το ψάξω καλύτερα στο επόμενο capture που θα κάνω (τώρα με αποσπά και το champions league :)).

Thanx και πάλι για την κουβεντούλα. Είναι γνώση από πολύ ψάξιμο, διάβασμα και γκουγλάρισμα συμπυκνωμένη σε λίγα πόστ...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Είσαι σίγουρος ότι έγιναν με MJPEG; Γιατί και σε MJPEG όλα τα frames είναι keyframes και μπορείς να κόψεις όπου θέλεις. Για ανέβασε όταν μπορείς ένα screenshot από VirtualDubMod --> File --> File Information...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Προφανώς το Ultra Video Converter (δεν το έχω υπ' όψιν μου) χρησιμοποίησε DivX codec με έτοιμα settings, χωρίς να σου δίνει πλήρη έλεγχο παραμετροποίησης του codec. Το maximum keyframe interval πάντως υπήρχε σίγουρα σε DivX 5, μπορεί να πέρασαν μερικά χρόνια από τότε που τον χρησιμοποιήσα τελευταία φορά (πριν στραφώ αποκλειστικά σε XviD), αλλά το θυμάμαι με σιγουριά. Ένας από τους λόγους που αποφεύγω γενικά πολύ ετοιματζίδικες εφαρμογές και κάνω πολλά πράγματα χειροκίνητα.

 

 

Well, η εξεταστική μου τελείωσε. Καιρός για κάνα νέο HOWTO, ίσως "Aποδοτικό video capture, post processing και μετατροπή σε διάφορα formats" να είναι καλό θέμα! :)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

είναι καλό να έχεις πλήρη έλεγχο, αρκεί να μπορείς να... τον ελέγξεις!!! Αν δεν είσαι και πολύ γνώστης (όπως εγώ), τα ετοιματζίδικα είναι αρκετά χρήσιμα. Όντως το ultra δεν δίνει καμία δυνατότητα, παρά μόνο μια κλίμακα ποιότητας σε στυλ "9-μέγιστη, 8-πολύ καλή, 7-αρκετά καλή" κλπ. Τώρα που μαθαίνω σιγά σιγά, μπορώ να αρχίσω να πειραματίζομαι περισσότερο. Το κακό είναι ο λίγος χρόνος, και αυτού του είδους ο πειραματισμός θέλει πολύυυυυ ώρα με την cpu στα κόκκινα... Βλέπεις, δουλειά, παιδιά, σκυλιά (όχι, σκυλιά δεν έχω)...

 

Αυτή η ιδέα για howto δε'ναι κακή, δε'ναι κακή...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • 5 μήνες μετά...

Σου έδωσα το link προς αυτό το thread, όχι για να ποστάρεις εδώ την απορία, αλλά για να διαβάσεις γιατί δε γίνεται unconditionally αυτό που ζητάς. Εξαρτάται από τον codec που έχει χρησιμοποιηθεί στο AVI, το keyframe interval κ.ά. Ας μην επαναλαμβάνομαι, διάβασε τα προηγούμενα posts...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...