Youtube-dl και ffmpeg: Λήψη Online Video από συγκεκριμένο χρονικό σημείο

Σε αυτή τη δημοσίευση θα δούμε πως μπορούμε να κάνουμε λήψη ενός βίντεο από το YouTube με τη χρήση του youtube-dl και του ffmpeg, από συγκεκριμένο χρονικό σημείο και διάρκειας όσο εμείς ορίσουμε.
Πρόσφατα χρειάστηκα κάτι τέτοιο και κατέληξα στο συνδυασμό αυτών των δύο προγραμμάτων, μιας και το youtube-dl δεν έχει ενσωματώσει ακόμη τέτοια λειτουργία.

Τι είναι το Youtube-dl;
http://wp.me/p3HF9I-Py
https://rg3.github.io/youtube-dl

Τι είναι το ffmpeg;
https://www.ffmpeg.org/

Εχθές χρειάστηκε να δημιουργήσω ένα βίντεο και γι’ αυτό το σκοπό θα χρειαζόμουν τρία πράγματα.

1) Ένα κομμάτι 10 δευτερολέπτων από συγκεκριμένο βίντεο στο Youtube
2) Ένα άλλο κομμάτι 30 δευτερολέπτων από συγκεκριμένο βίντεο στο Youtube
3) Ένα πρόγραμμα Video Editing (αυτό το είχα ήδη, Kdenlive).

Το πρόβλημά μου ήταν ότι τα βίντεο που χρειαζόμουν από το Youtube ήταν περί τα 1,2GB το κάθε ένα. Αντί λοιπόν να κάνω λήψη 2,4GB για 10 και 30 δευτερόλεπτα που χρειαζόμουν, ή αντί να ψάχνω να βρω μήπως και υπάρχει μικρότερη version, είπα να ψάξω τι γίνεται με το youtube-dl.
Δυστυχώς δεν υπάρχει κάποια τέτοια παράμετρος, ακόμη, αλλά ευτυχώς υπάρχει λύση με τη συνδυαστική χρήση του ffmpeg.

Έτσι, αφού το δοκίμασα και έκανα τη δουλειά μου επιτυχώς είπα να το φτιάξω ως script, για περισσότερη ευκολία, και φυσικά να το μοιραστώ με όλους.

Το script φιλοξενείται στο github και εννοείται ότι επιδέχεται βελτιώσεων, fork και ότι άλλο θέλει ο καθένας. Όσοι/ες ασχολείστε με github τα γνωρίζετε ήδη αυτά.

Για την ώρα το αφήνω ως έχει, μιας και τη δουλειά που θέλω την κάνει μια χαρά.

Ακολουθεί ο τρόπος χρήσης.

Η δοκιμή έχει γίνει σε Xubuntu 17.10, αν και αυτό λίγη σημασία έχει μιας και τα δυο προγράμματα είναι Distribution Agnostic. Έχει δοκιμαστεί και λειτουργεί σωστά μόνο σε συνδέσμους από το YouTube.

Καταρχήν κάνουμε λήψη το script και το αποθηκεύουμε σε κάποια διαδρομή στο λειτουργικό μας. Προσωπικά προτιμώ τη /usr/local/bin.

 sudo wget -O /usr/local/bin/ytdl-ffmpg https://raw.githubusercontent.com/NikTh/youtube-dl-ffmpeg/master/ytdl-ffmpg 

Έπειτα του δίνουμε δικαιώματα εκτέλεσης.

sudo chmod 755 /usr/local/bin/ytdl-ffmpg

Μερικές διευκρινήσεις

Γιατί στις παραπάνω εντολές είναι απαραίτητη η χρήση sudo;
Η διαδρομή που χρησιμοποιούμε θέλει δικαιώματα διαχειριστή για να προσπελαστεί. Μπορούμε να αποθηκεύσουμε το script σε άλλη διαδρομή (πχ /home/nicktux/bin) όπου δεν χρειάζεται η χρήση sudo.

Το script χρειάζεται δικαιώματα διαχειριστή για να το τρέξω;
Όχι.
Χρειάζεται όμως να έχετε εγκατεστημένα τα δυο προγράμματα. Youtube-dl και ffmpeg.

Θέλω το script με άλλο όνομα.
Μπορείτε να ονομάσετε το script όπως θέλετε. Εγώ το ονομάζω ytdl-ffmpg. Αντικαταστήστε το στην wget παραπάνω (μετά την παράμετρο -O) με το όνομα το όποιο εσείς επιθυμείτε.

Τι θα χρειαστούμε

1. Το χρονικό σημείο από όπου θα ξεκινήσει η λήψη.
Αυτό το βρίσκουμε αν κάνουμε δεξί κλίκ επάνω στο βίντεο στο YouTube και «Αντιγράψτε τώρα τη διεύθυνση URL του βίντεο»

