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.

#151 Le 01/12/2009, à 21:31

wido

Re : Enregistreur de flash en cours de lecture (avec GUI)

intéressant je vais y regarder wink

essaye ça:

sudo dd if=/dev/mem of=/tmp/memoire.dump

http://www.sygus.net/dotclear/index.php … e-/dev/mem

j'ai testé la commande et en réponse:

dd if=/dev/mem of=/tmp/memoire.dump
dd: lecture de `/dev/mem': Opération non permise
2056+0 enregistrements lus
2056+0 enregistrements écrits
1052672 octets (1,1 MB) copiés, 0,0828816 s, 12,7 MB/s

j'ai édité le fichier sous vim c'est totalement illisible

EDIT: le cacheviewer doit signifier le cache du navigateur internet.

Dernière modification par wido (Le 01/12/2009, à 21:38)

Hors ligne

#152 Le 02/12/2009, à 13:18

bob_le_pecheur

Re : Enregistreur de flash en cours de lecture (avec GUI)

Pour Jiwa, on peut utiliser downloaderhelper pour télécharger une playliste.
clique droit sur l'icone => Préférence => Onglet Divers => cocher utiliser l'historique.
Lancer votre playlist et une fois fini :
Clique droit sur l'icone => historique => selectionner tout => télécharger.

Un petit script pour renommer les fichiers reçu :

ls *.flv > ListeFlvTmp.txt
cat ListeFlvTmp.txt | while read ligne
do
	var1=${ligne%_-_*}
	groupe=${var1%_-_*}
	titre=${var1#*_-_}
	nouveaunom="[$groupe][$titre].mp3"
	cp ./$ligne ./$nouveaunom
	rm -f ListeFlvTmp.txt
done

vous pouvez remplacer "cp" par "ren".

Sinon, j'ai tenté de faire un script pour les récupérer directement sans passer par firefox.
Je me suis appuyer également sur la page web :
http://blog.gaetan-grigis.eu/programmation/jouer-avec-javafx-json-http-et-jiwa/#comments
pour réaliser un script shell.
Pour l'instant il ne marche pas mais ça pourrait peut être servir à certain d'entre vous :

SongID=287862
TrackID=349387
url=$(echo "http://m.jiwa.fm/token.php?s=$SongID;tr=$TrackID")
retourtoken=$(wget -qO - $url)
var1=$(echo $retourtoken | cut -d "=" -f1)
var2=$(echo $retourtoken | cut -d "=" -f2)
var3=$(echo $retourtoken | cut -d "=" -f3)
var4=$(echo $retourtoken | cut -d "=" -f4)
var5=$(echo $retourtoken | cut -d "=" -f5)
var6=$(echo $retourtoken | cut -d "=" -f6)
var7="9PntjBazsyFj7zFP"
var8=$(echo $var1 | md5sum | cut -d " " -f1)
var9=$(echo $var1$var8$SongID | md5sum | cut -d " " -f1)
urlMP3="http://m.jiwa.fm/play.php?r=$var2&s=$SongID&t=$var9&m=$var4&from=0"
firefox $urlMP3

Dernière modification par bob_le_pecheur (Le 02/12/2009, à 16:56)

Hors ligne

#153 Le 03/12/2009, à 12:28

labaidai

Re : Enregistreur de flash en cours de lecture (avec GUI)

Ubuntu1988 a écrit :

Sans vouloir rentrer dans une polémique, c'est bien sympa de proposer ça mais il ne faut pas oublier que les majors ont peiné à accepter ce que faisais Deezer donc ça serait bien de rendre service à Deezer (et de nous rendre service par la même occasion) en évitant de télécharger dessus. La qualité est pas si mauvaise est il y a du choix, ça serait bête que les majors changent d'avis en voyant ça ....

Je ne cherche pas à jouer les flics ou quoi que ce soit mais j'exprime juste mon point de vue.

Déjà c'est du flash, donc c'est un site à éviter absolument.
En plus y'a quand même un peu que de la musique de merde (connaissent même pas Insomnium! Sorti de la starac et de Lady Gaga ils sont perdus. Ha si, y'a un peu de reggae pour les fumeurs de joints qui passent par là...).

Mais je suis d'accord sur le principe, c'est illégal. Ce qui me fait marrer c'est que ceux qui font ça sont les mêmes qui critiquent les gens qui piratent des logiciels sous Windows.
Ecoutez de la musique Libre bon sang !


Wine est le seul logiciel Linux étant pro-microsoft, ne l'utilisez pas !

Hors ligne

#154 Le 11/12/2009, à 21:18

enebre

Re : Enregistreur de flash en cours de lecture (avec GUI)

bonsoir,
ca ne fonctionne pas pour moi !

enebre@demo:~$ '/home/enebre/Musique/flash_recorder.py' 
/home/enebre/Musique/flash_recorder.py: line 2: Erreur de syntaxe près du symbole inattendu « ( »
/home/enebre/Musique/flash_recorder.py: line 2: `        self.var = Tkinter.StringVar()'

une idée ?

Dernière modification par enebre (Le 11/12/2009, à 21:18)

Hors ligne

#155 Le 12/12/2009, à 09:55

deeds

Re : Enregistreur de flash en cours de lecture (avec GUI)

Bonjour novice sur ubuntu je galère un peu avec ce script !!!
copier coller sur openoffice.org, sur le bureau, rendu exécutable , je le lance mais rien ne se passe ,j'ai pourtant installé les paquets sup comme expliqué dans le tuto...
Aucune barre d'enregistrement dans firefox???
smile Merci d'avance pour vos conseils

Hors ligne

#156 Le 17/12/2009, à 16:40

laurentb

Re : Enregistreur de flash en cours de lecture (avec GUI)

Salut,

super logiciel, mais comme la source en ligne n'inscrit pas de fichier flash dans /tmp, le logiciel ne peut rien encoder à la volée. Cette situation devient de plus en plus fréquente roll.

Laurent


Laurent Bellegarde, professeur de SVT, 33, Mérignac, France
GNU/Linux à l'ecole : www.abuledu.org, www.primtux.fr
lprod.org, Montage audio et vidéo libre
Lugs : www.euskalug.org, www.abul.org

Hors ligne

#157 Le 19/01/2010, à 11:56

Rizzen Virnn

Re : Enregistreur de flash en cours de lecture (avec GUI)

pas mal le script
faudra que j'essaye avec spotify


Ubuntu 12.04 32bit - Archlinux 64 bit
HP Pavilion dv6790eb
Blog

Hors ligne

#158 Le 19/01/2010, à 14:12

enebre

Re : Enregistreur de flash en cours de lecture (avec GUI)

y en a ras le bonbon de cette mascarade de droit d'auteur .
1) les vidéos et autres médias que l'on trouve sur le net sont la propriété de tous , s'il ne veulent pas ça,  qu'ils ne mettent rien en ligne .
2) la rémunération sans travailler , c'est bon pour les chômeurs , qui sont privés de rémunération normal à cause de la mauvaise gestion économique des pays
3) les médias en ligne c'est de la publicité qui leur est offerte gratuitement par le www (que le citoyen paye déja assez cher) , voudraient ils donc que les internautes rémunèrent leurs spot de pub !!!
4) Les concerts et représentations publics  sont les moyens correctes pour leurs rémunérations , (les villes y gagneraient, les commerces aussi, quand le peuple bouge l'argent circule et tout le monde est content).
5) bien sur lorsque l'espoir secret de ces nouveaux artistes est d'être l'égal de dieu et riche comme crésus ... alors c'est comme ça qu'ils cherchent à prendre l'argent dans la poche des internautes , en faisant des navets , qui si la loi passe ils recevront quand même des pont d'or pour leur médiocrité....).
Le web c'est du n'importe quoi de nos jours , écœurant .

Hors ligne

#159 Le 19/01/2010, à 17:38

Rizzen Virnn

Re : Enregistreur de flash en cours de lecture (avec GUI)

oooh le beau gros troll tout velu
allez je n'y résiste pas : pas d'accord avec toi
1) ben non, c'est le principe des démos et autre. C'est fait pour montrer, faire de la pub et pousser à la vente. C'est dans cette optique que des sites comme deezer sont permis.
2) et qu'est ce que tu fais de s'être cassé le cul pendant des mois pour produire quelque chose de chouette. Pendant ces mois là, ils étaient pas payés donc normal qu'ils le soient après.
3) pas sûr de bien te comprendre là, cf point 1
4) sauf les majors, ce pourquoi ils tiennent tant à protéger leur petit commerce lucratif
5) les artistes y gagnent quelque chose avec hadopi ? je croyais que c'était juste l'état qui dépensait beaucoup d'argent dans le vent. Et puis s'il y a encore des cons pour acheter leur navets, c'est que c'est encore une bonne idée d'en produire.

après je suis quand même d'accord sur le fond : à mort les majors, vive les concerts


Ubuntu 12.04 32bit - Archlinux 64 bit
HP Pavilion dv6790eb
Blog

Hors ligne

#160 Le 19/01/2010, à 19:00

enebre

Re : Enregistreur de flash en cours de lecture (avec GUI)

c'est le fond qui importe, je verrais mal les sites de vente en ligne se faire payer le clic sur leurs photos vantant les produits mis en vente , ... tien ! je recherche une bagnole.... je vais sur les portails de vente et je devrais payer pour voir ....les images et les clips qui font vendre , non mais ! ca va pas bien là !
Faut pas rêver , ben pour les clips vidéos, musiques, et bittins couffins , c'est pareil .
si les constructeurs de bagnole veulent le fric pour leur caisse , y s' ont intérêt à bien faire  .
Pour les artiste qui par définitions sont des amuseurs publics, qu'ils fassent bien leur show et nous irons  payer pour les voir . avec des bons clips plus de monde ira les voir , serait temps de réorganiser des Woodstock .
Pourquoi que c'est Môsieurs Artistes recevraient une meilleur sauce ?
Qu'ils fassent gaffe car la concurrence est rude avec les politiques qui s'y mettent maintenant sur la scène en amuseurs publics et  eux y font pas payer leurs clips mit en ligne !!!!.

Dernière modification par enebre (Le 19/01/2010, à 19:14)

