#1 Le 25/07/2020, à 10:06
- cracolinux
[script]Vidéo Youtube avec ou sans sous-titres dans VLC
Bonjour à tous,
Idéal si comme moi vous regardez pas mal de vidéo en anglais et que vous avez parfois besoin des sous-titres pour vous aider à comprendre ( les accents...)
Dépendances : Yad, xclip et VLC
sudo apt install yad xclip vlc
Le script crée un répertoire tmpvtt/ dans votre dossier perso pour y stocker les sous-titres, vous pouvez le supprimer quand vous voulez.
Usage : Copiez l'URL d'une vidéo youtube, lancez le script, collez l'URL au besoin et choisir entre mode classique ou sub(= sous-titres)
#!/bin/bash
actual_clip=$(xclip -o)
retour=$(yad --title="Youtube starter" --width 800 --form --center \
--field="URL:" "$actual_clip" \
--field="Service:":CB "Classique!Sub" \ )
case $? in
1) # bouton annuler
exit ;;
252) # touche escape
exit ;;
esac
url=${retour%%|*} # suppression de la plus longue chaine après le caractère |
choix=${retour#*|} # suppression de la plus courte chaine avant le caractère |
choix=${choix%|} # suppression du dernier |
if [ "$choix" = "Classique" ] ; then
vlc "$url"
else
mkdir $HOME/tmpvtt
cd $HOME/tmpvtt
# 1 - on récupere le nom de base de la vidéo
name=$(youtube-dl --get-filename -o "%(title)s" "$url") # ok
# 2 - on liste les subs disponibles
outsub=$(youtube-dl --list-subs --skip-download "$url")
if [[ $outsub =~ "has no subtitles" ]] && [[ $outsub =~ "Available automatic captions" ]] ; then
# si on a des sous titres autogénérés
youtube-dl -o "%(title)s" --write-auto-sub --skip-download "$url"
vlc --sub-file "$name.en.vtt" "$url"
elif [[ $outsub =~ "Available subtitles for" ]] ; then
# si on a des sous titres
lang=$(echo "$outsub" | grep -A 2 "Available subti" | grep -A1 "Language formats" | grep -v "Language" | cut -d " " -f 1)
youtube-dl -o "%(title)s" --write-sub --skip-download "$url"
vlc --sub-file "$name.$lang.vtt" "$url"
else
# on lance une lecture classique si aucun sub dispo
vlc "$url"
fi
fi
Ici sous Lubuntu, je lance le script avec win + u. Voici l'extrait de mon fichier Lubuntu-rc.xml
<keybind key="W-u">
<action name="Execute">
<command>bash /home/your/scripts/bin/youtube</command>
</action>
</keybind>
Vos remarques et suggestions sont bienvenues.
Merci à Watael
Dernière modification par cracolinux (Le 02/10/2020, à 09:15)
Hors ligne
#2 Le 25/07/2020, à 10:30
- Watael
Re : [script]Vidéo Youtube avec ou sans sous-titres dans VLC
salut,
IFS='|' read -r url choix reste <<<"$retour"
à test simple, test simple :
if test "$choix" = "Classique"
on peut se passer de grep avec bash (et là, les crochets doubles sont utiles) :
re="(has no subtitles|Available automatic captions)"
if [[ $outsub =~ $re ]]
et, enfin, les accolades, si elles ne signifient/signalent rien, sont aussi inutiles que le gras souligné dans un message entier pour faire ressortir le passage important.*
--
* le souligné ne passe pas sur Chromium.
et chez vous ?
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 25/07/2020, à 11:44
- cracolinux
Re : [script]Vidéo Youtube avec ou sans sous-titres dans VLC
Merci de tes remarques!
salut,
IFS='|' read -r url choix reste <<<"$retour"
Je comprend cette ligne de code, c'est beau mais pour être honnête, je trouve ça moins lisible
à test simple, test simple :
if test "$choix" = "Classique"
C'est juste mais je n'ai jamais trop compris l’intérêt de cette écriture, d'autant qu'ici le script ne sera pas POSIX puisqu'on utilise les [[ ]] par la suite...je me suis souvent posé la question. Est-ce qu'il ne vaut mieux pas écrire tout ses tests de la même façon ??
on peut se passer de grep avec bash (et là, les crochets doubles sont utiles) :
re="(has no subtitles|Available automatic captions)" if [[ $outsub =~ $re ]]
C'est vraiment cool! merci
et, enfin, les accolades, si elles ne signifient/signalent rien, sont aussi inutiles que le gras souligné dans un message entier pour faire ressortir le passage important.*
C'est très juste, je corrige ça
Merci!
Hors ligne
#4 Le 25/07/2020, à 14:15
- Watael
Re : [script]Vidéo Youtube avec ou sans sous-titres dans VLC
si tu es sûr qu'il n'y a que deux éléments dans $retour :
url="${retour%%|*}"
choix="${retour##*|}"
quand tu n'utilises pas les fonctionnalités d'une commande ([[ par exemple), autant ne pas l'utiliser.
c'est comme pour les accolades : les crochets doubles, puisqu'ils permettent des choses que ne fait pas test, ils soulignent qu'il s'agit de plus qu'un simple test.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#5 Le 28/07/2020, à 10:03
- cracolinux
Re : [script]Vidéo Youtube avec ou sans sous-titres dans VLC
si tu es sûr qu'il n'y a que deux éléments dans $retour :
url="${retour%%|*}" choix="${retour##*|}"
Je connaissais cette méthode de suppression de chaîne pour l'avoir utilisé quelque fois dans le passé.
Je me suis posé la question de savoir pourquoi je ne l'utilisais pas davantage et encore une fois, l'idée de la lisibilité du code m'est tout de suite venue à l'esprit.
Cependant, je trouve ça dommage de passer à coté de la puissance de cette écriture.
En y réfléchissant, je me suis rendu compte que je n'avais tout simplement pas de moyen mnémotechnique pour me souvenir de l'écriture et que par conséquent, il me fallait à chaque fois faire une recherche dans la doc pour retrouver comment l'utiliser. Et finalement, je préferais toujours un pipe + cut, plus lisible d'une part et que j'ai bien mémorisé d'autre part.
Là j'ai creusé (pas longtemps hein...) pour trouver un petit mnémo qui d'ailleurs doit être voulu.
# est le caractère utilisé en début de ligne pour signifier un commentaire et de plus il est situé sur la partie gauche de nos claviers
% est lui en fin de ligne pour les calculs de pourcentage et de plus il est situé sur la partie droite de nos claviers
Si ça peut en aider d'autres à faire rentrer ça dans leur mémoire!
quand tu n'utilises pas les fonctionnalités d'une commande ([[ par exemple), autant ne pas l'utiliser.
c'est comme pour les accolades : les crochets doubles, puisqu'ils permettent des choses que ne fait pas test, ils soulignent qu'il s'agit de plus qu'un simple test.
Tu as encore raison!
Hors ligne
#6 Le 02/10/2020, à 09:16
- cracolinux
Re : [script]Vidéo Youtube avec ou sans sous-titres dans VLC
Petite maj pour gérer le bouton "annuler" et l'appui sur "echap"
Hors ligne
#7 Le 31/10/2020, à 13:57
- cracolinux
Re : [script]Vidéo Youtube avec ou sans sous-titres dans VLC
Les sous-titres sont pour le moment dans le dur : https://korben.info/youtube-dl-dans-la-sauce.html
Hors ligne