Έπειτα κάνουμε επικόλληση τη διεύθυνση είτε σε έναν κειμενογράφο, είτε σε μια άλλη καρτέλα στο πρόγραμμα περιήγησης, χωρίς να είναι ανάγκη να επισκεφτούμε το σύνδεσμο. Από τον επικολλημένο σύνδεσμο παίρνουμε ότι γράφει μετά το «t=»

Στη παραπάνω εικόνα βλέπουμε τον αριθμό «49»

2. Τον σύνδεσμο του βίντεο, καθαρό. Δηλαδή χωρίς σύμβολα «&» κλπ.
Στο παράδειγμά μας είναι https://www.youtube.com/watch?v=iu00nfC_NAE

3. Το χρόνο, σε δευτερόλεπτα, για τον οποίο θα κάνει λήψη.
Αν δηλαδή δώσουμε τον αριθμό 40, τότε θα κάνει λήψη το βίντεο από το χρονικό σημείο 49 (Τεσσαρακοστό ένατο δευτερόλεπτο) και για 40 δευτερόλεπτα μετά, και θα σταματήσει.
Αυτόν μπορούμε να τον βρούμε/δούμε τοποθετώντας τον κέρσορα του ποντικιού στο σημείο που θέλουμε και υπολογίζοντας τη διαφορά.

Στο παράδειγμά μας, 1:26(86) – 49 = 37 (δευτερόλεπτα)

Κρατάμε λοιπόν τα παρακάτω στοιχεία σε έναν κειμενογράφο:

1) 49
 2) https://www.youtube.com/watch?v=iu00nfC_NAE
 3) 37 

Και εκτελούμε το script χωρίς καμία παράμετρο. Σε κάθε στοιχείο που εισάγουμε πατάμε Enter.

Προσέξτε ότι πρέπει να δώσουμε και ένα όνομα για το εξαγόμενο αρχείο. Χωρίς κενά και χωρίς επεκτάσεις.
Πατώντας Enter μετά από αυτό, εφόσον τα στοιχεία που έχουμε εισάγει είναι σωστά, θα κάνει λήψη το αρχείο από το YouTube και θα το αποθηκεύσει στον τρέχων κατάλογο.


Until next time …
Thanks for reading!

4 thoughts on “Youtube-dl και ffmpeg: Λήψη Online Video από συγκεκριμένο χρονικό σημείο

    1. Δοκίμασα να περάσω κι εγώ πιο γενικές παραμέτρους (bestvideo bestaudio), πριν κάνω τη δημοσίευση και φτιάξω το script, αλλά κόλλησε και δεν ξέρω το γιατί. Έτσι αποφάσισα να το φτιάξω με συγκεκριμένες, πχ. -f 22 είναι στο 99% το καλύτερο format. Για δοκίμασε το έτσι. Έτσι όπως το αναφέρω στη δημοσίευση δηλαδή.
      Εκτός και αν λείπει κάτι άλλο από το Debian.

      1. Στην αρχή το έτρεξα όπως το είχες , δηλαδή με -f 22, αλλα χωρίς επιτυχία… Το -f 22 δεν ταιριάζει παντού. Κανονικά πρέπει κάποιος να τρέξει πρώτα youtube-dl -F url ώστε να δει τα available formats και απο εκεί να επιλέξει αυτά που θέλει με τους κωδικούς (πχ -f 135+122). Δεν μπορώ να καταλάβω τι πάει στραβά στο Debi.

      2. Από αυτά που έχεις επικολλήσει στο Pastebin φαίνεται ότι κάτι έχεις κάνει λάθος ;;

        Unable to find a suitable output format for 'https://r2---s........

        Ίσως να μην ευθύνεται το Debian.

        Αυτό που λες με τους κωδικούς ( -f ή -F) το γνωρίζω. Απλά στο 90% των περιπτώσεων το -f22 αντιστοιχεί στο καλύτερο mp4 (best). Τώρα αν κάποιος θέλει άλλου είδους format, μπορεί να ακολουθήσει αυτά που λες παραπάνω.

Συμβάλετε κι εσείς με ένα σχόλιο

Εισάγετε τα παρακάτω στοιχεία ή επιλέξτε ένα εικονίδιο για να συνδεθείτε:

Λογότυπο WordPress.com

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό WordPress.com. Αποσύνδεση / Αλλαγή )

Φωτογραφία Twitter

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Twitter. Αποσύνδεση / Αλλαγή )

Φωτογραφία Facebook

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Facebook. Αποσύνδεση / Αλλαγή )

Φωτογραφία Google+

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Google+. Αποσύνδεση / Αλλαγή )

Σύνδεση με %s