Hors ligne

#161 Le 02/02/2011, à 00:21

asmodai

Re : Enregistreur de flash en cours de lecture (avec GUI)

le programme fonctionne encore ? Car j ai toujours la meme chose aucun fichier flash encours de lecture n'a été trouvé il faut commencer la lecture avant de cliquer sur enregister.
Alors que c est le cas !

J'ai bien installé pyton-tk et ffmpeg

D'avance merci pour le coup de main

Hors ligne

#162 Le 25/05/2019, à 15:31

fan2rahan

Re : Enregistreur de flash en cours de lecture (avec GUI)

Script d utilisation de streamlink ( livestreamer)  pour voir la TV  youtube ... et enregistrer ( avec programmation

 
#!/bin/sh

#script d utilisation de streamlink à l aide de Zenity
# par fan2rahan ,libre de droits 

export LANG="fr_FR.UTF-8" ; # pour cron

#-------------------------------------------------------------------------------------------------
defaut=best ; #qualite vidéo par defaut
#utilisation ici de mpv , ATTENTION si vous utilisez un autre programme adaptez "--no-bordure" 
#--------------------------------------------------------------------------------------------------
#Lors du lancement du script verifier la presence des programmes necessaires a son fonctionnement: à commenter (#) ensuite.
# streamlink lui est ici: https://streamlink.github.io/	
#Fonction Dependances
fonc_Dependances() { 
	List=" zenity , streamlink , mpv  "; # vlc ou mpv ... (au choix, modifiez)
	for prog in $List
	 do
	 which $prog > /dev/null ; #empeche which d afficher ou est le programme
	 done
	    if [ $? -ne 0 ]
	    then  notify-send -t 10000 " Ce script necessite $prog pour fonctionner.   Installez le:'sudo apt-get install $prog'"
	    exit 0;
	    else notify-send "Dependances satisfaites";      
	    fi
}
#----------------------------------------------------------------------------------------------
#fonction de choix du "stream"
fonc_StreamName() {
stream=`zenity --entry --title="Choix du Stream " --text="Selectionnez    ( copiez/collez):" --cancel-label="Quitter" --entry-text=arte france5 euronews franceInfo france2 france3 france4 franceO equipe21 RMC arte720 arte540 arte360 arte240 arte180 gulli ` ; 

#etude du cancel
case "$?" in
	1) exit 0 ;; #annulation on sort du script
	*)  ;;     #ok  on continue
esac
#etude des reponses ( facile a modifier !)
case "$stream" in
        euronews)     chaine="https://fr.euronews.com/live" ;;
        franceInfo)   chaine="https://livefrancetv.akamaized.net/simulcast/France_Info/dash_monde/ZXhwPTE1NTc5Mjg4NjN+YWNsPSUyZnNpbXVsY2FzdCUyZkZyYW5jZV9JbmZvJTJmZGFzaF9tb25kZSp+aG1hYz02NzYwZGI3MWM1MmJjZjFhMDM0NWQ2NjI5MDJkNmI0YTRkNDIwNDMyMDViODA4NWI5MmFhNjI4NWIwY2UxZTk1/France_Info.mpd" ;;
	france2)  chaine="https://www.france.tv/france-2/direct.html" ;;
	france3)  chaine="https://www.france.tv/france-3/direct.html" ;;
	france4)  chaine="https://www.france.tv/france-4/direct.html" ;;
	france5)  chaine="https://www.france.tv/france-5/direct.html" ;;
	franceO)  chaine="https://www.france.tv/france-o/direct.html" ;;
	equipe21)   chaine="https://urlz.fr/9RzM"   ;;
        RMC) chaine="https://rmcdecouverte.bfmtv.com/mediaplayer-direct/" ;;
        arte) chaine="https://www.arte.tv/fr/direct/" ;;
        arte720)   chaine="https://artelive-lh.akamaihd.net/i/artelive_fr@344805/index_1_av-p.m3u8?" ;; #sd=10&rebase=on" ;;
        arte540)   chaine="https://artelive-lh.akamaihd.net/i/artelive_fr@344805/index_2_av-b.m3u8?" ;; #sd=10&rebase=on" ;;
        arte360)   chaine="https://artelive-lh.akamaihd.net/i/artelive_fr@344805/index_3_av-p.m3u8?" ;; #sd=10&rebase=on" ;;
        arte240)   chaine="https://artelive-lh.akamaihd.net/i/artelive_fr@344805/index_4_av-p.m3u8?" ;; #sd=10&rebase=on" ;;
        arte180)   chaine="https://artelive-lh.akamaihd.net/i/artelive_fr@344805/index_5_av-p.m3u8?" ;; #sd=10&rebase=on" ;;
        gulli)   chaine="http://gulli-hls-live.akamaized.net/gulli.isml/gulli-audio102_fre=64000-video=900000.m3u8" ;;
	*)   chaine=$stream ;;  #autre, utilisé ici pour le copier/coller
esac ;
}
#------------------------------------------------------------------------------------------
#fonction d enregistrement
fonc_Record() {
titre=`zenity --entry --title="Enregistrement"  --text="titre de l'enregistrement" --entry-text="titre"  ` ;

if [ -e /home/$USER/$titre.mp4 ] ;
      then   notify-send -t 3000 "Ce fichier existe déjà !!" ; fonc_Record ;
      else tmp=`zenity --entry --title="Indiquez votre choix: " --text="Vous voulez:" --entry-text="Voir_ET_enregistrer" "Seulement_enregistrer" "Programmer" Quitter` ;
     case "$tmp" in
	Voir_ET_enregistrer)   streamlink -r "/home/$USER/$titre.mp4" -p="mpv $param3" --title $stream $chaine $qualite  ;;
	Seulement_enregistrer)  xterm -e streamlink -o "/home/$USER/$titre.mp4" $chaine $qualite ; sleep 3; exit 0 ;;
        Programmer)  fonc_Programmer ;;
     esac ;  
fi ;          
}
#---------------------------------------------------------------------------------------------
fonc_Programmer () {
debut=`zenity --forms --title="Progammation" --text="\n<span color=\"red\"><u>Commencer</u></span> l'enregistrement le :\n" --add-combo "Jour" --combo-values="1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31" --add-combo "Mois" --combo-values="1|2|3|4|5|6|7|8|9|10|11|12" --add-combo "Heures" --combo-values="0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23" --add-combo "Minutes" --combo-values="0|5|10|15|20|25|30|35|40|45|50|55" ` ;

debutjour=`echo $debut | cut -d"|"  -f1 ` ;
debutmois=`echo $debut | cut -d"|"  -f2 ` ;
debutheure=`echo $debut | cut -d"|"  -f3 ` ;
debutminute=`echo $debut | cut -d"|"  -f4 ` ;

fin=`zenity --forms --title="Progammation" --text="\n<span color=\"red\"><u>Arreter</u></span> l'enregistrement le :\n" --add-combo "Jour" --combo-values="1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31" --add-combo "Mois" --combo-values="1|2|3|4|5|6|7|8|9|10|11|12" --add-combo "Heures" --combo-values="0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23" --add-combo "Minutes" --combo-values="0|5|10|15|20|25|30|35|40|45|50|55" ` ;

finjour=`echo $fin | cut -d"|"  -f1 ` ;
finmois=`echo $fin | cut -d"|"  -f2 ` ;
finheure=`echo $fin | cut -d"|"  -f3 ` ;
finminute=`echo $fin | cut -d"|"  -f4 ` ;
sleep 1 ;

zenity --question \
--title "Verification" \
--text "Debut le:\n $debutjour-$debutmois à $debutheure:$debutminute  \n\n Fin le:\n $finjour-$finmois à $finheure:$finminute  \n\n Etes-vous d accord ?" ;

if [ $? = 0 ] ;
then 	sleep 1 ;
else 	fonc_Programmer ; 
fi ;

`crontab < <(crontab -l ; echo "$debutminute $debutheure $debutjour $debutmois * DISPLAY=:0.0 /usr/bin/streamlink -o \"/home/$USER/$titre.mp4\" \"$chaine\" \"$qualite\" ") ` ; 

sleep 1s ;
`crontab < <(crontab -l ; echo "$finminute $finheure $finjour $finmois *  pkill -i --signal 15 streamlink  " ) `  ;
sleep 1s ;
# on peut verifier en faisant crontab -l ds un terminal 
exit 0 ;
} 
#---------------------------------------------------------------------------------------------
# A la fermeture du stream, on demande si on  sort, relance (rappel du script),
fonc_Fermeture() {
fermeture=`zenity --entry --title="Indiquez votre choix: " --text="Que voulez-vous faire ? " --cancel-label="Quitter" --entry-text="Relancer"  "Quitter" ` ;

choix=` echo $fermeture | cut -d" "  -f1 - ` ;
case "$choix" in
	Quitter)   notify-send -t 3000 "Au revoir" ; exit 0 ;; # sortie du script
	Relancer)   exec $0  ;; # relance le script 	
esac  	
}
#___________________________________________________________________________________________________
#fonc_Dependances ; utile que la 1ere fois
fonc_StreamName ;
line=`streamlink $chaine | grep worst | cut -d":" -f2 - | sed -e "s/,/|/g" |sed -e "s/(/|/g" |sed -e "s/)//g" ` ;

if [ -z $line ] ;
	then notify-send -t 3000 "Stream offline ! " ; fonc_Fermeture ;
	else  sleep 1 ;
fi ;

reponse=`zenity --forms --title="$stream" --text="Remplissez les sélections:" --add-combo "Qualité" --combo-values="$line" --add-combo "Bordure" --combo-values="avec|sans" --add-combo "Enregistrer?" --combo-values="Non|Oui" ` ;

qualite=`echo $reponse |cut -d"|"  -f1 -` ;
if [ -z $qualite ] ;
	 then qualite=$defaut ; #qualite par defaut
	 else  sleep 1 ;
fi ;
bordure=`echo $reponse |cut -d"|"  -f2 -` ;
case $bordure in
	sans)  param3="--no-border" ;;		
	*)  ;;
