Έχω δει καταγγελίες εμφανίζονται στο Twitter ότι οι χρήστες αναστέλλουν τους λογαριασμούς τους μετά από χρόνια tweets που τυχαίνει να περιέχουν μουσική που προστατεύεται από πνευματικά δικαιώματα. Ας πούμε λοιπόν ότι, όπως εγώ, έχετε έναν λογαριασμό Twitter άνω των 10 ετών και θέλετε να διαβάσετε τα παλιά σας tweets, ώστε να μπορείτε να τραβήξετε οποιοδήποτε τέτοιο βίντεο πριν το κάνει το Twitter — πώς θα το κάνετε αυτό;
Λοιπόν εδώ είναι το θέμα: η γραμμή εντολών του UNIX είναι απίστευτα ισχυρή αν ξέρετε πώς να τη χρησιμοποιήσετε. Σε αυτήν την ανάρτηση, θα σας δείξω πώς να χρησιμοποιήσετε το κέλυφος bash σε Linux ή Mac OS/X για να βρείτε αυτά τα βίντεο, ώστε να μπορείτε να τα αφαιρέσετε.

Το πρώτο πράγμα που πρέπει να κάνετε είναι να κατεβάσετε ολόκληρο το αρχείο σας στο Twitter. Υπάρχουν οδηγίες για το πώς να το κάνετε αυτό εδώ. Μόλις υποβάλετε το αίτημα, θα ενημερωθείτε από το Twitter εντός μιας ημέρας όταν είναι έτοιμη η λήψη. Αναμένεται ότι το αρχείο θα είναι αρκετά μεγάλο — στην περίπτωσή μου ήταν πάνω από 2 Gigs. Κατεβάστε αυτό το αρχείο και αποσυμπιέστε το.
Τη στιγμή της σύνταξης αυτού του κειμένου, όλα τα πολυμέσα σας θα βρίσκονται στο φάκελο data/tweet_media/οπότε cd σε αυτόν τον κατάλογο και δείτε πόσα αρχεία υπάρχουν:
Λοιπόν, ε… είναι πολλά αρχεία. Ας δούμε πόσα από αυτά είναι βίντεο και αν μπορούμε να τα μετακινήσουμε σε ξεχωριστό κατάλογο:
mkdir mp4
mv *.mp4 mp4/
cd mp4/
ls -l | wc -l
2270
Λοιπόν, αυτό είναι λίγο λιγότερο απαίσιο. Ακόμα πολλά αρχεία όμως. Τι θα γινόταν αν όλα αυτά τα αρχεία δεν είχαν ήχο; Θα μπορούσα να το περιορίσω ακόμα περισσότερο;
Ευτυχώς υπάρχει μια εφαρμογή γραμμής εντολών που ονομάζεται ffmpeg τα οποία μπορούν να χρησιμοποιηθούν για τη μετατροπή αρχείων βίντεο, καθώς και για την επιθεώρηση του περιεχομένου τους. Η συγκεκριμένη εντολή για να γίνει αυτό είναι ffmpeg -i, ωστόσο δεν ξέρω πώς θα ήταν η έξοδος για ένα αρχείο ήχου, οπότε υποθέτω ότι πρέπει να επιθεωρήσω κάθε αρχείο και μετά να περάσω στην έξοδο εκ των υστέρων. Αλλά η γραμμή εντολών του UNIX το καθιστά εύκολο, ελέγξτε αυτό:
for FILE in *.mp4; do ffmpeg -i ${FILE} 2>&1; done | pv -l > output.txt
55.1k 0:01:19 [ 694 /s] [ <=>]
Συμβαίνουν πολλά εκεί μέσα, οπότε ας τα δούμε:
- για FILE σε *.mp4 — Αυτό θα εκτελέσει έναν βρόχο μεταξύ κάνω και Έγινε που θα κατοικήσει $FILE για κάθε όνομα αρχείου που ταιριάζει με το *.mp4πρότυπο.
- 2>&1 — Αυτό λέει το τυπικό σφάλμα να πάει στο ίδιο μέρος που πηγαίνει η τυπική έξοδος, έτσι ώστε να μπορεί να διοχετευθεί σε…
- pv —Pipeviewer! Αυτή είναι μια τακτοποιημένη εφαρμογή γραμμής εντολών που δείχνει την κατάσταση του κειμένου που ρέει μέσα από αυτήν, ώστε να γνωρίζετε ότι έχει γίνει δουλειά. Από εκεί, το κείμενο πηγαίνει στο
- > output.txt — Πού θα γραφτεί η έξοδος. Γράφουμε τα αποτελέσματα αυτής της λειτουργίας (καθώς και άλλων) σε ένα αρχείο, επειδή η επιθεώρηση ενός αρχείου που περιέχει την έξοδο είναι ευκολότερη από την επανειλημμένη εκτέλεση μιας χρονοβόρας εντολής.
Όπως μπορείτε να δείτε, 55100 γραμμές γράφτηκαν σε διάστημα 79 δευτερολέπτων. Τώρα που έχουμε όλες τις λεπτομέρειες κάθε βίντεο, ας αναζητήσουμε συμβολοσειρές που σχετίζονται με τον ήχο:
cat output.txt | grep -i audio | wc -l
189
Φανταστικός! 189 αγώνες, ας χρησιμοποιήσουμε λοιπόν κεφάλι -n2για να επιθεωρήσουμε ένα ζευγάρι και μπορούμε να δούμε ότι μοιάζει με δεδομένα ήχου:
cat output.txt | grep -i audio |head -n2
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, mono, fltp, 127 kb/s (default)
Τώρα λοιπόν που ξέρουμε τι να αναζητήσουμε, θέλουμε να αναφέρουμε μόνο αρχεία που έχουν δεδομένα ήχου — πώς να το κάνουμε αυτό; Ας ξεκινήσουμε κάνοντας αυτό το for loop από πριν, αλλά εκτυπώνοντας μόνο το όνομα του αρχείου (με ηχώ) και αναζήτηση για τη συμβολοσειρά „Audio“:
for FILE in *.mp4; do echo ${FILE}; ffmpeg -i ${FILE} 2>&1 | grep Audio; done | pv -l > output-audio.txt
head -n6 output-audio.txt
10344303167420001–7M6TBTo3zGLZO0La.mp4
10344303167420002–7M6TBTo3zGLZO0La.mp4
10344303167420003–7M6TBTo3zGLZO0La.mp4
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
10344303167420004–7M6TBTo3zGLZO0La.mp4
10344303167420005–7M6TBTo3zGLZO0La.mp4
Όπως μπορούμε να δούμε κοιτάζοντας το αρχείο εξόδου, έχουμε τώρα το όνομα κάθε αρχείου και μερικά από αυτά τα αρχεία έχουν ήχο. Λοιπόν, πώς παίρνουμε μόνο τα ονόματα των αρχείων που έχουν ήχο; Grep για τη διάσωση:
cat output-audio.txt | grep -B 1 Audio | grep “\.mp4” > files.txt
ο -ΣΙΟ διακόπτης στο grep λέει στο grep όχι μόνο να εκτυπώνει γραμμές που περιέχουν τη συμβολοσειρά „Audio“, αλλά να εκτυπώνει επίσης 1 γραμμή πριν από κάθε γραμμή που ταιριάζει και γνωρίζουμε από την προηγούμενη εντολή ότι η εν λόγω γραμμή περιέχει το όνομα αρχείου. Στη συνέχεια, το τελικό grep θα εξαγάγει μόνο το όνομα του αρχείου. Ας δούμε πόσα αρχεία ταιριάζουν:
cat files.txt | wc -l
189
Καθόλου άσχημα — ξεκινήσαμε με πάνω από 10.000 αρχεία και περιορίσαμε αυτά που χρειαζόμαστε για αναζήτηση σε κάτω από 200! Τώρα ας βασιστούμε σε αυτά που ήδη γνωρίζουμε για τη γραμμή εντολών του UNIX για να μετακινήσουμε αυτά τα αρχεία σε άλλο κατάλογο:
mkdir audio
for FILE in $(cat files.txt ); do mv ${FILE} audio/; done
cd audio
ls -l | wc -l
189
Εξαιρετική! Μπορούμε τώρα να περάσουμε από αυτά τα αρχεία με τον ελεύθερο χρόνο μας! Εάν είστε σε Mac, μπορείτε να τον κατάλογο σε ένα παράθυρο Finder πληκτρολογώντας Άνοιξε .και ξεκινήστε να διαβάζετε αυτά τα αρχεία. (Εάν είστε σε Linux, δεν ξέρω τι να σας πω.)

Υπάρχουν τόσα περισσότερα προσεγμένα και ενδιαφέροντα πράγματα που μπορείτε να κάνετε με τη γραμμή εντολών και αυτή η ανάρτηση μόλις και μετά βίας χαράζει την επιφάνεια. Θα ήθελα να ενθαρρύνω όποιον διαβάζει αυτήν την ανάρτηση να συνεχίσει να σκάβει και να ελέγξει βοηθητικά προγράμματα όπως sed , οκ, tr, rsyncκαι ιδιαιτερα δδγια να δείτε τι άλλα συναρπαστικά πράγματα μπορείτε να κάνετε στο CLI.
Ελπίζω ότι αυτή η ανάρτηση ήταν χρήσιμη. Μη διστάσετε να αφήσετε ένα σχόλιο παρακάτω ή να με βρείτε στο Twitter: https://twitter.com/dmuth
Απολαμβάνω!