Contenu | Rechercher | Menus

Annonce

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 13/01/2013, à 00:30

globideuh

[script/bash] filtrer les chaines en doublons dans la playlist free tv

Bonjour,

Je regarde la télé sur mon pc à l'aide du multipost de free avec vlc, ça m’embêtais un peu d'avoir plusieurs fois la même chaîne dans la playlist lorsque plusieurs qualités sont disponibles pour la chaîne. Au début, j'avais un script qui filtrait seulement les chaînes en qualité standard, mais du coup je n'avais pas toutes les chaînes (certaines n'ont que la qualité basse, ou que la hd).
J'ai donc fais un autre script, à l'état de quick and dirty (mais bon ça fait ce que je lui demande) pour le moment afin d'avoir uniquement la qualité que je préfère (standard > basse > hd > auto) pour une chaîne. La chaîne n’apparaît donc qu'une fois dans la playlist.

Au cas où ça intéresse quelqu'un, je le poste ici, parce que j'ai pas trouvé grand chose d'équivalent (je n'ai pas cherché beaucoup non plus)

#!/bin/bash

#donne un int par qualite (plus c'est petit, plus c'est preferable)
function getqual {
    case $QUAL in
        "standard")     
                        NQUAL=1
                        ;;
        "bas débit")    
                        NQUAL=2
                        ;;
        "HD")           
                        NQUAL=3
                        ;;
        "auto")         
                        NQUAL=4
                        ;;
    esac	
}

#suppression de la playlist si existante
if [ -f playlist.m3u ]
then
    rm playlist.m3u
fi

#recuperation playlist original
wget http://mafreebox.freebox.fr/freeboxtv/playlist.m3u

CNQUAL=5
COPYNEXT=0

#ajout de l'entete
echo "#EXTM3U" > pl.tmp

#filtrage
while read line  
do   
	if [ $COPYNEXT == 0 ]
	then
		if [ $(echo $line | cut -d: -f1) == "#EXTINF" ]
		then
			RUNNING=$(echo $line | cut -d"," -f2 | cut -d"-" -f1 | tr -d [:space:])
			if [ "$RUNNING" == "$CURRENT" ]
			then #chaine en cours de traitement
				CNQUAL=$NQUAL
				QUAL=$(echo $line | cut -d"(" -f2 | cut -d")" -f1)
				getqual
				if [ $CNQUAL -ge $NQUAL ]
				then
					LINE1=$line
					COPYNEXT=1
				fi
			else #nouvelle chaine
				echo $LINE1 >> pl.tmp
				echo $LINE2 >> pl.tmp
				LINE1=$line
				QUAL=$(echo $line | cut -d"(" -f2 | cut -d")" -f1)
				getqual
				COPYNEXT=1
				CURRENT=$RUNNING
			fi
		fi
	else
		LINE2=$line
		COPYNEXT=0
	fi
done < playlist.m3u

rm playlist.m3u
mv pl.tmp playlist.m3u 

#lancement de vlc
vlc playlist.m3u

Pour le moment, le seul problème que j'ai vu (dû à l'implémentation) est que la dernière chaîne de la playlist original n'est pas affichée.
Voilà, franchement améliorable, mais ça fonctionne. Pour modifier les préférences sur la qualité, il suffit de modifier les int dans la fonction getqual (plus c'est petit, mieux c'est).

A plus,
globideuh.

Hors ligne