esac ;
record=`echo $reponse |cut -d"|"  -f3 -` ;
case $record in
	Oui) fonc_Record ;;
	*)  ;;
     esac ;  

#lancement de streamlink avec les choix faits (voir: man streamlink)
streamlink  -p="mpv $param3" --title $stream $chaine $qualite ;
#etude de la reponse de streamlink et du lecteur
case "$?" in
	0 )    ;;       
	*)    notify-send -t 3000 "Il semble que le stream soit OFF."  ;;  #offline ou erreur
esac
fonc_Fermeture ;
exit 0

Hors ligne

#163 Le 30/05/2019, à 12:20

fan2rahan

Re : Enregistreur de flash en cours de lecture (avec GUI)

Script d'utilisation de STREAMLINK  ( livestreamer) version 3.3

#!/bin/bash

#script d utilisation de streamlink à l aide de Zenity, notify ( libnotify pour debian), crontab et un player video ( vlc, mpv ....)
 
# par fan2rahan ( fan2rahan@hotmail.fr) 
#libre de droits .... 
# version 3.3

export LANG="fr_FR.UTF-8" ; # pour cron

#-------------------------------------------------------------------------------------------------
defaut=best ; #qualite vidéo par defaut

#utilisation ici de mpv , ATTENTION si vous utilisez un autre programme adaptez "--no-bordure" 
#--------------------------------------------------------------------------------------------------
# ------------ definition des fonctions --------------------
#--------------------------------------------------------------------------------------------------

#Lors du lancement du script, verifier la presence des programmes necessaires à son fonctionnement: à commenter (#) ensuite.
# streamlink lui est ici: https://streamlink.github.io/	
# sous debian installez :libnotify
#par defaut streamlink utilise vlc , le script est plutot sur mpv ( remplaçant de mplayer), au choix et adaptez:  -p="mpv param3"  en fonction du lecteur ( pour vlc supprimez simplement)
 
#Fonction Dependances
fonc_Dependances() { 
	List=" zenity , streamlink , mpv  "; # vlc ou mpv ... (modifiez); 
	for prog in $List
	 do
	 which $prog > /dev/null ; #empeche which d afficher ou est le programme
	 done
	    if [ $? -ne 0 ]
	    then  notify-send -t 10000 " Ce script necessite $prog pour fonctionner.   Installez le:'sudo apt-get install $prog'"
	    exit 0;
	    else notify-send "Dependances satisfaites";      
	    fi
}
#----------------------------------------------------------------------------------------------
#fonction de choix du "stream"
# la partie à adapter pour ajouter , modifier... les liens des chaines
fonc_StreamName() {
stream=`zenity --entry --title="Choix du Stream " --text="Selectionnez    (copiez/collez):" --cancel-label="Quitter" --entry-text=arte france5 euronews franceInfo france2 france3 france4 franceO equipe21 RMC RMC2 gulli tf1 c8 cstar tfx tmc tfseries gong panda` ; # ajoouter le nom ici

#etude du cancel
case "$?" in
	1) exit 0 ;; #annulation on sort du script
	*)  ;;     #ok  on continue
esac
#etude des reponses ( facile a modifier !) 
# ajoutez le lien ici
case "$stream" in
        euronews)     chaine="https://fr.euronews.com/live" ;;
	tfx)   chaine="https://www.tf1.fr/tfx/direct"  ;;
	tmc)   chaine="https://www.tf1.fr/tmc/direct" ;;
	tfSeries)   chaine="https://www.tf1.fr/tf1-series-films/direct" ;;
	france2)  chaine="https://www.france.tv/france-2/direct.html" ;;
	france3)  chaine="https://www.france.tv/france-3/direct.html" ;;
	france4)  chaine="https://www.france.tv/france-4/direct.html" ;;
	france5)  chaine="https://www.france.tv/france-5/direct.html" ;;
	franceO)  chaine="https://www.france.tv/france-o/direct.html" ;;
	equipe21)   chaine="https://urlz.fr/9RzM"   ;;
        RMC) chaine="https://rmcdecouverte.bfmtv.com/mediaplayer-direct/" ;;
	RMC2) chaine="https://urlz.fr/9S3h" ;;
        arte) chaine="https://www.arte.tv/fr/direct/" ;;
	tf1) chaine="http://tf1livhlslivead-i.akamaihd.net/hls/live/224221/ioslive/live_1328.m3u8" ;;
        c8)  chaine="https://urlz.fr/9S2W"  ;;
	gong)   chaine="http://51.254.215.79/appflux/gong/GONG/gong_1920/chunks.m3u8?nimblesessionid=93464251" ;;
        gulli)   chaine="http://gulli-hls-live.akamaized.net/gulli.isml/gulli-audio102_fre=64000-video=900000.m3u8" ;;
        franceInfo)   chaine="https://www.dailymotion.com/video/x4rdeu6?autoplay=1" ;;
	cstar)  chaine="https://www.dailymotion.com/video/x5gv5v0?autoplay=1"  ;;
	panda)    chaine="https://www.dailymotion.com/video/x6zv6nc?autoplay=1"  ;;
 	*)   chaine=$stream ;;  #autre, utilisé ici pour le copier/coller
esac ;
}
#------------------------------------------------------------------------------------------
#fonction d enregistrement
fonc_Record() {
titre=`zenity --entry --title="Enregistrement"  --text="titre de l'enregistrement" --entry-text="titre"  ` ;

if [ -e /home/$USER/$titre.mp4 ] ; #si le fichier existe
      then   notify-send -t 3000 "Ce fichier existe déjà !!" ; fonc_Record ; # on redemande un titre
      else tmp=`zenity --entry --title="Indiquez votre choix: " --text="Vous voulez:" --entry-text="Voir_ET_enregistrer" "Seulement_enregistrer" "Quitter"` ;
     case "$tmp" in
	Voir_ET_enregistrer)   operateur="-r"  ;; # -r  = lecture et enregistrement 
	Seulement_enregistrer)  operateur="-o" ;; # -o  = enregistrement   ( cf man streamlink)
	Quitter) exit 0 ;;
     esac ;  
fonc_Programmer ;
fi ;          
}
#---------------------------------------------------------------------------------------------
#programmer enregistrement
# on demande jour mois heure et minute de debut et de fin pour crontab
fonc_Programmer () {
debut=`zenity --forms --title="Progammation" --text="\n<span color=\"red\"><u>Commencer</u></span> l'enregistrement le :\n" --add-combo "Jour" --combo-values="1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31" --add-combo "Mois" --combo-values="1|2|3|4|5|6|7|8|9|10|11|12" --add-combo "Heures" --combo-values="0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23" --add-combo "Minutes" --combo-values="0|5|10|15|20|25|30|35|40|45|50|55" ` ;
# pour les minutes j ai mis de 5 en 5 , suffisant pour un record il me semble ...

# on recupere les donnees
debutjour=`echo $debut | cut -d"|"  -f1 ` ;
debutmois=`echo $debut | cut -d"|"  -f2 ` ;
debutheure=`echo $debut | cut -d"|"  -f3 ` ;
debutminute=`echo $debut | cut -d"|"  -f4 ` ;

#test si les donnees sont vides,  'genant' pour cron
if [ $debutjour != "" ] ; # si pas vide
then    sleep 1 ; # continue
else 	 fonc_Question ; # sinon erreur
fi ;

if [ $debutmois != "" ] ;
then    sleep 1 ;
else 	 fonc_Question ;
fi ;

if [ $debutheure != "" ] ;
 then    sleep 1 ;
else 	 fonc_Question ;
fi ;

if [ $debutminute != "" ] ;
then    sleep 1 ;
else 	 fonc_Question ;
fi ;

#idem pour fin du record
fin=`zenity --forms --title="Progammation" --text="\n<span color=\"red\"><u>Arreter</u></span> l'enregistrement le :\n" --add-combo "Jour" --combo-values="1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31" --add-combo "Mois" --combo-values="1|2|3|4|5|6|7|8|9|10|11|12" --add-combo "Heures" --combo-values="0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23" --add-combo "Minutes" --combo-values="0|5|10|15|20|25|30|35|40|45|50|55" --add-combo "Eteindre le PC ?" --combo-values="non|oui" ` ;

finjour=`echo $fin | cut -d"|"  -f1 ` ;
finmois=`echo $fin | cut -d"|"  -f2 ` ;
finheure=`echo $fin | cut -d"|"  -f3 ` ;
finminute=`echo $fin | cut -d"|"  -f4 ` ;
arret=`echo $fin | cut -d"|"  -f5 ` ;
sleep 1 ;

if [ $finjour != "" ] ;
then    sleep 1 ;
else 	 fonc_Question ;
fi ;

if [ $finmois != "" ] ;
then    sleep 1 ;
else 	 fonc_Question ;
fi ;

if [ $finheure != "" ] ;
 then    sleep 1 ;
else 	 fonc_Question ;
fi ;

if [ $finminute != "" ] ;
then    sleep 1 ;
else 	 fonc_Question ;
fi ;

#verification de la programmation
zenity --question \
--title "Verification" \
--text "Debut le:\n $debutjour-$debutmois à $debutheure:$debutminute  \n\n Fin le:\n $finjour-$finmois à $finheure:$finminute  \n\n Eteindre le PC: $arret \n\n Etes-vous d accord ?" ;

if [ $? = 0 ] ; # etude de la reponse
then 	sleep 1 ; # oui on continue
else 	fonc_Programmer ;  # non on recommence
fi ;

#inscription dans crontab
`crontab < <(crontab -l ; echo "$debutminute $debutheure $debutjour $debutmois * DISPLAY=:0.0 /usr/bin/streamlink \"$operateur\" \"/home/$USER/$titre.mp4\" \"$chaine\" \"$qualite\" ") ` ; # du record 

sleep 1s ;
`crontab < <(crontab -l ; echo "$finminute $finheure $finjour $finmois *  pkill --signal 15 -f \"streamlink \"$operateur\" \"/home/$USER/$titre.mp4\" \"  " ) ` ; # de l arret
# 
sleep 1s ; 

case $arret in   
	oui) stop=$(echo "$finminute + 2" | bc -l) ; `crontab < <(crontab -l ; echo "$stop $finheure $finjour $finmois *  poweroff " ) ` ;; # extinction du PC
         *)       ;;
