Exile on Keyboard St. - Blog sur Linux et Debian

Aller au contenu | Aller au menu | Aller à la recherche

lundi 8 mai 2017

Télécharger des vidéos avec la commande ligne youtube-dl

Pour regarder tranquillement des vidéos, rien de tel que d'être façe à son téléviseur avec la vidéo déjà enregistrée. De cette façon, on évite d'utiliser les applications pénibles de Free avec le clavier virtuel et aussi les éventuels problèmes réseau. Si c'est une vdéo de musique et que le téléviseur est branché sur l'ampli, c'est encore plus fun ! Enfin, l'écran 15 pouces de l'odinateur portable, des fois ça va bien !

Sous Linux, il existe une commande ligne très simple à utiliser, c'est youtube-dl, comprendre un "Downloader" pour YouTube.

On peut soir l'installer depuis le dépot de son système Linux, soit aller sur la page d'installation de youtube-dl. En deux commandes, c'est fait.

Voyons maintenant l'utilisation de youtube-dl.

Pour télécharger la vidéo " Ask Keith Richards: Open G Tuning":

youtube-dl https://youtu.be/6S9AJAQ8PLA?list=PLATxmOOSq8eKufX6xVjiTLj9M-dfuIsmi

On obtient alors le fichier: Ask Keith Richards - Open G Tuning-6S9AJAQ8PLA.webm

Par défaut, il semble que youtube-dl télécharge la vidéo dans un format libre: .mkv, .ogv, .webm, ce qui n'est pas toujours pour plaire au player de la Freebox.

Mais on peut obliger la ligne de commande à récupérer la vidéo dans un autre format, par exemple .mp4 comme suit:

youtube-dl --format mp4 https://youtu.be/6S9AJAQ8PLA?list=PLATxmOOSq8eKufX6xVjiTLj9M-dfuIsmi

Pour voir les format possibles sans rien télécharger:

youtube-dl --list-formats https://youtu.be/6S9AJAQ8PLA?list=PLATxmOOSq8eKufX6xVjiTLj9M-dfuIsmi

qui affiche entre autres:

[info] Available formats for 6S9AJAQ8PLA:
format code  extension  resolution note
249          webm       audio only DASH audio   54k , opus @ 50k, 588.49KiB
250          webm       audio only DASH audio   72k , opus @ 70k, 787.90KiB
171          webm       audio only DASH audio  119k , vorbis@128k, 1.20MiB
140          m4a        audio only DASH audio  127k , m4a_dash container, mp4a.40.2@128k (44100Hz), 1.42MiB
251          webm       audio only DASH audio  142k , opus @160k, 1.51MiB
160          mp4        256x144    DASH video   68k , avc1.4d400c, 30fps, video only, 602.81KiB
278          webm       256x144    144p  102k , webm container, vp9, 30fps, video only, 1.01MiB
133          mp4        426x240    DASH video  210k , avc1.4d4015, 30fps, video only, 1.76MiB
242          webm       426x240    240p  223k , vp9, 30fps, video only, 1.80MiB
134          mp4        640x360    DASH video  286k , avc1.4d401e, 30fps, video only, 2.41MiB
243          webm       640x360    360p  401k , vp9, 30fps, video only, 3.24MiB
135          mp4        854x480    DASH video  521k , avc1.4d401f, 30fps, video only, 4.43MiB
244          webm       854x480    480p  643k , vp9, 30fps, video only, 5.21MiB
136          mp4        1280x720   DASH video  923k , avc1.4d401f, 30fps, video only, 7.93MiB
247          webm       1280x720   720p 1390k , vp9, 30fps, video only, 11.49MiB
137          mp4        1920x1080  DASH video 2082k , avc1.640028, 30fps, video only, 19.71MiB
248          webm       1920x1080  1080p 2780k , vp9, 30fps, video only, 25.71MiB
17           3gp        176x144    small , mp4v.20.3, mp4a.40.2@ 24k
36           3gp        320x180    small , mp4v.20.3, mp4a.40.2
43           webm       640x360    medium , vp8.0, vorbis@128k
18           mp4        640x360    medium , avc1.42001E, mp4a.40.2@ 96k
22           mp4        1280x720   hd720 , avc1.64001F, mp4a.40.2@192k (best)

