Contenu | Rechercher | Menus

Annonce

DVD, clés USB et t-shirts Ubuntu-fr disponibles sur la boutique En Vente Libre

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 25/07/2020, à 11: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 --height 200 --form \
--field="URL:" "$actual_clip" \
--field="Service::"CB "Classique!Sub" \ )

if [ "$?" = 1 ] ; then
    exit
fi

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 28/07/2020, à 11:48)


Pixup : postez vos images vite et bien - Wificheck : Aidez nous à vous aider

« Ne devenez jamais pessimiste. Un pessimiste a plus souvent raison qu'un optimiste, mais l'optimiste s'amuse plus — et aucun des deux ne peut arrêter la marche du monde. » R.Heinlein

Hors ligne

#2 Le 25/07/2020, à 11: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 ?


Welcome to sHell. · eval is evil.

Hors ligne

#3 Le 25/07/2020, à 12:44

cracolinux

Re : [script]Vidéo Youtube avec ou sans sous-titres dans VLC

Merci de tes remarques!

Watael a écrit :

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!


Pixup : postez vos images vite et bien - Wificheck : Aidez nous à vous aider

« Ne devenez jamais pessimiste. Un pessimiste a plus souvent raison qu'un optimiste, mais l'optimiste s'amuse plus — et aucun des deux ne peut arrêter la marche du monde. » R.Heinlein

Hors ligne

#4 Le 25/07/2020, à 15: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.


Welcome to sHell. · eval is evil.

Hors ligne

#5 Le 28/07/2020, à 11:03

cracolinux

Re : [script]Vidéo Youtube avec ou sans sous-titres dans VLC

Watael a écrit :

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!


Pixup : postez vos images vite et bien - Wificheck : Aidez nous à vous aider

« Ne devenez jamais pessimiste. Un pessimiste a plus souvent raison qu'un optimiste, mais l'optimiste s'amuse plus — et aucun des deux ne peut arrêter la marche du monde. » R.Heinlein

Hors ligne