esac
sleep 1 ;
# on peut verifier la planification en faisant 'crontab -l' ds un terminal 
exit 0 ;
} 
#-----------------------------------------------------------------------------------------------
#programmer lecture
# comme programmer  mais juste debut  pas de fin
fonc_Programmer2 () {
debut=`zenity --forms --title="Progammation" --text="\n<span color=\"red\"><u>Commencer</u></span> l'enregistrement le :\n" --add-combo "Jour" --combo-values="1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31" --add-combo "Mois" --combo-values="1|2|3|4|5|6|7|8|9|10|11|12" --add-combo "Heures" --combo-values="0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23" --add-combo "Minutes" --combo-values="0|5|10|15|20|25|30|35|40|45|50|55" ` ;

debutjour=`echo $debut | cut -d"|"  -f1 ` ;
debutmois=`echo $debut | cut -d"|"  -f2 ` ;
debutheure=`echo $debut | cut -d"|"  -f3 ` ;
debutminute=`echo $debut | cut -d"|"  -f4 ` ;

if [ $debutjour != "" ] ;
then    sleep 1 ;
else 	 fonc_Question2 ;
fi ;

if [ $debutmois != "" ] ;
then    sleep 1 ;
else 	 fonc_Question2 ;
fi ;

if [ $debutheure != "" ] ;
 then    sleep 1 ;
else 	 fonc_Question2 ;
fi ;

if [ $debutminute != "" ] ;
then    sleep 1 ;
else 	 fonc_Question2 ;
fi ;

zenity --question \
--title "Verification" \
--text "Debut le:\n $debutjour-$debutmois \nà $debutheure:$debutminute  \n\n  Etes-vous d accord ?" ;

if [ $? = 0 ] ;
then 	sleep 1 ;
else 	fonc_Programmer2 ; 
fi ;

`crontab < <(crontab -l ; echo "$debutminute $debutheure $debutjour $debutmois * DISPLAY=:0.0 /usr/bin/streamlink -p=\"mpv $param3\" --title \"$stream\" \"$chaine\" \"$qualite\" ") ` ; 

sleep 1 ;
# on peut verifier en faisant crontab -l ds un terminal 
exit 0 ;
} 
#---------------------------------------------------------------------------------------------
# A la fermeture du stream, on demande si on  sort ou relance (rappel du script),
fonc_Fermeture() {
fermeture=`zenity --entry --title="Indiquez votre choix: " --text="Que voulez-vous faire ? " --cancel-label="Quitter" --entry-text="Relancer"  "Quitter" ` ;

#Si on clique sur le bouton Annuler on quitte
if [ "$?" -eq 1 ]; then
 exit
fi

choix=` echo $fermeture | cut -d" "  -f1 - ` ;
case "$choix" in
	Quitter)   notify-send -t 3000 "Au revoir" ; exit 0 ;; # sortie du script
	Relancer)   exec $0  ;; # relance le script 	
esac  	
}
#___________________________________________________________________________________________________
# Gestion d erreur d une donnee manquante dans programmer 
# pour eviter des problemes avec cron , genre repetitions ....decalages .... 
fonc_Question () {
reponse2=`zenity --entry --title="Question " --text="Une donnée est non fournie: \n Que voulez-vous faire ?" --cancel-label="Quitter" --entry-text=Relancer Quitter ` ; 

#etude du cancel
case "$?" in
	1) exit 0 ;; #annulation on sort du script
	*)  ;;     #ok  on continue
esac
case $reponse2 in
	Quitter) exit 0 ;;
	Relancer) fonc_Programmer ;; # on rappelle la fonction
	*) exit 0 ;;
esac
}
#_______________________________________________________________________________________________
# Gestion d erreur d une donnee manquante dans programmer2
fonc_Question2 () {
reponse2=`zenity --entry --title="Question " --text="Une donnée est non fournie: \n Que voulez-vous faire ?" --cancel-label="Quitter" --entry-text=Relancer Quitter ` ; 

#etude du cancel
case "$?" in
	1) exit 0 ;; #annulation on sort du script
	*)  ;;     #ok  on continue
esac
case $reponse2 in
	Quitter) exit 0 ;;
	Relancer) fonc_Programmer2 ;;
	*) exit 0 ;;
esac
}
#---------------------------------------------------------------------------------------------------------------
#------------------ DEBUT DU SCRIPT--------------------
#---------------------------------------------------------------------------------------------------------------

#fonc_Dependances ; # utile que la 1ere fois pour verifier les dependances, commentez ensuite
fonc_StreamName ;

# on recupere les qualites disponibles du stream
line=`streamlink $chaine | grep worst | cut -d":" -f2 - | sed -e "s/,/|/g" |sed -e "s/(/|/g" |sed -e "s/)//g" ` ;

if [ -z $line ] ;
	then notify-send -t 3000 "Stream offline ! " ; fonc_Fermeture ; # rien donc stream offline 
	else  sleep 1 ;
fi ;
# on demande  les choix: 'qualite'   'bordure'  'programmation'
reponse=`zenity --forms --title="$stream" --text="Remplissez les sélections:\n\n (Valider directement=lecture en qualité: $defaut) " --add-combo "Qualité" --combo-values="$line" --add-combo "Bordure" --combo-values="avec|sans" --add-combo "Programmer?" --combo-values="Non|Lecture|Enregistrement" ` ;

#Si on clique sur le bouton Annuler
if [ "$?" -eq 1 ]; then
 exit
fi

qualite=`echo $reponse |cut -d"|"  -f1 -` ;
if [ -z $qualite ] ; #si vide (non renseigné)
	 then qualite=$defaut ; # alors qualite par defaut, definie tout au debut du script
	 else  sleep 1 ;
fi ;
bordure=`echo $reponse |cut -d"|"  -f2 -` ;
case $bordure in
	sans)  param3="--no-border" ;;	# specificité de mpv, on peut mettre autre chose à la place ( fullscreen, wallpaper ....)	
	*)  ;;  # pour non renseigné
esac ;
record=`echo $reponse |cut -d"|"  -f3 -` ;
case $record in
	Enregistrement) fonc_Record ;;
	Lecture)  fonc_Programmer2 ;;
	*)  ;;   # pour non renseigné
     esac ;  

#lancement de streamlink avec les choix faits (voir: man streamlink)
# tout ça pour ça  ;)
# streamlink -p= player (si autre que vlc) parametres du player  titre de la fenetre URL du stream  qualité desirée  
streamlink  -p="mpv $param3" --title $stream $chaine $qualite ;
#etude de la reponse de streamlink (et du lecteur)
case "$?" in
	0 )    ;;       
	*)    notify-send -t 3000 "Il semble que le stream soit OFF."  ;;  #offline ou erreur
esac
fonc_Fermeture ;
exit 0
 

FIXE: fermeture de l enregistrement uniquement et pas tous les streamlink.

Hors ligne

#164 Le 31/05/2019, à 14:36

fan2rahan

Re : Enregistreur de flash en cours de lecture (avec GUI)

script d utilisation de STREAMLINK v.3.8
corrections de bugs, l'enregistrement ferme QUE le bon stream wink ...

#!/bin/bash

#script d utilisation de streamlink à l aide de Zenity, notify ( libnotify pour debian), crontab et un player video ( vlc, mpv ....)
 
# par fan2rahan ,libre de droits .... (https://www.gnu.org/licenses/gpl-3.0.html )
# version 3.8

export LANG="fr_FR.UTF-8" ; # pour cron

#-------------------------------------------------------------------------------------------------
defaut=best ; #qualite vidéo par defaut

#utilisation ici de mpv , ATTENTION si vous utilisez un autre programme adaptez "--no-bordure" 
#--------------------------------------------------------------------------------------------------
# ------------ definition des fonctions --------------------
#--------------------------------------------------------------------------------------------------

#Lors du lancement du script, verifier la presence des programmes necessaires à son fonctionnement: à commenter (#) ensuite.
# streamlink lui est ici: https://streamlink.github.io/	
# sous debian installez :libnotify
#par defaut streamlink utilise vlc , le script est plutot sur mpv ( remplaçant de mplayer), au choix et adaptez:  -p="mpv param3"  en fonction du lecteur ( pour vlc supprimez simplement)
 
#Fonction Dependances
fonc_Dependances() { 
	List=" zenity , streamlink , mpv  "; # vlc ou mpv ... (modifiez); 
	for prog in $List
	 do
	 which $prog > /dev/null ; #empeche which d afficher ou est le programme
	 done
	    if [ $? -ne 0 ]
	    then  notify-send -t 10000 " Ce script necessite $prog pour fonctionner.   Installez le:'sudo apt-get install $prog'"
	    exit 0;
	    else notify-send "Dependances satisfaites";      
	    fi
}
#----------------------------------------------------------------------------------------------
#fonction de choix du "stream"
# la partie à adapter pour ajouter , modifier... les liens des chaines
fonc_StreamName() {
stream=`zenity --entry --title="Choix du Stream " --text="Sélectionnez    (copiez/collez):" --cancel-label="Quitter" --entry-text=arte france5 euronews franceInfo france2 france3 france4 franceO equipe21 RMC RMC2 gulli tf1 c8 cstar tfx tmc tfseries gong panda 2>/dev/null ` ; # ajoouter le nom ici

#etude du cancel
case "$?" in
	1) exit 0 ;; #annulation on sort du script
	*)  ;;     #ok  on continue