On voit notamment le dernier format, mp4, pour lequel est précisé le mot best, c'est le format pour avoir la meilleure qualité audio et vidéo. De manière générale utiliser ce format devrait vous donner une vidéo exploitable. Le format .mkv n'est par exemple apparemment pas compris par la Freebox.

youtube-dl peut aussi télécharger toute une playlist. Par exemple, j'ai utilisé la commande suivante pour la Playlist "Ask Keith":

youtube-dl --ignore-errors --format mp4 https://www.youtube.com/playlist?list=PLATxmOOSq8eKufX6xVjiTLj9M-dfuIsmi

l'option --ignore-errors étant présente à cause d'une erreur de signature qui entraine l'arrêt du téléchargement après la première vidéo.

youtube-dl dispose de nombreuses options permettant par exemple de continuer un téléchargerment commencé (--continue), d'extraire la piste audio de la vidéo (--extract-audio), et aussi des options pour obtenir des informations sur la vidéo: options commençant par --get-.

A vous de découvrir les options qui correspondent à vos besoins !

samedi 13 février 2016

Les options de la commande rm sous Linux

Sous Linux, la suppression de fichiers s'effectue avec la commande rm:

Par exemple:

rm file

SI un des fichiers n'existe pas, la commande rm le signale à l'utilisateur mais continue de supprimer les autres fichiers spécifiés:

rm file-not-found file
rm: impossible de supprimer « file-not-found »: Aucun fichier ou dossier de ce type

Ce mode de fonctionnement est très dangereux parce que si j'entre la commande:

rm to_remove *

et que par inadvertance, j'ai ajouté un espace entre 'to_remove' et '*', j'aurais droit au message suivant:

rm: impossible de supprimer « to_remove »: Aucun fichier ou dossier de ce type

Et la commande rm aura supprimé TOUS les fichiers du répertoire courant puisque le Shell aura interprété l'astérisque en ce sens !

Heureusement pour moi, si dans ce répertoire courant se trouvent aussi des répertoires, le message d'erreur de rm sera:

rm: impossible de supprimer « to_remove »: Aucun fichier ou dossier de ce type
rm: impossible de supprimer « folder1 »: est un dossier
rm: impossible de supprimer « folder2 »: est un dossier
rm: impossible de supprimer « folder3 »: est un dossier

puisque rm ne supprime les répertoires qu'en présence de l'option -r sur la ligne de commande.

Pour éviter de supprimer des fichiers que l'on souhaitait garder, il suffit de passer à la commande rm l'option -i comme suit:

rm -i a z c
rm : supprimer fichier « a » ? yes
rm: impossible de supprimer « z »: Aucun fichier ou dossier de ce type
rm : supprimer fichier « c » ? yes

C'est d’ailleurs une pratique courante (et saine !) de définir l'alias suivant:

alias rm='rm -i'

dans votre fichier .bash_aliases

On peut aussi utiliser -I qui ne demandera qu'une confirmation de suppression lorsqu'il y a plus de 3 fichiers:

touch file1 file2 file3 file4
user@machine:~/tmp$ rm -I file*
rm : supprimer tous les arguments ? 

dimanche 8 mars 2015

Lister précisément les processus du système Linux en Shell

Dans un script Shell, pour savoir si un programme tourne on a souvent recourt à une commande du genre:

ps -eaf | grep firefox

Et la sortie de la commande ps ressemble à:

1000      3207     1 13 07:30 ?        00:08:33 /opt/mozilla/firefox/firefox
1000      4592  3078  0 08:35 pts/0    00:00:00 grep firefox

Pour parser cette sortie, on commence par exclure le processus grep que l'on utilise pour filtrer les résultats de ps:

ps -eaf | grep firefox | grep -v grep

Pour n'obtenir que:

1000      3207     1 13 07:30 ?        00:08:33 /opt/mozilla/firefox/firefox