esac
#etude des reponses ( facile a modifier !) 
# ajoutez le lien ici
case "$stream" in
        euronews)     chaine="https://fr.euronews.com/live" ;;
	tfx)   chaine="https://www.tf1.fr/tfx/direct"  ;;
	tmc)   chaine="https://www.tf1.fr/tmc/direct" ;;
	tfseries)   chaine="https://www.tf1.fr/tf1-series-films/direct" ;;
	france2)  chaine="https://www.france.tv/france-2/direct.html" ;;
	france3)  chaine="https://www.france.tv/france-3/direct.html" ;;
	france4)  chaine="https://www.france.tv/france-4/direct.html" ;;
	france5)  chaine="https://www.france.tv/france-5/direct.html" ;;
	franceO)  chaine="https://www.france.tv/france-o/direct.html" ;;
	equipe21)   chaine="https://urlz.fr/9RzM"   ;;
        RMC) chaine="https://rmcdecouverte.bfmtv.com/mediaplayer-direct/" ;;
	RMC2) chaine="https://urlz.fr/9S3h" ;;
        arte) chaine="https://www.arte.tv/fr/direct/" ;;
	tf1) chaine="http://tf1livhlslivead-i.akamaihd.net/hls/live/224221/ioslive/live_1328.m3u8" ;;
        c8)  chaine="https://www.dailymotion.com/video/x5gv5rr?autoplay=1"  ;;
	gong)   chaine="http://51.254.215.79/appflux/gong/GONG/gong_1920/chunks.m3u8?nimblesessionid=93464251" ;;
        gulli)   chaine="http://gulli-hls-live.akamaized.net/gulli.isml/gulli-audio102_fre=64000-video=900000.m3u8" ;;
        franceInfo)   chaine="https://www.dailymotion.com/video/x4rdeu6?autoplay=1" ;;
	cstar)  chaine="https://www.dailymotion.com/video/x5gv5v0?autoplay=1"  ;;
	panda)    chaine="https://www.dailymotion.com/video/x6zv6nc?autoplay=1"  ;;
 	*)   chaine=$stream ;;  #autre, utilisé ici pour le copier/coller
esac ;
}
#------------------------------------------------------------------------------------------
#fonction d enregistrement
fonc_Record() {
titre=`zenity --entry --title="Enregistrement"  --text="titre de l'enregistrement" --entry-text="titre" 2>/dev/null ` ;

if [ -e /home/$USER/$titre.mp4 ] ; #si le fichier existe
      then   notify-send -t 3000 "Ce fichier existe déjà !!" ; fonc_Record ; # on redemande un titre
      else tmp=`zenity --entry --title="Indiquez votre choix: " --text="Vous voulez:" --entry-text="Voir_ET_enregistrer" "Seulement_enregistrer" "Quitter" 2>/dev/null ` ;
     case "$tmp" in
	Voir_ET_enregistrer)   operateur="-r"  ;; # -r  = lecture et enregistrement 
	Seulement_enregistrer)  operateur="-o" ;; # -o  = enregistrement   ( cf man streamlink)
	Quitter) exit 0 ;;
     esac ;  
fonc_Programmer ;
fi ;          
}
#---------------------------------------------------------------------------------------------
#programmer enregistrement
# on demande jour mois heure et minute de debut et de fin pour crontab
fonc_Programmer () {
debut=`zenity --forms --title="Progammation" --text="\n<span color=\"red\"><u>Commencer</u></span> l'enregistrement le :\n" --add-combo "Jour" --combo-values="1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31" --add-combo "Mois" --combo-values="1|2|3|4|5|6|7|8|9|10|11|12" --add-combo "Heures" --combo-values="0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23" --add-combo "Minutes" --combo-values="0|5|10|15|20|25|30|35|40|45|50|55" 2>/dev/null ` ;
# pour les minutes j ai mis de 5 en 5 , suffisant pour un record il me semble ...

# on recupere les donnees
debutjour=`echo $debut | cut -d"|"  -f1 ` ;
debutmois=`echo $debut | cut -d"|"  -f2 ` ;
debutheure=`echo $debut | cut -d"|"  -f3 ` ;
debutminute=`echo $debut | cut -d"|"  -f4 ` ;

#test si les donnees sont vides,  'genant' pour cron
if [ $debutjour != "" ] ; # si pas vide
then    sleep 1 ; # continue
else 	 fonc_Question ; # sinon erreur
fi ;

if [ $debutmois != "" ] ;
then    sleep 1 ;
else 	 fonc_Question ;
fi ;

if [ $debutheure != "" ] ;
 then    sleep 1 ;
else 	 fonc_Question ;
fi ;

if [ $debutminute != "" ] ;
then    sleep 1 ;
else 	 fonc_Question ;
fi ;

#idem pour fin du record
fin=`zenity --forms --title="Progammation" --text="\n<span color=\"red\"><u>Arreter</u></span> l'enregistrement le :\n" --add-combo "Jour" --combo-values="1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31" --add-combo "Mois" --combo-values="1|2|3|4|5|6|7|8|9|10|11|12" --add-combo "Heures" --combo-values="0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23" --add-combo "Minutes" --combo-values="0|5|10|15|20|25|30|35|40|45|50|55" --add-combo "Eteindre le PC ?" --combo-values="non|oui" 2>/dev/null ` ;

finjour=`echo $fin | cut -d"|"  -f1 ` ;
finmois=`echo $fin | cut -d"|"  -f2 ` ;
finheure=`echo $fin | cut -d"|"  -f3 ` ;
finminute=`echo $fin | cut -d"|"  -f4 ` ;
arret=`echo $fin | cut -d"|"  -f5 ` ;
sleep 1 ;

if [ $finjour != "" ] ;
then    sleep 1 ;
else 	 fonc_Question ;
fi ;

if [ $finmois != "" ] ;
then    sleep 1 ;
else 	 fonc_Question ;
fi ;

if [ $finheure != "" ] ;
 then    sleep 1 ;
else 	 fonc_Question ;
fi ;

if [ $finminute != "" ] ;
then    sleep 1 ;
else 	 fonc_Question ;
fi ;

#verification de la programmation
zenity --question --title "Vérification de la programmation" --width=250 --height=100 --text "Début le:   $debutjour-$debutmois   à   $debutheure:$debutminute  \n\n Fin le:   $finjour-$finmois   à   $finheure:$finminute  \n\n éteindre le PC:   $arret \n\n êtes-vous d'accord ?" 2>/dev/null ;

if [ $? = 0 ] ; # etude de la reponse
then 	sleep 1 ; # oui on continue
else 	fonc_Programmer ;  # non on recommence
fi ;

#inscription dans crontab
`crontab < <(crontab -l ; echo "$debutminute $debutheure $debutjour $debutmois * DISPLAY=:0.0 /usr/bin/streamlink \"$operateur\" \"/home/$USER/$titre.mp4\" \"$chaine\" \"$qualite\" ") ` ; # du record 

sleep 1s ;
`crontab < <(crontab -l ; echo "$finminute $finheure $finjour $finmois *  pkill --signal 15 -f \"streamlink \"$operateur\" \"/home/$USER/$titre.mp4\" \"  " ) ` ; # de l arret
# 
sleep 1s ; 

case $arret in   
	oui) stop=$(echo "$finminute + 2" | bc -l) ; `crontab < <(crontab -l ; echo "$stop $finheure $finjour $finmois *  poweroff " ) ` ;; # extinction du PC
         *)       ;;
esac
sleep 1 ;
# on peut verifier la planification en faisant 'crontab -l' ds un terminal 
exit 0 ;
} 
#-----------------------------------------------------------------------------------------------
#programmer lecture
# comme programmer  mais juste debut  pas de fin
fonc_Programmer2 () {
debut=`zenity --forms --title="Progammation" --text="\n<span color=\"red\"><u>Commencer</u></span> l'enregistrement le :\n" --add-combo "Jour" --combo-values="1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31" --add-combo "Mois" --combo-values="1|2|3|4|5|6|7|8|9|10|11|12" --add-combo "Heures" --combo-values="0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23" --add-combo "Minutes" --combo-values="0|5|10|15|20|25|30|35|40|45|50|55" 2>/dev/null ` ;

debutjour=`echo $debut | cut -d"|"  -f1 ` ;
debutmois=`echo $debut | cut -d"|"  -f2 ` ;
debutheure=`echo $debut | cut -d"|"  -f3 ` ;
debutminute=`echo $debut | cut -d"|"  -f4 ` ;

if [ $debutjour != "" ] ;
then    sleep 1 ;
else 	 fonc_Question2 ;
fi ;

if [ $debutmois != "" ] ;
then    sleep 1 ;
else 	 fonc_Question2 ;
fi ;

if [ $debutheure != "" ] ;
 then    sleep 1 ;
else 	 fonc_Question2 ;
fi ;

if [ $debutminute != "" ] ;
then    sleep 1 ;
else 	 fonc_Question2 ;
fi ;

zenity --question --title "Vérification de la programmation" --width=250 --height=100 --text "Début le:   $debutjour-$debutmois   à   $debutheure:$debutminute  \n\n  êtes-vous d'accord ?" 2>/dev/null ;

if [ $? = 0 ] ;
then 	sleep 1 ;
else 	fonc_Programmer2 ; 
fi ;

`crontab < <(crontab -l ; echo "$debutminute $debutheure $debutjour $debutmois * DISPLAY=:0.0 /usr/bin/streamlink -p=\"mpv $param3\" --title \"$stream\" \"$chaine\" \"$qualite\" ") ` ; 

sleep 1 ;
# on peut verifier en faisant crontab -l ds un terminal 
exit 0 ;
} 
#---------------------------------------------------------------------------------------------
# A la fermeture du stream, on demande si on  sort ou relance (rappel du script),
fonc_Fermeture() {
fermeture=`zenity --entry --title="Indiquez votre choix: " --width=250 --height=120 --text="Que voulez-vous faire ? " --cancel-label="Quitter" --entry-text="Relancer"  "Quitter" 2>/dev/null` ;

#Si on clique sur le bouton Annuler on quitte
if [ "$?" -eq 1 ]; then
 exit
fi

choix=` echo $fermeture | cut -d" "  -f1 - ` ;
case "$choix" in
	Quitter)   notify-send -t 3000 "Au revoir" ; exit 0 ;; # sortie du script
	Relancer)   exec $0  ;; # relance le script 	
esac  	
}
#___________________________________________________________________________________________________
# Gestion d erreur d une donnee manquante dans programmer 
# pour eviter des problemes avec cron , genre repetitions ....decalages .... 
fonc_Question () {
reponse2=`zenity --entry --title="Question " --width=250 --height=120  --text="Une donnée est non fournie: \n Que voulez-vous faire ?" --cancel-label="Quitter" --entry-text=Relancer Quitter 2>/dev/null` ; 

#etude du cancel
case "$?" in
	1) exit 0 ;; #annulation on sort du script
	*)  ;;     #ok  on continue
esac
case $reponse2 in
	Quitter) exit 0 ;;
	Relancer) fonc_Programmer ;; # on rappelle la fonction
	*) exit 0 ;;
esac
}
#_______________________________________________________________________________________________
# Gestion d erreur d une donnee manquante dans programmer2
fonc_Question2 () {
reponse2=`zenity --entry --title="Question " --text="Une donnée est non fournie: \n Que voulez-vous faire ?" --cancel-label="Quitter" --entry-text=Relancer Quitter 2>/dev/null` ; 

#etude du cancel
case "$?" in
	1) exit 0 ;; #annulation on sort du script
	*)  ;;     #ok  on continue
esac
case $reponse2 in
	Quitter) exit 0 ;;
	Relancer) fonc_Programmer2 ;;
	*) exit 0 ;;
esac
}
#---------------------------------------------------------------------------------------------------------------
#------------------ DEBUT DU SCRIPT--------------------
#---------------------------------------------------------------------------------------------------------------

#fonc_Dependances ; # utile que la 1ere fois pour verifier les dependances, commentez ensuite
fonc_StreamName ;

# on recupere les qualites disponibles du stream
line=`streamlink $chaine | grep worst | cut -d":" -f2 - | sed -e "s/,/|/g" |sed -e "s/(/|/g" |sed -e "s/)//g" ` ;

if [ -z $line ] ;
	then notify-send -t 3000 "Stream offline ! " ; fonc_Fermeture ; # rien donc stream offline 
	else  sleep 1 ;
fi ;
# on demande  les choix: 'qualite'   'bordure'  'programmation'
reponse=`zenity --forms --title="$stream" --text="Remplissez les sélections:\n\n (Valider directement=lecture en qualité: $defaut) " --add-combo "Qualité" --combo-values="$line" --add-combo "Bordure" --combo-values="avec|sans" --add-combo "Programmer?" --combo-values="Non|Lecture|Enregistrement" 2>/dev/null ` ;

#Si on clique sur le bouton Annuler
if [ "$?" -eq 1 ]; then
 exit
fi

qualite=`echo $reponse |cut -d"|"  -f1 -` ;
if [ -z $qualite ] ; #si vide (non renseigné)
	 then qualite=$defaut ; # alors qualite par defaut, definie tout au debut du script
	 else  sleep 1 ;
fi ;
bordure=`echo $reponse |cut -d"|"  -f2 -` ;
case $bordure in
	sans)  param3="--no-border" ;;	# specificité de mpv, on peut mettre autre chose à la place ( fullscreen, wallpaper ....)	
	*)  ;;  # pour non renseigné
esac ;
record=`echo $reponse |cut -d"|"  -f3 -` ;
case $record in
	Enregistrement) fonc_Record ;;
	Lecture)  fonc_Programmer2 ;;
	*)  ;;   # pour non renseigné
     esac ;  

#lancement de streamlink avec les choix faits (voir: man streamlink)
# tout ça pour ça  ;)
# streamlink -p= player (si autre que vlc) parametres du player  titre de la fenetre URL du stream  qualité desirée  
streamlink  -p="mpv $param3" --title $stream $chaine $qualite ;
#etude de la reponse de streamlink (et du lecteur)
case "$?" in
	0 )    ;;       
	*)    notify-send -t 3000 "Il semble que le stream soit OFF."  ;;  #offline ou erreur
esac
fonc_Fermeture ;
exit 0

Hors ligne

#165 Le 31/05/2019, à 14:38

fan2rahan

Re : Enregistreur de flash en cours de lecture (avec GUI)

Petit script pour aller avec,  EPG tout simple et configurable ( doit se trouver dans le meme dossier que le script TV)

#!/bin/bash

#version 3
# DOIT etre place dans le meme dossier que "TV" ou alors modifiez "var"
#mettez la grille qui vous va bien  ;) , j'en ai pris une un peu au hazard 
 
var=`echo $0 | sed -e "s/Grille_EPG/TV/g" ` ;

zenity --text-info --title="Programme TNT" --width=1000 --height=800  --html --url=https://television.telerama.fr/tele/grille?maintenant --checkbox="Voir le programme de ce soir ?"  2>/dev/null
if [ "$?" -eq "0" ];
	then `zenity --text-info --title="Programme TNT CE SOIR" --width=1000 --height=800  --html --url=https://television.telerama.fr/tele/grille?ce-soir --checkbox="lancer TV ? " 2>/dev/null ` ; if [ "$?" -eq "0" ]; then exec $var ; else sleep 1 ; fi ;
	else  sleep 1 ;
fi
exit 0

Hors ligne

#166 Le 31/05/2019, à 19:46

aardman65

Re : Enregistreur de flash en cours de lecture (avec GUI)

Je découvre et ça marche pour le script d'utilisation de Streamlink sous Linuxmint 19.1 !
Merçi !

Hors ligne

#167 Le 01/06/2019, à 17:37

fan2rahan

Re : Enregistreur de flash en cours de lecture (avec GUI)

merci aardman65  donc fonctionne sous debian , ubuntu, mate  et mint  !!! merci de vos retours. Pour ceux que ça interresseraient , j ai une version MPV qui enleve les logos des chaines. pas vraiment utile mais fun !!!

Hors ligne

#168 Le 01/06/2019, à 17:40

fan2rahan

Re : Enregistreur de flash en cours de lecture (avec GUI)

corrections mineures ...

#!/bin/bash

#script d utilisation de streamlink à l aide de Zenity, notify ( libnotify pour debian), crontab et un player video ( vlc, mpv ....)
 
# par fan2rahan  (fan2rahan@hotmail.fr),libre de droits .... (https://www.gnu.org/licenses/gpl-3.0.html )
# version 3.9

export LANG="fr_FR.UTF-8" ; # pour cron

#-------------------------------------------------------------------------------------------------
defaut=best ; #qualite vidéo par defaut

#utilisation ici de mpv , ATTENTION si vous utilisez un autre programme adaptez "--no-bordure" 
#--------------------------------------------------------------------------------------------------
# ------------ definition des fonctions --------------------
#--------------------------------------------------------------------------------------------------

#Lors du lancement du script, verifier la presence des programmes necessaires à son fonctionnement: à commenter (#) ensuite.
# streamlink lui est ici: https://streamlink.github.io/	
# sous debian installez :libnotify
#par defaut streamlink utilise vlc , le script est plutot sur mpv ( remplaçant de mplayer), au choix et adaptez:  -p="mpv param3"  en fonction du lecteur ( pour vlc supprimez simplement)
 
#Fonction Dependances
fonc_Dependances() { 
	List=" zenity , streamlink , mpv  "; # vlc ou mpv ... (modifiez); 
	for prog in $List
	 do
	 which $prog > /dev/null ; #empeche which d afficher ou est le programme
	 done
	    if [ $? -ne 0 ]
	    then  notify-send -t 10000 " Ce script necessite $prog pour fonctionner.   Installez le:'sudo apt-get install $prog'"
	    exit 0;
	    else notify-send "Dependances satisfaites";      
	    fi
}
#----------------------------------------------------------------------------------------------
#fonction de choix du "stream"
# la partie à adapter pour ajouter , modifier... les liens des chaines
fonc_StreamName() {
stream=`zenity --entry --title="Choix du Stream " --text="Sélectionnez    (copiez/collez):" --cancel-label="Quitter" --entry-text=arte france5 euronews franceInfo france2 france3 france4 franceO equipe21 RMC RMC2 gulli tf1 c8 cstar tfx tmc tfseries gong panda 2>/dev/null ` ; # ajoouter le nom ici

#etude du cancel
case "$?" in
	1) exit 0 ;; #annulation on sort du script
	*)  ;;     #ok  on continue
esac
#etude des reponses ( facile a modifier !) 
# ajoutez le lien ici
case "$stream" in
        euronews)     chaine="https://fr.euronews.com/live" ;;
	tfx)   chaine="https://www.tf1.fr/tfx/direct"  ;;
	tmc)   chaine="https://www.tf1.fr/tmc/direct" ;;
	tfseries)   chaine="https://www.tf1.fr/tf1-series-films/direct" ;;
	france2)  chaine="https://www.france.tv/france-2/direct.html" ;;
	france3)  chaine="https://www.france.tv/france-3/direct.html" ;;
	france4)  chaine="https://www.france.tv/france-4/direct.html" ;;
	france5)  chaine="https://www.france.tv/france-5/direct.html" ;;
	franceO)  chaine="https://www.france.tv/france-o/direct.html" ;;
	equipe21)   chaine="https://urlz.fr/9RzM"   ;;
        RMC) chaine="https://rmcdecouverte.bfmtv.com/mediaplayer-direct/" ;;
	RMC2) chaine="https://urlz.fr/9S3h" ;;
        arte) chaine="https://www.arte.tv/fr/direct/" ;;
	tf1) chaine="https://www.tf1.fr/tf1/direct" ;;
        c8)  chaine="https://www.dailymotion.com/video/x5gv5rr?autoplay=1"  ;;
	gong)   chaine="http://51.254.215.79/appflux/gong/GONG/gong_1920/chunks.m3u8" ;;
        gulli)   chaine="http://gulli-hls-live.akamaized.net/gulli.isml/gulli-audio102_fre=64000-video=900000.m3u8" ;;
        franceInfo)   chaine="https://www.dailymotion.com/video/x4rdeu6?autoplay=1" ;;
	cstar)  chaine="https://www.dailymotion.com/video/x5gv5v0?autoplay=1"  ;;
	panda)    chaine="https://www.dailymotion.com/video/x6zv6nc?autoplay=1"  ;;
 	*)   chaine=$stream ;;  #autre, utilisé ici pour le copier/coller