Une autre façon de le faire consiste à utiliser l'option -C de la commande ps qui permet de filtrer la sortie selon le nom d'une commande:

 ps -f -C firefox
UID        PID  PPID  C STIME TTY          TIME CMD
1000      3207     1 12 07:30 ?        00:09:12 /opt/mozilla/firefox/firefox

Mais lors du parsing, il me faudra enlever la première ligne avec les noms des colonnes.

D'où l'intérêt de recourir à la commande pgrep qui renvoie uniquement le PID du processus trouvé:

pgrep firefox
3207

Attention, le flag -f de pgrep n'a pas le même usage que celui de ps. ps affiche la ligne de commande avec -f alors que pgrep cherche la pattern fournie dans toute la ligne de commande au lieu de seulement le nom du process (Quand -f n'est pas présent).

Donc pgrep -f firefox donnera le même résultat que pgrep firefox ; par contre pgrep mozilla ne renverra aucun résultat.

Comme ps, pgrep peut lister uniquement les processus d'un utilisateur donné:

pgrep -u root sshd

On peut aussi se contenter de compter les processus correspondant aux critères donnés avec le flag -c.

D'autres options intéressantes existent comme par exemple celle qui permet de ne lister que le dernier processus lancé.

mardi 8 avril 2014

bash: positionner une variable d'environnement pour un seul appel de commande

Vous connaissez probablement la syntaxe de bash qui permet d'éxécuter une commande si la commande précédente a réussie:

command1 && command2

ou celle qui permet d'éxécuter une commande en cas d'échec d'une première commande:

command1 || command2

En Shell on peut aussi lancer deux commandes successivement et ce indépendamment du code retour de la première commande:

command1; command2

Mais connaissez-vous la syntaxe suivante de bash:

TZ="Europe/London" date

Cette syntaxe particulière positionne la variable d'environnement TZ à la valeur "Europe/London" et exécute ensuite la commande date avec cette variable d'environnement positionnée. Cela a évidemment l'effet d'afficher la date qu'il est à Londres.

On aurait pu aussi procéder comme ceci:

export TZ="Europe/London" && date

Mais dans ce cas l'export fait que la variable d'environnement TZ "persiste" dans le Shell courant. Ce qui fait que l'heure affichée désormais dans ce terminal sera celle de Londres !

Alors qu'avec la première syntaxe, la variable TZ n'est positionnée que pour la commande qui suit ; la commande date.

Moralité, la syntaxe:

TZ="<Timezone>" date

permet d'obtenir la date dans un autre fuseau horaire que le notre sans changer pour autant notre fuseau horaire.

Enfin, précisons pour finir que la commande date regorge de facilités pour convertir une date en une autre et que la lecture de sa man page est tout a fait recommandée.

dimanche 16 juin 2013

Afficher les permissions des fichiers en octal avec la commande stat

Lorsqu'il faut créer des répertoires ou donner des permissions aux fichiers sous Linux, les documentations d'installation des logiciels précisent bien souvent ces permissions en octal, plutôt que sous leur forme textuelle (par exemple: r-x).

Par exemple 777 pour donner tous les droits à tout le monde ou 755 pour donner les droits d'exécution et de lecture à tout le monde plus les droits d'écriture au propriétaire du fichier.

Malheureusement, la commande ls via son flag -l ne permet pas d'afficher les permissions des fichiers et répertoires en octal et il faut faire la conversion de tête.

C'est là que la commande stat entre en jeu via son flag -c qui précise le format d'affichage voulu.

Cette commande stat permet de préciser quelles informations on veut obtenir sur le fichier, et en particulier d'afficher les permissions en octal.

Par exemple:

stat -c '%A (%a) %n' Téléchargements/*.iso

qui donne le résultat suivant:

-rw-rw-rw- (666) Téléchargements/debian-7.0.0-amd64-netinst.iso

Si on veut se rapprocher de la sortie de la commande ls -l en ajoutant les permissions en octal, on pourra utiliser:

stat -c '%A (%a) %h %U %G %o %y %n' *

même si la façon d'afficher la date de dernière modification du fichier est différente de celle utilisée par ls -l.