esac ;
}
#------------------------------------------------------------------------------------------
#fonction d enregistrement
fonc_Record() {
titre=`zenity --entry --title="Enregistrement"  --text="titre de l'enregistrement" --entry-text="titre" 2>/dev/null ` ;

if [ -e /home/$USER/$titre.mp4 ] ; #si le fichier existe
      then   notify-send -t 3000 "Ce fichier existe déjà !!" ; fonc_Record ; # on redemande un titre
      else tmp=`zenity --entry --title="Indiquez votre choix: " --text="Vous voulez:" --entry-text="Voir_ET_enregistrer" "Seulement_enregistrer" "Quitter" 2>/dev/null ` ;
     case "$tmp" in
	Voir_ET_enregistrer)   operateur="-r"  ;; # -r  = lecture et enregistrement 
	Seulement_enregistrer)  operateur="-o" ;; # -o  = enregistrement   ( cf man streamlink)
	Quitter) exit 0 ;;
     esac ;  
fonc_Programmer ;
fi ;          
}
#---------------------------------------------------------------------------------------------
#programmer enregistrement
# on demande jour mois heure et minute de debut et de fin pour crontab
fonc_Programmer () {
debut=`zenity --forms --title="Progammation" --text="\n<span color=\"red\"><u>Commencer</u></span> l'enregistrement le :\n" --add-combo "Jour" --combo-values="1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31" --add-combo "Mois" --combo-values="1|2|3|4|5|6|7|8|9|10|11|12" --add-combo "Heures" --combo-values="0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23" --add-combo "Minutes" --combo-values="0|5|10|15|20|25|30|35|40|45|50|55" 2>/dev/null ` ;
# pour les minutes j ai mis de 5 en 5 , suffisant pour un record il me semble ...

# on recupere les donnees
debutjour=`echo $debut | cut -d"|"  -f1 ` ;
debutmois=`echo $debut | cut -d"|"  -f2 ` ;
debutheure=`echo $debut | cut -d"|"  -f3 ` ;
debutminute=`echo $debut | cut -d"|"  -f4 ` ;

#test si les donnees sont vides,  'genant' pour cron
if [ $debutjour != "" ] ; # si pas vide
then    sleep 1 ; # continue
else 	 fonc_Question ; # sinon erreur
fi ;

if [ $debutmois != "" ] ;
then    sleep 1 ;
else 	 fonc_Question ;
fi ;

if [ $debutheure != "" ] ;
 then    sleep 1 ;
else 	 fonc_Question ;
fi ;

if [ $debutminute != "" ] ;
then    sleep 1 ;
else 	 fonc_Question ;
fi ;

#idem pour fin du record
fin=`zenity --forms --title="Progammation" --text="\n<span color=\"red\"><u>Arreter</u></span> l'enregistrement le :\n" --add-combo "Jour" --combo-values="1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31" --add-combo "Mois" --combo-values="1|2|3|4|5|6|7|8|9|10|11|12" --add-combo "Heures" --combo-values="0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23" --add-combo "Minutes" --combo-values="0|5|10|15|20|25|30|35|40|45|50|55" --add-combo "Eteindre le PC ?" --combo-values="non|oui" 2>/dev/null ` ;

finjour=`echo $fin | cut -d"|"  -f1 ` ;
finmois=`echo $fin | cut -d"|"  -f2 ` ;
finheure=`echo $fin | cut -d"|"  -f3 ` ;
finminute=`echo $fin | cut -d"|"  -f4 ` ;
arret=`echo $fin | cut -d"|"  -f5 ` ;
sleep 1 ;

if [ $finjour != "" ] ;
then    sleep 1 ;
else 	 fonc_Question ;
fi ;

if [ $finmois != "" ] ;
then    sleep 1 ;
else 	 fonc_Question ;
fi ;

if [ $finheure != "" ] ;
 then    sleep 1 ;
else 	 fonc_Question ;
fi ;

if [ $finminute != "" ] ;
then    sleep 1 ;
else 	 fonc_Question ;
fi ;

#verification de la programmation
zenity --question --title "Vérification de la programmation" --width=250 --height=100 --text "Début le:   $debutjour-$debutmois   à   $debutheure:$debutminute  \n\n Fin le:   $finjour-$finmois   à   $finheure:$finminute  \n\n éteindre le PC:   $arret \n\n êtes-vous d'accord ?" 2>/dev/null ;

if [ $? = 0 ] ; # etude de la reponse
then 	sleep 1 ; # oui on continue
else 	fonc_Programmer ;  # non on recommence
fi ;

#inscription dans crontab
`crontab < <(crontab -l ; echo "$debutminute $debutheure $debutjour $debutmois * DISPLAY=:0.0 /usr/bin/streamlink \"$operateur\" \"/home/$USER/$titre.mp4\" \"$chaine\" \"$qualite\" ") ` ; # du record 

sleep 1s ;
`crontab < <(crontab -l ; echo "$finminute $finheure $finjour $finmois *  pkill --signal 15 -f \"streamlink \"$operateur\" \"/home/$USER/$titre.mp4\" \"  " ) ` ; # de l arret
# 
sleep 1s ; 

case $arret in   
	oui) stop=$(echo "$finminute + 2" | bc -l) ; `crontab < <(crontab -l ; echo "$stop $finheure $finjour $finmois *  poweroff " ) ` ;; # extinction du PC
         *)       ;;
esac
sleep 1 ;
# on peut verifier la planification en faisant 'crontab -l' ds un terminal 
exit 0 ;
} 
#-----------------------------------------------------------------------------------------------
#programmer lecture
# comme programmer  mais juste debut  pas de fin
fonc_Programmer2 () {
debut=`zenity --forms --title="Progammation" --text="\n<span color=\"red\"><u>Commencer</u></span> l'enregistrement le :\n" --add-combo "Jour" --combo-values="1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31" --add-combo "Mois" --combo-values="1|2|3|4|5|6|7|8|9|10|11|12" --add-combo "Heures" --combo-values="0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23" --add-combo "Minutes" --combo-values="0|5|10|15|20|25|30|35|40|45|50|55" 2>/dev/null ` ;

debutjour=`echo $debut | cut -d"|"  -f1 ` ;
debutmois=`echo $debut | cut -d"|"  -f2 ` ;
debutheure=`echo $debut | cut -d"|"  -f3 ` ;
debutminute=`echo $debut | cut -d"|"  -f4 ` ;

if [ $debutjour != "" ] ;
then    sleep 1 ;
else 	 fonc_Question2 ;
fi ;

if [ $debutmois != "" ] ;
then    sleep 1 ;
else 	 fonc_Question2 ;
fi ;

if [ $debutheure != "" ] ;
 then    sleep 1 ;
else 	 fonc_Question2 ;
fi ;

if [ $debutminute != "" ] ;
then    sleep 1 ;
else 	 fonc_Question2 ;
fi ;

zenity --question --title "Vérification de la programmation" --width=250 --height=100 --text "Début le:   $debutjour-$debutmois   à   $debutheure:$debutminute  \n\n  êtes-vous d'accord ?" 2>/dev/null ;

if [ $? = 0 ] ;
then 	sleep 1 ;
else 	fonc_Programmer2 ; 
fi ;

`crontab < <(crontab -l ; echo "$debutminute $debutheure $debutjour $debutmois * DISPLAY=:0.0 /usr/bin/streamlink -p=\"mpv $param3\" --title \"$stream\" \"$chaine\" \"$qualite\" ") ` ; 

sleep 1 ;
# on peut verifier en faisant crontab -l ds un terminal 
exit 0 ;
} 
#---------------------------------------------------------------------------------------------
# A la fermeture du stream, on demande si on  sort ou relance (rappel du script),
fonc_Fermeture() {
fermeture=`zenity --entry --title="Indiquez votre choix: " --width=250 --height=120 --text="Que voulez-vous faire ? " --cancel-label="Quitter" --entry-text="Relancer"  "Quitter" 2>/dev/null` ;

#Si on clique sur le bouton Annuler on quitte
if [ "$?" -eq 1 ]; then
 exit
fi

choix=` echo $fermeture | cut -d" "  -f1 - ` ;
case "$choix" in
	Quitter)   notify-send -t 3000 "Au revoir" ; exit 0 ;; # sortie du script
	Relancer)   exec $0  ;; # relance le script 	
esac  	
}
#___________________________________________________________________________________________________
# Gestion d erreur d une donnee manquante dans programmer 
# pour eviter des problemes avec cron , genre repetitions ....decalages .... 
fonc_Question () {
reponse2=`zenity --entry --title="Question " --width=250 --height=120  --text="Une donnée est non fournie: \n Que voulez-vous faire ?" --cancel-label="Quitter" --entry-text=Relancer Quitter 2>/dev/null` ; 

#etude du cancel
case "$?" in
	1) exit 0 ;; #annulation on sort du script
	*)  ;;     #ok  on continue
esac
case $reponse2 in
	Quitter) exit 0 ;;
	Relancer) fonc_Programmer ;; # on rappelle la fonction
	*) exit 0 ;;
esac
}
#_______________________________________________________________________________________________
# Gestion d erreur d une donnee manquante dans programmer2
fonc_Question2 () {
reponse2=`zenity --entry --title="Question " --text="Une donnée est non fournie: \n Que voulez-vous faire ?" --cancel-label="Quitter" --entry-text=Relancer Quitter 2>/dev/null` ; 

#etude du cancel
case "$?" in
	1) exit 0 ;; #annulation on sort du script
	*)  ;;     #ok  on continue
esac
case $reponse2 in
	Quitter) exit 0 ;;
	Relancer) fonc_Programmer2 ;;
	*) exit 0 ;;
esac
}
#---------------------------------------------------------------------------------------------------------------
#------------------ DEBUT DU SCRIPT--------------------
#---------------------------------------------------------------------------------------------------------------

#fonc_Dependances ; # utile que la 1ere fois pour verifier les dependances, commentez ensuite
fonc_StreamName ;

# on recupere les qualites disponibles du stream
line=`streamlink $chaine | grep worst | cut -d":" -f2 - | sed -e "s/,/|/g" |sed -e "s/(/|/g" |sed -e "s/)//g" ` ;

if [ -z $line ] ;
	then notify-send -t 3000 "Stream offline ! " ; fonc_Fermeture ; # rien donc stream offline 
	else  sleep 1 ;
fi ;
# on demande  les choix: 'qualite'   'bordure'  'programmation'
reponse=`zenity --forms --title="$stream" --text="Remplissez les sélections:\n\n (Valider directement=lecture en qualité: $defaut) " --add-combo "Qualité" --combo-values="$line" --add-combo "Bordure" --combo-values="avec|sans" --add-combo "Programmer?" --combo-values="Non|Lecture|Enregistrement" 2>/dev/null ` ;

#Si on clique sur le bouton Annuler
if [ "$?" -eq 1 ]; then
 exit
fi

qualite=`echo $reponse |cut -d"|"  -f1 -` ;
if [ -z $qualite ] ; #si vide (non renseigné)
	 then qualite=$defaut ; # alors qualite par defaut, definie tout au debut du script
	 else  sleep 1 ;
fi ;
bordure=`echo $reponse |cut -d"|"  -f2 -` ;
case $bordure in
	sans)  param3="--no-border" ;;	# specificité de mpv, on peut mettre autre chose à la place ( fullscreen, wallpaper ....)	
	*)  ;;  # pour non renseigné
esac ;
record=`echo $reponse |cut -d"|"  -f3 -` ;
case $record in
	Enregistrement) fonc_Record ;;
	Lecture)  fonc_Programmer2 ;;
	*)  ;;   # pour non renseigné
     esac ;  

#lancement de streamlink avec les choix faits (voir: man streamlink)
# tout ça pour ça  ;)
# streamlink -p= player (si autre que vlc) parametres du player  titre de la fenetre URL du stream  qualité desirée  
streamlink  -p="mpv $param3" --title $stream $chaine $qualite ;
#etude de la reponse de streamlink (et du lecteur)
case "$?" in
	0 )    ;;       
	*)    notify-send -t 3000 "Il semble que le stream soit OFF."  ;;  #offline ou erreur
esac
fonc_Fermeture ;
exit 0

Hors ligne

#169 Le 01/06/2019, à 17:45

fan2rahan

Re : Enregistreur de flash en cours de lecture (avec GUI)

streamlink est à la base créé pour twitch, aussi voici un de mes premiers scripts pour des chaines twitch ( bon je suis SC2 smile  ). Il n enregistre pas ( vous n avez qu a combiner ou utiliser le copy/pasta) mais permet de changer de resolution plus simplement. ( il est plus ancien à la base)

#! /bin/bash

#par fan2rahan  ( libre de droit ....)

#script de selection de stream à regarder avec streamlink par preselection ou copier/coller.
#Streamlink et vlc (ou votre lecteur perso: -p lecteur ou streamlinkrc perso) sont considérés comme fonctionnels ici.


#script zenity de choix du "stream" et de la "qualité"
chaine=stream=qualite=choix=param1=param2=param3=line=reponse="";  #declaration des variables

#--------------------------------------------------------------------------------------------------
#Lors du lancement du script verifier la presence des programmes necessaires a son fonctionnement: à commenter (#) ensuite.
	
#Fonction Dependances
fonc_Dependances() { 
	List=" zenity , streamlink , mpv  "; # vlc ou mpv ... (au choix, modifiez)
	for prog in $List
	 do
	 which $prog > /dev/null ; #empeche which d afficher ou est le programme
	 done
	    if [ $? -ne 0 ]
	    then  notify-send -t 10000 " Ce script necessite $prog pour fonctionner.   Installez le:'sudo apt-get install $prog'"
	    exit 0;
	    else notify-send "Dependances satisfaites";      
	    fi
}
#-------------------------------------------------------------------------------------------------
#fonction de choix du "stream"

fonc_StreamName() {
stream=`zenity --entry --title="Choix du Stream " --text="Selectionnez    ( copiez/collez):" --cancel-label="Quitter" --entry-text=sc2 Yogo tkl koka algost funka onpoong kosby ow ogtv gsl esl esl_sc2 esl_sc2b inno maru haackerz take starcraft wesg enki wardi crank emil psinsin starladder qlash indy feardragon zombi maynarde crow stats marth zerator moman ` ;  #defaut: sc2 ici ( entry-text)

#etude du cancel
case "$?" in
	1) exit 0 ;; #annulation on sort du script
	*)  ;;     #ok  on continue
esac

#etude des reponses ( facile a modifier !)
#	nom)   chaine="url du stream "  ;;
case "$stream" in
	Yogo) chaine="https://www.twitch.tv/docteuryogo" ;;
	sc2)  chaine="https://www.twitch.tv/ogamingsc2" ;;
	tkl)  chaine="https://www.twitch.tv/og_tkl" ;;
	koka)  chaine="https://www.twitch.tv/kokalafripouille" ;;
	algost)  chaine="https://www.twitch.tv/mralgost" ;;
	funka)  chaine="https://www.twitch.tv/og_funka" ;;
	onpoong ) chaine="https://www.twitch.tv/onpoong" ;;
	kosby)   chaine="https://www.twitch.tv/lekosby" ;;
	ow)   chaine="https://www.twitch.tv/ogamingoverwatch" ;;
	ogtv)   chaine="https://www.twitch.tv/ogamingtv" ;;
	gsl)   chaine="https://www.twitch.tv/gsl"   ;;
	inno)   chaine="https://www.twitch.tv/innovation_s2"   ;;        
	maru)   chaine="https://www.twitch.tv/maru072"   ;;
	haackerz)   chaine="https://www.twitch.tv/haackerz" ;;
	take)   chaine="https://www.twitch.tv/taketv" ;;
	starcraft)   chaine="https://www.twitch.tv/starcraft" ;;
	wesg)   chaine="https://www.twitch.tv/wesg_sc2"  ;;	
	enki)   chaine="https://www.twitch.tv/lightningenki"  ;;
	wardi)   chaine="https://www.twitch.tv/wardiii"   ;;
	crank)   chaine="https://www.twitch.tv/tvcrank"   ;;
	emil)   chaine="https://www.twitch.tv/emil"   ;;
	psinsin)   chaine="https://www.twitch.tv/psinsin"   ;;
	starladder)   chaine="http://afreecatv.com/starladder"   ;;
	qlash)   chaine="https://www.twitch.tv/QLASH_StarCraft2" ;;
 	indy)   chaine="http://play.afreecatv.com/indysc"   ;;
	feardragon)   chaine="https://www.twitch.tv/feardragon64"   ;;
	moman)   chaine="https://www.twitch.tv/feardragon64"   ;;
	zerator)   chaine="https://www.twitch.tv/feardragon64"   ;;
	zombi)   chaine="https://www.twitch.tv/zombiegrub"   ;;
	maynarde)   chaine="https://www.twitch.tv/maynarde"   ;;
	crow)	chaine="https://www.twitch.tv/aaacrow"  ;;
	stats)   chaine="https://www.twitch.tv/kimdaeyeob3"  ;;
	esl)   chaine="https://www.twitch.tv/esl"   ;;
	esl_sc2)   chaine="https://www.twitch.tv/esl_sc2"   ;;
	esl_sc2b)   chaine="https://www.twitch.tv/esl_sc2b"   ;;
	marth)   chaine="https://www.twitch.tv/marthtv"   ;;
		*)   chaine=$stream ;;  #autre, utilisé ici pour le copier/coller
esac ;
}
#---------------------------------------------------------------------------------------------------
#fonction du choix de la qualite

#lance streamlink sur la chaine, recupere les qualites possibles, demande celle voulue
#prend un peu plus de temps mais est adapté à la chaine

fonc_Qualite() {
line=`streamlink $chaine | grep worst | cut -d":" -f2 - | sed -e "s/,//g" |sed -e "s/(//g" |sed -e "s/)//g" ` ;
if [ -z $line ] ;
	then notify-send -t 3000 "Stream offline ! " ; fonc_Fermeture ;
	else  sleep 1 ;
fi ;

qualite=`zenity --entry --title="Qualité" --text="Indiquez la qualité désirée:" --entry-text=worst  $line ` ;
#defaut:worst (160p)
}
#---------------------------------------------------------------------------------------------------
#Bordure (decoration de la fenetre) 
#possibilité avec MPV ( à voir pour vlc) de ne pas afficher les bordures, change à chaque demande
#En "no-border" : best + full screen place la video en fond d ecran

fonc_Bordure() {
if [ -z $param3 ] ;  #si vide
	then exec $0 $chaine $stream  " --no-border" ; #remplace par no-border
	else exec $0 $chaine $stream  "" ; # et inversement
fi ;
}
#---------------------------------------------------------------------------------------------------
# A la fermeture du stream, on demande si on  sort, relance (rappel du script),
# change la qualite du stream ou si on met/enleve les bordures
fonc_Fermeture() {
reponse=`zenity --entry --title="Indiquez votre choix: " --text="Que voulez-vous faire ? " --cancel-label="Quitter" --entry-text="modifier la Qualite" "changer de Stream" "Bordure (avec/sans)" Quitter ` ;

choix=` echo $reponse | cut -d" "  -f1 - ` ;

case "$choix" in
	Quitter)   notify-send -t 3000 "Au revoir" ; exit 0 ;; # sortie du script
	changer)   exec $0  ;; # relance le script sans parametres
	modifier)  exec $0 $chaine $stream  ;; #relance le script avec l url et le nom
	Bordure)   fonc_Bordure ;; #uniquement pour mpv    	 
esac  	
}
#___________________________________________________________________________________________________
#debut du script

#fonc_Dependances ; # utile QUE la premiere fois, a commenter (#) ensuite,
#on recupere les parametres fournis au script , s ils existent
param1=$1 ;
param2=$2 ;
param3=$3 ;

if [ -z $param1 ] ; #si param1 est null
   then fonc_StreamName ;
   else chaine=$param1 ; stream=$param2 ;   #sinon on assigne les parametres de stream et de nom
fi ;
fonc_Qualite ;

#lancement de streamlink avec les choix faits (voir: man streamlink)
streamlink  -p="mpv $param3" --title $stream $chaine $qualite ; #--player-continuous-http 

#etude de la reponse de streamlink et du lecteur
case "$?" in
	0 )    ;;       
	*)    notify-send -t 3000 "Il semble que le stream soit OFF."  ;;  #offline ou erreur
esac

fonc_Fermeture ;

exit 0

Hors ligne