Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites". Attention, le forum rencontre actuellement quelques difficultés. En cas d'erreur 502, il ne faut pas re-valider l'envoi d'un message ou l'ouverture d'une discussion, au risque de créer un doublon.

La section divers se réorganise ! De nouvelles sous-sections à venir. (plus d'infos + donner son avis)

#1 Le 18/05/2009, à 22:44

nubu

mencoder et zenity (coup de pouce pour un script)

bonjour
j'ai amélioré le script d'encodage des vidéos pour les creative zen pour que l'on puisse encoder depuis un mkv.

voici ce que ça donne :

#!/bin/sh
video=`zenity --file-selection --title="Veuillez sélectionner une vidéo à convertir"`
mencoder -aid 1 -sid 3 -fontconfig -font Arial -subcp latin1 -subfont-text-scale 4 "${video}" -oac mp3lame -lameopts abr:br=128 -ovc xvid -xvidencopts bitrate=200:chroma_opt:vhq=4:bvhq=1:quant_type=mpeg -vf pp=de,scale=320:-2,expand=320:240,scale=320:240 -o "${video}.ZEN.avi" 2>&1 | gawk -vRS='\r' '$1 ~ /Pos/ {gsub(/Pos:/,"  ");gsub(/%)/," ");gsub(/ \(/," ");if ($3>0)print $3; fflush();}' | zenity --progress --auto-close --text="Conversion de ${video} en cours" --title="Progression de la conversion"

j'aurais voulu un petit coup de main pour créer une boite de dialogue qui permettrait de choisir la piste audio et la piste de sous-titre. Plutôt que de mettre manuellement -aid 1 -sid 3.
J'ai vu qu'en lançant mencoder dans un terminal, il savait reconnaitre le aid (pour l'audio) ou le sid (pour les sous-titres) du fichier.
exemple:

[mkv] Track ID 1: video (V_MPEG4/ISO/AVC), -vid 0
[mkv] Track ID 2: audio (A_AAC), -aid 0, -alang fre
[mkv] Track ID 3: audio (A_AAC), -aid 1, -alang eng
[mkv] Track ID 4: subtitles (S_VOBSUB), -sid 0, -slang mis
[mkv] Track ID 5: subtitles (S_VOBSUB) "VobSub", -sid 1, -slang fre
[mkv] Track ID 6: subtitles (S_TEXT/UTF8) "SubRip", -sid 2, -slang fre
[mkv] Track ID 7: subtitles (S_TEXT/UTF8), -sid 3, -slang eng

Mais je sais pas comment récupérer ces infos et les proposer dans une boite de dialogue.

Hors ligne

#2 Le 18/05/2009, à 23:28

Jardiland

Re : mencoder et zenity (coup de pouce pour un script)

Donne un poisson à un homme et tu le nourrira pour la journée, apprend lui à pêcher et tu le nourrira pour la vie.

Tu devrait y arriver facilement avec quelques commandes :

Pour sélectionner une ligne précise dans la sortie :

man grep

Pour sélectionner un mot particulier dans une ligne (une fois filtrée par grep) :

man cut

Si cut n'est pas assez puissant (en gros, si tu n'es pas sur à l'avance du nombre de mots dans ta ligne), tu peux aussi faire des sélections plus poussée à l'aide de sed (et des expressions régulières)

man sed

(et google pour apprendre à te servir des expressions régulière).

Note : apprendre à utiliser les expressions régulières peut sauver des vies. (ou au moins te faire gagner de précieuse heures sur des tâches répétitives)

Dernière modification par Jardiland (Le 18/05/2009, à 23:30)


Réinstaller son système au moindre soucis est un réflexe de windowsien.
Sous linux, tous les problèmes peuvent être résolu sans réinstaller (à part sudo rm / -fr)
---
Votre ordinateur s'ennuie ? Faites le participer à la recherche contre le cancer !

Hors ligne

#3 Le 18/05/2009, à 23:43

Hizoka

Re : mencoder et zenity (coup de pouce pour un script)

un peu d'aide pour zenity : zenity

pour la gestion des mkv : http://forum.ubuntu-fr.org/viewtopic.php?id=293216

pour connaitre le contenu d'un mkv :

mkvmerge -I fichiermkv

Hors ligne

#4 Le 19/05/2009, à 12:34

nubu

Re : mencoder et zenity (coup de pouce pour un script)

merci pour le coup de pouce.
pour l'instant j'arrive à ça :

video=`zenity --file-selection --title="Veuillez sélectionner une vidéo à convertir"`
piste=`mkvmerge -I ${video} | grep Track | grep audio`
zenity --entry --title="piste" --text="Veuillez indiquer la piste audio" ${piste}

bien entendu ça marche pas. (bizarrement sur certains mkv ça marche pas du tout alors qu'ils ont bien les mots track et audio dans le resultat...)
mkvmerge ne donne pas le sid et le aid, comme le fait mencoder. Mais je n'ai pas trouvé le moyen de l'afficher sans qu'il encode.
Après il faudrait que j'arrive à mettre entre guillemets chaque ligne du résultat et non pas un ${piste} qui mélange tout.
Je suis pas encore rendu...:)

Hors ligne

#5 Le 19/05/2009, à 15:09

Hizoka

Re : mencoder et zenity (coup de pouce pour un script)

Utilise un systeme de tableau et non un entry.... plus simple pour choisir et pour afficher.

Hors ligne

#6 Le 19/05/2009, à 18:29

nubu

Re : mencoder et zenity (coup de pouce pour un script)

bon j'ai vraiment un peu de mal
alors j'ai fait ça:

video=`zenity --file-selection --title="Veuillez sélectionner une vidéo à convertir"`
pistes=`mkvmerge -I "${video}"`
aid=$(zenity --entry \
  --title="Veuillez indiquer la piste audio" \
  --text="Veuillez indiquer la piste audio 

${pistes}

mettez 0 pour la première piste audio
1 pour la seconde etc..." \
  --entry-text "laissez vide si aucune" \
)
sid=$(zenity --entry \
  --title="Veuillez indiquer la piste subtitles" \
  --text="Veuillez indiquer la piste subtitles 

${pistes}

mettez 1 pour la première piste subtitles
0 pour la seconde etc..." \
  --entry-text "laissez vide si aucune" \
)
mencoder -aid ${aid} -sid ${sid} -fontconfig -font Arial -subcp latin1 -subfont-text-scale 4 "${video}" -oac mp3lame -lameopts abr:br=128 -ovc xvid -xvidencopts bitrate=200:chroma_opt:vhq=4:bvhq=1:quant_type=mpeg -vf pp=de,scale=320:-2,expand=320:240,scale=320:240 -o "${video}.ZEN.avi" 2>&1 | gawk -vRS='\r' '$1 ~ /Pos/ {gsub(/Pos:/,"  ");gsub(/%)/," ");gsub(/ \(/," ");if ($3>0)print $3; fflush();}' | zenity --progress --auto-close --text="Conversion de ${video} en cours" --title="Progression de la conversion"

ça fonctionne, même si c'est pas aussi bien que ce que je pensais faire au début.

il faudrait surement que je sois meilleur en shell avant de m'attaquer à des trucs comme ça.

En tout cas merci pour l'aide.

Hors ligne

#7 Le 20/05/2009, à 00:25

Hizoka

Re : mencoder et zenity (coup de pouce pour un script)

Ce n'est pas trop difficile, regarde du cote de mon script qui gere les mkv, il te suffit de ne reprendre que la partie qui scan le mkv et de modifier les actions du boutons executer.

mon script utilise gtkdialog qui est plus puissant que zenity (mais ils peuvent etre complémentaires).

Hors ligne

#8 Le 20/05/2009, à 14:36

nubu

Re : mencoder et zenity (coup de pouce pour un script)

merci, j'avais pas pensé à regarder ton script. je savais pas que c'était en bash.

J'ai fais ça en bidouillant des parties de ton code, je suis pas sur que se soit très propre mais ça a l'air de fonctionner :

#! /bin/bash
fichier_mkv=`zenity --file-selection --title="Veuillez sélectionner une vidéo à convertir"`

# Scan des fichiers audios, supprimer tous les espaces pour qu'il y ai bien 2 colonnes et les numéroter
pistes_audio=$(mkvmerge -I "${fichier_mkv}" | grep "Track" | grep "audio" | sed "s/ /_/g ;" | cat -n)

choix_audio=$(zenity --list \
  --title="séléctionnez une piste audio" \
  --text="si vous ne séléctionnez rien la piste audio par défaut sera choisie" \
  --column="N°" --column="detail" \
 ${pistes_audio})

#si le resltat n'est pas un chiffre (si l'utilisateur n'a rien choisit) , on ecrit rien
if [[ -z $(echo "$choix_audio" | egrep "^[0-9]") ]]
then
	aid=
else
	aid=`expr $choix_audio - 1`
	aid="-aid $aid"
fi

# Scan des fichiers de sous-titres
pistes_sub=$(mkvmerge -I "${fichier_mkv}" | grep "Track" | grep "subtitles" | sed "s/ /_/g ;" | cat -n)

choix_sub=$(zenity --list \
  --title="séléctionnez une piste de sous-titre" \
  --text="ne rien séléctionner si vous ne desirez aucun sous-titre" \
  --column="N°" --column="detail" \
 ${pistes_sub})


if [[ -z $(echo "$choix_sub" | egrep "^[0-9]") ]]
then
	sid=
else
	sid=`expr $choix_sub - 1`
	sid="-sid $sid -fontconfig -font Arial -subcp latin1 -subfont-text-scale 4 "
fi
mencoder $aid $sid "${fichier_mkv}" -oac mp3lame -lameopts abr:br=128 -ovc xvid -xvidencopts bitrate=200:chroma_opt:vhq=4:bvhq=1:quant_type=mpeg -vf pp=de,scale=320:-2,expand=320:240,scale=320:240 -o "${fichier_mkv}.ZEN.avi" 2>&1 | gawk -vRS='\r' '$1 ~ /Pos/ {gsub(/Pos:/,"  ");gsub(/%)/," ");gsub(/ \(/," ");if ($3>0)print $3; fflush();}' | zenity --progress --auto-close --text="Conversion de ${fichier_mkv} en cours" --title="Progression de la conversion"

si quelqu'un a envie de me corriger, je suis preneur.
en tout cas merci, en bidouillant j'ai appris quelques trucs. smile

Hors ligne

#9 Le 20/05/2009, à 17:32

Hizoka

Re : mencoder et zenity (coup de pouce pour un script)

fichier_mkv=`zenity --file-selection --title="Veuillez sélectionner une vidéo à convertir"`

=>

fichier_mkv=$(zenity --file-selection --title="Veuillez sélectionner une vidéo à convertir")

il est vivement conseiller d'utiliser $() à la place des `` (je ne sais plus trop pourquoi...)

Pour info : ${fichier_mkv} est pareil que $fichier_mkv (on m'avait dis qu'il vallait mieux mettre les accolades (au moins tu peux faire ca avec :

aliment=frite
echo "j'ai 10 ${aliment}s"

l'ajout du s est possible car sans les accolades, cela aurait été considéré comme une variable inconnue.

Tu ne propose pas la video ?

Sinon pourquoi ne pas créer une fenetre zenity avec selection multiple ? genre tu choisi l'audio avec les sous-titres...

zenity --list --multiple

un exemple pour avoir les deux :

mkvmerge -I "${fichier_mkv}" | grep "Track" | egrep "audio|subtitles" | sed "s/ /_/g ;" | cat -n

C'est comme ça qu'on apprend le mieux je pense, en dissequant un peu d'autres scripts smile

Dernière modification par Hizoka (Le 20/05/2009, à 17:32)

Hors ligne

#10 Le 22/05/2009, à 16:11

nubu

Re : mencoder et zenity (coup de pouce pour un script)

merci Hizoka, tu m'aide beaucoup. smile
Je ne propose pas la vidéo parce que je me disais que les mkvs n'ont qu'une piste video (y en a t il qui en on plusieurs?) Donc le script prend la 1ière piste.

Sinon après "quelques" recherches j'ai réussi à pondre ce code, qui commence à avoir un peu de gueule cool
(il faut que je fasse quelque chose pour quand l'utilisateur ne choisi rien ou annule, mais j'y arrive pas encore)

#! /bin/bash
fichier_mkv=$(zenity --file-selection --title="Veuillez sélectionner une vidéo à convertir")

#on recupere les pistes et on les modifie pour pouvoir les mettre dans la boite de selection
pistes=$(mkvmerge -I "${fichier_mkv}" | grep "Track" | egrep "audio|subtitles" | sed "s/ /_/g ;" )
pistes_audio=$(echo "$pistes" | grep "audio" | cat -n | sed "s/^[ \t]*// ; s/^/FALSE audio/ ;" )
pistes_sub=$(echo "$pistes" | grep "subtitles" | cat -n | sed "s/^[ \t]*// ; s/^/FALSE sub/ ;" )

choix=$(zenity --list --multiple --checklist --height=350 --width=700\
  --title="séléctionnez les pistes" \
  --text="" \
  --column=""  --column="N°" --column="detail" \
$pistes_audio $pistes_sub | sed "s/|/\n/g ;")

#on verifie si l'utilisateur n'a pas coché plusiers piste audio puis sous-titre
test_audio=$(echo "$choix" | grep "audio" | sed s/audio/audio\\n/g | grep audio |wc -l)
if [[ $test_audio > 1 ]]
then
zenity --info \
  --text="vous ne pouvez choisir qu'une piste audio"
else
    
	test_sub=$(echo "$choix" | grep "sub" | sed s/sub/sub\\n/g | grep sub |wc -l)
	if [[ $test_sub > 1 ]]
	then
	zenity --info \
	  --text="vous ne pouvez choisir qu'une piste de sous-titres"
	else
#on recupere les choix puis on les transforme pour les ajouter à la commande d'encodage
		aid=$(echo "$choix" | grep "audio" | sed "s/audio//g ;")
		if let $aid 2>/dev/null 
		then
			aid=$(expr $aid - 1)
			aid="-aid $aid"
		else
			aid=""
		fi


		sid=$(echo "$choix" | grep "sub" | sed "s/sub//g ;")
		if let $sid 2>/dev/null 
		then
			sid=$(expr $sid - 1)
			sid="-sid $sid -fontconfig -font Arial -subcp latin1 -subfont-text-scale 4 "
		else
			sid=""
		fi

		mencoder $aid $sid "${fichier_mkv}" -oac mp3lame -lameopts abr:br=128 -ovc xvid -xvidencopts bitrate=200:chroma_opt:vhq=4:bvhq=1:quant_type=mpeg -vf pp=de,scale=320:-2,expand=320:240,scale=320:240 -o "${fichier_mkv}.ZEN.avi" 2>&1 | gawk -vRS='\r' '$1 ~ /Pos/ {gsub(/Pos:/,"  ");gsub(/%)/," ");gsub(/ \(/," ");if ($3>0)print $3; fflush();}' | zenity --progress --auto-close --text="Conversion de ${fichier_mkv} en cours" --title="Progression de la conversion"

	fi
fi

Je voulais faire une fonction dans la dernière partie, pour apprendre et parce que je répète quasiment à l'identique une série de commande, mais je bloque complètement.
il ne veut pas m'interpréter le code qui suit.

#! /bin/bash
affichage()
{
$1=$2
}
affichage aid audio 
echo "aid:$aid"

enfin en tout cas je me sens de plus en plus  à l'aise en bash... big_smile

ps: il faudrait un système de colorisation de code pour ce forum, dès que c'est un peu long on s'arrache les yeux.

Hors ligne

#11 Le 22/05/2009, à 17:48

Hizoka

Re : mencoder et zenity (coup de pouce pour un script)

ZENITY :

choix=$(zenity --list --multiple --checklist --height=350 --width=700\
  --title="séléctionnez les pistes" \
  --text="" \
  --column=""  --column="N°" --column="detail" \
$pistes_audio $pistes_sub | sed "s/|/\n/g ;")

Tu peux faire simplement :

choix=$(zenity --list --multiple --checklist --height=350 --width=700 --title="séléctionnez les pistes" --text="" --column=""  --column="N°" --column="detail" $pistes_audio $pistes_sub | sed "s/|/\n/g ;")

les sauts de lignes sont inutiles...à toi de voir smile

zenity --info --text="vous ne pouvez choisir qu'une piste audio"

sans le \ également smile
.

CODE :

test_audio=$(echo "$choix" | grep "audio" | sed s/audio/audio\\n/g | grep audio |wc -l)

Ça serait pas plus simple un simple :

test_audio=$(echo "$choix" | grep "audio" | sed s/audio/audio\\n/g | grep audio |wc -l)

A quoi ça sert de séparer les lignes ?
Et puis si  :

audio1 devient
audio
1

ça fait 2 lignes donc il te signalera que tu as choisis 2 pistes...


Autre question de choix, pourquoi ne pas séparer en 2 if la verif de audio, puis des sous titres, ca ne serait pas plus clair ?


FONCTIONS :

HOP, je refais mon message, pour te montrer les fonctions :

Créons plusieurs fonctions :

La 1ere fonction, celle du choix :

function CHOIX()
{
choix=$(zenity --list --multiple --checklist --height=350 --width=700\
  --title="séléctionnez les pistes" \
  --text="" \
  --column=""  --column="N°" --column="detail" \
$pistes_audio $pistes_sub | sed "s/|/\n/g ;")
}

.

2e fonction, celle de l'erreur de choix :

function ERREUR_CHOIX()
{
zenity --question --title="Erreur de choix" --text="Vous avez sélectionné trop de pistes audio.
Voulez-vous rechoisir ?" && CHOIX || exit
}

le && désigne : si vrai
le || désigne : si faux

.

3e fonction, celle de la vérification audio :

function VERIF_AUDIO()
{
test_audio=$(echo "$choix" | grep "audio" | wc -l)
if [[ $test_audio > 1 ]]
then
ERREUR_CHOIX
fi
}

.

4e fonction, celle de la verif de sous titres :

function VERIF_SOUSTITRES()
{
test_audio=$(echo "$choix" | grep "sub" | wc -l)
if [[ $test_audio > 1 ]]
then
ERREUR_CHOIX
fi
}

.

Il ne reste plus qu'a faire une boucle smile

ça donnerai un truc du genre :

#! /bin/bash
fichier_mkv=$(zenity --file-selection --title="Veuillez sélectionner une vidéo à convertir")

#on récupère les pistes et on les modifie pour pouvoir les mettre dans la boite de sélection
pistes=$(mkvmerge -I "${fichier_mkv}" | grep "Track" | egrep "audio|subtitles" | sed "s/ /_/g ;" )
pistes_audio=$(echo "$pistes" | grep "audio" | cat -n | sed "s/^[ \t]*// ; s/^/FALSE audio/ ;" )
pistes_sub=$(echo "$pistes" | grep "subtitles" | cat -n | sed "s/^[ \t]*// ; s/^/FALSE sub/ ;" )

CHOIX # Permet de récupérer les pistes

VERIF_AUDIO # Vérifie le nombre de piste audio et envoi une erreur si plusieurs

VERIF_SOUSTITRES # Verifi le nombre de piste de sous-titres et envoi une erreur si plusieurs

Ainsi, tant que les différentes verif ne sont pas ok, il recommence au début.
Perso, j'aime bien détailler mes scripts en fonctions, toujours pratique smile


Mais en y regardant de plus prêt, ce n'est pas parfait, que tu te plante avec l'audio ou les sous-titres, tu auras le même message d'erreur....
Personnalisons ça encore un peu smile

Il suffit simplement de faire cette petite modif sur la fonction ERREUR_CHOIX :

function ERREUR_CHOIX()
{
zenity --question --title="Erreur de choix" --text="Vous avez sélectionné trop de $1.
Voulez-vous rechoisir ?" && CHOIX || exit
}

Ou $1 correspond a ton premier argument.

Pour l'utiliser du coup :
ERREUR_FONCTION "piste audio"
ERREUR_FONCTION "sous-titres"

Te voila avec un message quasiment identique mais différents en fonctions des 2 cas smile

#! /bin/bash
affichage()
{
$1=$2
}
affichage aid audio
echo "aid:$aid"

J'ai du mal à piger ce que tu veux faire...
mais ne t'amuse pas a transférer des arguments comme ça...
si tu veux vraiment dégager les $1, $2...

nouvelle_var="$1"

par ex...

Mais donne plus de détail sur ton intention...

Dernière modification par Hizoka (Le 22/05/2009, à 17:56)

Hors ligne

#12 Le 22/05/2009, à 19:26

nubu

Re : mencoder et zenity (coup de pouce pour un script)

merci beaucoup, je commence à y voir plus clair. smile

Si je faisais pas 2 if séparés pour la verif, c'est que je connaissais pas "exit" et je ne voulais pas que le script continu s'il y avait une erreur dans les choix. Je me rendais compte que c'était du bidouillage mais je savais pas comment faire autrement.

J'ai corrigé le script avec tes conseils.
Il est plus "ergonomique" maintenant, c'est vrai que c'est mieux de proposer de re-choisir en cas d'erreur.
D'ailleurs je sais pas pourquoi mais quand on choisit deux fois de suite 2 pistes audio (par exemple), le script bug. Il ne renvoi pas à la fonction CHOIX et laisse passer l'erreur.

#! /bin/bash
fichier_mkv=$(zenity --file-selection --title="Veuillez sélectionner une vidéo à convertir")

#on recupere les pistes et on les modifie pour pouvoir les mettre dans la boite de selection
pistes=$(mkvmerge -I "${fichier_mkv}" | grep "Track" | egrep "audio|subtitles" | sed "s/ /_/g ;" )
pistes_audio=$(echo "$pistes" | grep "audio" | cat -n | sed "s/^[ \t]*// ; s/^/FALSE audio/ ;" )
pistes_sub=$(echo "$pistes" | grep "subtitles" | cat -n | sed "s/^[ \t]*// ; s/^/FALSE sub/ ;" )

function CHOIX()
{
choix=$(zenity --list --multiple --checklist --height=350 --width=700\
  --title="séléctionnez les pistes" \
  --text="" \
  --column=""  --column="N°" --column="detail" \
$pistes_audio $pistes_sub | sed "s/|/\n/g ;")
}

function ERREUR_CHOIX()
{
zenity --question --title="Erreur de choix" --text="Vous avez sélectionné trop de $1.
Voulez-vous rechoisir ?" && CHOIX || exit
}

function VERIF_AUDIO()
{
test_audio=$(echo "$choix" | grep "audio" | wc -l)
if [[ $test_audio > 1 ]]
then
ERREUR_CHOIX "piste audio"
fi
}

function VERIF_SOUSTITRES()
{
test_audio=$(echo "$choix" | grep "sub" | wc -l)
if [[ $test_audio > 1 ]]
then
ERREUR_CHOIX "sous-titres"
fi
}

CHOIX # Permet de récupérer les pistes

VERIF_AUDIO # Vérifie le nombre de piste audio et envoi une erreur si plusieurs

VERIF_SOUSTITRES # Verifie le nombre de piste de sous-titres et envoi une erreur si plusieurs


#on recupere les choix puis on les transforme pour les ajouter à la commande d'encodage
aid=$(echo "$choix" | grep "audio" | sed "s/audio//g ;")
if let $aid 2>/dev/null 
then
	aid=$(expr $aid - 1)
	aid="-aid $aid"
else
	aid=""
fi


sid=$(echo "$choix" | grep "sub" | sed "s/sub//g ;")
if let $sid 2>/dev/null 
then
	sid=$(expr $sid - 1)
	sid="-sid $sid -fontconfig -font Arial -subcp latin1 -subfont-text-scale 4 "
else
	sid=""
fi

mencoder $aid $sid "${fichier_mkv}" -oac mp3lame -lameopts abr:br=128 -ovc xvid -xvidencopts bitrate=200:chroma_opt:vhq=4:bvhq=1:quant_type=mpeg -vf pp=de,scale=320:-2,expand=320:240,scale=320:240 -o "${fichier_mkv}.ZEN.avi" 2>&1 | gawk -vRS='\r' '$1 ~ /Pos/ {gsub(/Pos:/,"  ");gsub(/%)/," ");gsub(/ \(/," ");if ($3>0)print $3; fflush();}' | zenity --progress --auto-close --text="Conversion de ${fichier_mkv} en cours" --title="Progression de la conversion"

sinon, mon :

#! /bin/bash
affichage()
{
$1=$2
}
affichage aid audio
echo "aid:$aid"

c'est parce que je voulais faire une fonction pour cette partie du code :

aid=$(echo "$choix" | grep "audio" | sed "s/audio//g ;")
if let $aid 2>/dev/null
then
    aid=$(expr $aid - 1)
    aid="-aid $aid"
else
    aid=""
fi

donc je me disais "il suffit de faire ça" :

function AFFICHAGE()
{
$1=$(echo "$choix" | grep "$2" | sed "s/$2//g ;")
if let \$$1 2>/dev/null
then
    $1=$(expr \$$1 - 1)
    $1="-$1 \$$1"
else
    $1=""
fi
AFFICHAGE aid audio
AFFICHAGE sid sub

mais ça ne fonctionne pas, je ne comprend pas vraiment pourquoi..
même si j'imagine que c'est complètement n'importe quoi de penser comme ça tongue

Hors ligne

#13 Le 22/05/2009, à 22:16

Hizoka

Re : mencoder et zenity (coup de pouce pour un script)

qu'est sensé faire : if let $aid ?

je ne connais pas la commande let


Pour le bug, la raison :
tu fais une erreur, du coup il te relance la fenêtre de sélection mais après, il ne reteste pas, c'est pour ça.

donc il suffit de changer l'ordre des éléments :

function VERIF_AUDIO()
{
test_audio=$(echo "$choix" | grep "audio" | wc -l)
if [[ $test_audio > 1 ]]
then
ERREUR_CHOIX "piste audio"
fi
}

function VERIF_SOUSTITRES()
{
test_audio=$(echo "$choix" | grep "sub" | wc -l)
if [[ $test_audio > 1 ]]
then
ERREUR_CHOIX "sous-titres"
fi
}

function CHOIX()
{
choix=$(zenity --list --multiple --checklist --height=350 --width=700\
  --title="séléctionnez les pistes" \
  --text="" \
  --column=""  --column="N°" --column="detail" \
$pistes_audio $pistes_sub | sed "s/|/\n/g ;")

VERIF_AUDIO # Vérifie le nombre de piste audio et envoi une erreur si plusieurs

VERIF_SOUSTITRES # Vérifie le nombre de piste de sous-titres et envoi une erreur si plusieurs
}

function ERREUR_CHOIX()
{
zenity --question --title="Erreur de choix" --text="Vous avez sélectionné trop de $1.
Voulez-vous rechoisir ?" && CHOIX || exit
}

CHOIX # Permet de récupérer les pistes

On incruste les verif dans la fonction CHOIX, comme ça on est sur que les verif seront effectué a chaque choix.

De ce fait, les fonctions de verif deviennent inutiles si elles ne sont appelé que par CHOIX (ces fonctions seraient intéressantes si d'autres fonctions faisaient appelle à elles).

du coup ça donne :

function ERREUR_CHOIX()
{
zenity --question --title="Erreur de choix" --text="Vous avez sélectionné trop de $1.
Voulez-vous rechoisir ?" && CHOIX || exit
}

function CHOIX()
{
choix=$(zenity --list --multiple --checklist --height=350 --width=700\
  --title="séléctionnez les pistes" \
  --text="" \
  --column=""  --column="N°" --column="detail" \
$pistes_audio $pistes_sub | sed "s/|/\n/g ;")

test_audio=$(echo "$choix" | grep "audio" | wc -l)
if [[ $test_audio > 1 ]]
then
	ERREUR_CHOIX "piste audio"
fi

test_audio=$(echo "$choix" | grep "sub" | wc -l)
if [[ $test_audio > 1 ]]
then
	ERREUR_CHOIX "sous-titres"
fi
}

Dernière modification par Hizoka (Le 22/05/2009, à 22:18)

Hors ligne

#14 Le 23/05/2009, à 00:09

nubu

Re : mencoder et zenity (coup de pouce pour un script)

let, c'était pour vérifier si la variable était bien un chiffre. J'avais trouvé ça sur internet mais en cherchant à savoir comment ça fonctionnait j'ai trouvé des gens qui s'en servait pour faire d'autres choses. Mais je l'ai remplacé par le code pour vérifier si la variable est vide.

On a tellement modifié le code originel que cette partie avec ma fonction "AFFICHAGE" n'est plus utile. Mais j'aurais bien aimer savoir si on pouvait faire des variables dont le nom était variable (des "variables variable").

Voilà où j'en suis avec ce script (encore pas mal modifié avec tes derniers conseils) :

#! /bin/bash
fichier_mkv=$(zenity --file-selection --title="Veuillez sélectionner une vidéo à convertir")

#on recupere les pistes et on les modifie pour pouvoir les mettre dans la boite de selection
pistes=$(mkvmerge -I "${fichier_mkv}" | grep "Track" | egrep "audio|subtitles" | sed "s/ /_/g ;" )
pistes_audio=$(echo "$pistes" | grep "audio" | cat -n | sed "s/^[ \t]*// ; s/^/FALSE audio/ ;" )
pistes_sub=$(echo "$pistes" | grep "subtitles" | cat -n | sed "s/^[ \t]*// ; s/^/FALSE sub/ ;" )

function ERREUR_CHOIX()
{
zenity --question --title="Erreur de choix" --text="Vous avez sélectionné trop de $1.
Voulez-vous rechoisir ?" && CHOIX || exit
}

function CHOIX()
{
choix=$(zenity --list --multiple --checklist --height=350 --width=700\
  --title="séléctionnez les pistes" \
  --text="" \
  --column=""  --column="N°" --column="detail"  \
$pistes_audio $pistes_sub | sed "s/|/\n/g ;" )

test_audio_vide=$(echo "$choix" | grep "audio")
if [ -z "$test_audio_vide" ] 
then
zenity --question --title="Erreur de choix" --text="Vous devez choisir au moins une piste audio.
Voulez-vous rechoisir ?" && CHOIX || exit
fi

# Vérifie le nombre de piste audio et envoi une erreur si plusieurs
test_audio=$(echo "$choix" | grep "audio" | wc -l)
if [[ $test_audio > 1 ]]
then
ERREUR_CHOIX "piste audio"
fi

# Verifie le nombre de piste de sous-titres et envoi une erreur si plusieurs
test_sub=$(echo "$choix" | grep "sub" | wc -l)
if [[ $test_sub > 1 ]]
then
ERREUR_CHOIX "sous-titres"
fi


#on recupere les choix puis on les transforme pour les ajouter à la commande d'encodage
aid=$(echo "$choix" | grep "audio" | sed "s/audio//g ;")
	aid=$(expr $aid - 1)
	aid="-aid $aid"

sid=$(echo "$choix" | grep "sub" | sed "s/sub//g ;")
if [ -z "$sid" ] 
then
	sid=""
else
	sid=$(expr $sid - 1)
	sid="-sid $sid -fontconfig -font Arial -subcp latin1 -subfont-text-scale 4 "
fi
}

CHOIX # Permet de récupérer les pistes et de les verifier

mencoder $aid $sid "${fichier_mkv}" -oac mp3lame -lameopts abr:br=128 -ovc xvid -xvidencopts bitrate=200:chroma_opt:vhq=4:bvhq=1:quant_type=mpeg -vf pp=de,scale=320:-2,expand=320:240,scale=320:240 -o "${fichier_mkv}.ZEN.avi" 2>&1 | gawk -vRS='\r' '$1 ~ /Pos/ {gsub(/Pos:/,"  ");gsub(/%)/," ");gsub(/ \(/," ");if ($3>0)print $3; fflush();}' | zenity --progress --auto-close --text="Conversion de ${fichier_mkv} en cours" --title="Progression de la conversion"

Il est vraiment pas mal, il répond bien aux différentes possibilités de l'utilisateur mais il y a encore un truc que je n'arrive pas à résoudre avant d'essayer de regrouper les 3 scripts en un seul :
lorsque l'utilisateur choisi "annuler" lors du "file-selection" et du "--list --multiple" le sript ne s'arrête pas, il continue avec des valeurs vides. Comment l'arrêter après une annulation?

et puis pendant que j'y suis, une autre question dont je ne trouve pas de réponse sur internet :
peut-on renvoyer à CHOIX (lors d'une erreur) mais en gardant les pré-sélections de l'utilisateur?
c'est plus par curiosité, parce que ça ne sera pas vraiment utile pour ce script.

Hors ligne

#15 Le 23/05/2009, à 00:54

Hizoka

Re : mencoder et zenity (coup de pouce pour un script)

On a tellement modifié le code originel que cette partie avec ma fonction "AFFICHAGE" n'est plus utile. Mais j'aurais bien aimer savoir si on pouvait faire des variables dont le nom était variable (des "variables variable").

Dont l'argument est une variable ?
Si tu veux faire :

nom-de-la-fonction "${variable-servant-d'argument}"

salutation="coucou toi"

function affichage_salut()
{
echo "$1"
}

affichage_salut "${salutation}"

C'est possible smile

Pour ton problème de fermeture de fenêtre, au choix :

- ajoute "|| exit" a la fin de ta ligne.

fichier_mkv=$(zenity --file-selection --title="Veuillez sélectionner une vidéo à convertir") || exit

.

- ajoute une vérification du genre :

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

il regarde quel est le résultat renvoyé par la dernière commande, 0 pour ok, 1 pour la fermeture de fenêtre et pour un cancel.

- ajoute une vérification de la contenance de ta variable :

if [[ -z ${variable] ]]
then
exit
fi

.

Pour la dernière question sur le CHOIX, il te suffit d'en faire une copie avant la vérification du genre :

SAVE_CHOIX="${CHOIX}"

et si lors de la verif, tu veux récupérer la save :

CHOIX="${SAVE_CHOIX}"

Mais si tu veux faire ça pour pré cocher les cases, c'est plus compliqué, il faut utiliser l'option de zenity qui coche par defaut certaines cases.
Il suffit d'ajouter TRUE ou FALSE devant tes lignes de propositions :

zenity --title "Ex" --list --text "Voici un exemple tout con" --checklist --column "Choix" --column "effet" --width=500 --height=400 \
TRUE "Je suis une fenetre coché par defaut" \
FALSE "Moi non...."

Dernière modification par Hizoka (Le 23/05/2009, à 01:02)

Hors ligne

#16 Le 23/05/2009, à 09:08

nubu

Re : mencoder et zenity (coup de pouce pour un script)

On a tellement modifié le code originel que cette partie avec ma fonction "AFFICHAGE" n'est plus utile. Mais j'aurais bien aimer savoir si on pouvait faire des variables dont le nom était variable (des "variables variable").

j'ai fini par trouver comment faire : smile

#! /bin/bash

choix="audio1
sub1"

function f1()
{
sortie=$(echo "$choix" | grep "${2}" | sed "s/${2}//g ;")
if let $sortie 2>/dev/null
then
    sortie=$(expr $sortie - 1)
    echo "-$1 $sortie"
else
   echo "aaa"
fi
}

aid=$(f1 "aid" "audio")
sid=$(f1 "sid" "sub")

echo "aid:$aid
sid:$sid"

Pour la question sur les pré-sélections de CHOIX, merci je ne connaissais pas l'option de zenity qui coche par défaut certaines cases. Il faut dire que le manuel de zenity est un peu léger.


sinon, pour les annulations  ce code fonctionne très bien :

fichier_mkv=$(zenity --file-selection --title="Veuillez sélectionner une vidéo à convertir") || exit

celui-là, je n'arrive pas à le faire fonctionner, $? me renvoie toujours le même résultat, quel que soit le choix de l'utilisateur (valider ou annuler)

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

il n'y a que celui-là qui fonctionne pour la checklist, mais il ne différencie pas "annuler" de "valider avec aucune sélection" :

if [[ -z ${variable] ]]
then
exit
fi

mais peut-être que zenity ne peut pas differrencier un "annuler" d'un "valider avec une valeur vide"...

Hors ligne

#17 Le 23/05/2009, à 15:22

Hizoka

Re : mencoder et zenity (coup de pouce pour un script)

Pour $? :

zenity --question
echo $?

Mais ne fonctionne peut être pas quand on l'intègre dans une variable comme tu le fais avec les fenêtres zenity.

Pour la variable vide, il ne peut pas faire de différence en effet.

--list --multiple --checklist

Le multiple est inutile pour le checklist, utile seulement pour une liste simple.


Pour avoir des infos sur zenity, et sur le bash, je t'invite à regarder mon script zenity, je pense franchement qu'il y a quasiment toutes les options possibles : http://forum.ubuntu-fr.org/viewtopic.php?pid=2301501


Si tu as un peu de temps, je veux bien que tu teste : http://forum.ubuntu-fr.org/viewtopic.php?id=293216 et me faire un retour sur son fonctionnement chez toi smile

Dernière modification par Hizoka (Le 23/05/2009, à 15:42)

Hors ligne

#18 Le 25/05/2009, à 13:15

nubu

Re : mencoder et zenity (coup de pouce pour un script)

Pour $? , je le plaçais au mauvais endroit, juste après le sed qui était dans la variable "choix". Maintenant j'ai séparé le sed et ça fonctionne : il différencie "annuler" de "valider vide".

J'ai tout repris et j'ai essayer de refaire le script nickel, mais je ne comprend pas pourquoi ça ne fonctionne pas quand on choisit un fichier de sous titre externe avec un espace dans le titre.

#! /bin/bash

#la commande finale
FIN ()
{
mencoder $aid $sid $sub "${video}" -oac mp3lame -lameopts abr:br=128 -ovc xvid -xvidencopts bitrate=200:chroma_opt:vhq=4:bvhq=1:quant_type=mpeg -vf pp=de,scale=320:-2,expand=320:240,scale=320:240 -o "${video}.ZEN.avi" 2>&1 | gawk -vRS='\r' '$1 ~ /Pos/ {gsub(/Pos:/,"  ");gsub(/%)/," ");gsub(/ \(/," ");if ($3>0)print $3; fflush();}' | zenity --progress --auto-close --text="Conversion de ${video} en cours" --title="Progression de la conversion"
}

#si l'utilisateur choisit une piste de sous-titre externe 
function SUB_EXT()
{
if [ -z "$sub_ext" ] 
then
	sub=""
else
	sub="-sub ${sub_ext} -fontconfig -font Arial -subcp latin1 -subfont-text-scale 4"
fi
}

#si le fichier n'est pas un mkv
function PASMKV()
{
zenity  --question --title="sous-titre" --text="Désirez-vous ajouter un fichier de sous-titre externe?" 
if [[ $? == 1 ]]
then
	FIN #on envoie la commande finale
else
	sub_ext=$(zenity --file-selection --title="Veuillez sélectionner un sous-titre")
	SUB_EXT #on ajoute les parametres
	FIN #on envoie la commande finale
fi
}


#affiche les pistes du mkv et verifie si le choix est correct
function VERIF_CHOIX()
{
choix=$(zenity --list --checklist --height=350 --width=700\
  --title="séléctionnez les pistes" \
  --text="Veuillez choisir au moins une piste audio." \
  --column=""  --column="N°" --column="detail"  \
$pistes_audio $pistes_sub FALSE "subext" "choisir un sous-titre externe" )

if [[ $? == 1 ]]
then
exit
else 
choix=$(echo "$choix" | sed "s/|/\n/g ;")
fi

test_audio_vide=$(echo "$choix" | grep "audio")
if [ -z "$test_audio_vide" ] 
then
zenity --question --title="Erreur de choix" --text="Vous devez choisir au moins une piste audio.
Voulez-vous rechoisir ?" && VERIF_CHOIX || exit
fi

# Vérifie le nombre de piste audio et envoi une erreur si plusieurs
test_audio=$(echo "$choix" | grep "audio" | wc -l)
if [[ $test_audio > 1 ]]
then
zenity --question --title="Erreur de choix" --text="Vous avez sélectionné trop de pistes audio.
Voulez-vous rechoisir ?" && VERIF_CHOIX || exit
fi

# Verifie le nombre de piste de sous-titres et envoi une erreur si plusieurs
test_sub=$(echo "$choix" | grep "sub" | wc -l)
if [[ $test_sub > 1 ]]
then
zenity --question --title="Erreur de choix" --text="Vous avez sélectionné trop de pistes de sous-titre.
Voulez-vous rechoisir ?" && VERIF_CHOIX || exit
fi
}

#prepare le choix correct pour l'envoyer à la commande finale
function PREPARE_FIN()
{
#on recupere les choix puis on les transforme pour les ajouter à la commande d'encodage
aid=$(echo "$choix" | grep "audio" | sed "s/audio//g ;")
	aid=$(expr $aid - 1)
	aid="-aid $aid"

soustitre=$(echo "$choix" | grep "sub" | sed "s/sub//g ;")
if [ -z "$soustitre" ]
then
	sid=""
else
		if [ $soustitre == "ext" ]
	then
		sub_ext=$(zenity --file-selection --title="Veuillez sélectionner un sous-titre")
		SUB_EXT
	else
		sid=$(expr $soustitre - 1)
		sid="-sid $sid -fontconfig -font Arial -subcp latin1 -subfont-text-scale 4 "
	fi
fi
}


function FENETRE_SELECTION()
{
video=$(zenity --file-selection --title="Veuillez sélectionner une vidéo à convertir") || exit

if [[ -z $(echo "$video" | egrep ".mkv$") ]]
then
	PASMKV #si le fichier n'est pas un mkv
else
	#on recupere les pistes et on les modifie pour pouvoir les mettre dans la boite de selection
	pistes=$(mkvmerge -I "${video}" | grep "Track" | egrep "audio|subtitles" | sed "s/ /_/g ;" )
	pistes_audio=$(echo "$pistes" | grep "audio" | cat -n | sed "s/^[ \t]*// ; s/^/FALSE audio/ ;" )
	pistes_sub=$(echo "$pistes" | grep "subtitles" | cat -n | sed "s/^[ \t]*// ; s/^/FALSE sub/ ;" )
	VERIF_CHOIX # Permet de récupérer les pistes et de les verifier
	PREPARE_FIN #prepare le choix correct pour l'envoyer à la commande finale
	FIN #la commande finale
fi
}
FENETRE_SELECTION #choisit le fichier et verifie si c'est un mkv

sinon pour ton script d'extraction, je l'avais déjà essayé parce qu'au début je pensais l'utiliser pour extraire les mkv et les ré-encoder pour le creative zen à partir des pistes extraites. Mais vu que je suis pas très doué, j'ai abandonné cette solution pour modifier le script de base.

après l'installation, j'ai été surpris par la demande de choisir la gui qui correspond à notre écran (n'y a t il pas moyen d'avoir des fenêtres re-dimenssionables?) d'autant que les screenshots ne fonctionnaient pas (j'ai retesté, maintenant ça fonctionne, je ne sais pas pourquoi)
sinon après, tout fonctionne parfaitement avec tous les mkv que j'ai testé.
c'est juste que je ne savais pas quoi faire avec les pistes extraites :
pour les sous titres et images c'est nickel
pour l'audio ça fonctionne bien mais on ne peut pas se balader dedans avec vlc (j'imagine que c'est normal puisque la piste est juste extraite et non réencodée)
pour la vidéo, je m'attendais a pouvoir lire la piste avec vlc mais ce n'est pas possible.
Je ne savais pas comment refaire un avi avec les pistes que je veux.

voilà j'espère que c'est ce que tu voulais quand tu me demandais un retour smile

Hors ligne

#19 Le 25/05/2009, à 16:53

Hizoka

Re : mencoder et zenity (coup de pouce pour un script)

Pour ton problème d'espace, je te conseille de renommer tes variables en par ex : "${sub_ext}", si tu ne mets pas les "", les espaces foutent la merde, donc le mieux c'est d'en mettre partout sauf si tu es sûr qu'il n'y aura pas d'espace dans tel et tel variable.


pour la gui, le redimensionnement des fenêtres et très compliqué avec gtkdialog, tout ne suit pas...
du coup j'avais créé plusieurs gui, mais je me demandais s'il ne fallait pas que je ne conserve que la gui la plus compact afin qu'elle soit fonctionnelle partout et de simplifier le logiciel...

perso, je peux lire les audio que j'extrais (je viens de retester), manque de codecs ? le fait qu'il n'y avait pas d'extension ?
Idem pour la video.

pour refaire un avi, tout simplement en utilisant avidemux, il te rassemble les 2.

Hors ligne

#20 Le 26/05/2009, à 00:43

nubu

Re : mencoder et zenity (coup de pouce pour un script)

je comprend vraiment rien. J'ai fais ça :

#la commande finale
FIN ()
{
mencoder $aid $sid ${sub} "${video}" -oac mp3lame -lameopts abr:br=128 -ovc xvid -xvidencopts bitrate=200:chroma_opt:vhq=4:bvhq=1:quant_type=mpeg -vf pp=de,scale=320:-2,expand=320:240,scale=320:240 -o "${video}.ZEN.avi" 2>&1 | gawk -vRS='\r' '$1 ~ /Pos/ {gsub(/Pos:/,"  ");gsub(/%)/," ");gsub(/ \(/," ");if ($3>0)print $3; fflush();}' | zenity --progress --auto-close --text="Conversion de ${video} en cours" --title="Progression de la conversion"
}

#si l'utilisateur choisit une piste de sous-titre externe 
function SUB_EXT()
{
if [ -z "${sub_ext}" ] 
then
	sub=""
else
	sub="-sub ${sub_ext} -fontconfig -font Arial -subcp latin1 -subfont-text-scale 4 "
fi
}

ça fonctionne pas. Si je met ${sub} entre guillemet ça fonctionne plus du tout (espace ou pas)
hmm

Pour la gui, je pense que c'est bien comme ça si il n'y a pas d'autre solution. De toute manière, lorsqu'on a choisi une gui, tout va bien. C'est juste parce que j'ai pas l'habitude de ce fonctionnement mais c'est vraiment pas grave.
Pour les pistes extraites, les audios ça va pour moi. C'est plus avec la vidéo que j'ai des problèmes : vlc ne la lit pas, mplayer me renvoi un message d'erreur, et impossible de faire quelque chose avec avidemux.
Dis moi si tu veux que je décrive plus les messages d'erreur.
Je précise que j'arrive à lire le mkv dans les 3 logiciels plus totem.
Je ne sais pas trop mais j'imagine que si totem arrive à lire c'est que j'ai le codec. Et vlc à les siens et il se moque (enfin selon mon expérience) des extensions.
Je referai des tests avec d'autres mkv demain si tu veux parce que là je vais me coucher.

Hors ligne

#21 Le 26/05/2009, à 07:35

Hizoka

Re : mencoder et zenity (coup de pouce pour un script)

Pige pas que ça ne marche pas avec les "....

mets en sur toutes les variables....

Bah pour la gui, c'etait une idée comme ça , présenter plusieurs gui différentes... smile

Envoi tes messages d'"erreurs mais c'est etrange...

essai avec d'autres mkv pour voir.

Hors ligne

#22 Le 26/05/2009, à 08:03

plmegalo

Re : mencoder et zenity (coup de pouce pour un script)

nubu a écrit :

je comprend vraiment rien. J'ai fais ça :

#la commande finale
FIN ()
{
mencoder $aid $sid ${sub} "${video}" -oac mp3lame -lameopts abr:br=128 -ovc xvid -xvidencopts bitrate=200:chroma_opt:vhq=4:bvhq=1:quant_type=mpeg -vf pp=de,scale=320:-2,expand=320:240,scale=320:240 -o "${video}.ZEN.avi" 2>&1 | gawk -vRS='\r' '$1 ~ /Pos/ {gsub(/Pos:/,"  ");gsub(/%)/," ");gsub(/ \(/," ");if ($3>0)print $3; fflush();}' | zenity --progress --auto-close --text="Conversion de ${video} en cours" --title="Progression de la conversion"
}

#si l'utilisateur choisit une piste de sous-titre externe 
function SUB_EXT()
{
if [ -z "${sub_ext}" ] 
then
	sub=""
else
	sub="-sub ${sub_ext} -fontconfig -font Arial -subcp latin1 -subfont-text-scale 4 "
fi
}

ça fonctionne pas. Si je met ${sub} entre guillemet ça fonctionne plus du tout (espace ou pas)
hmm

Pour la gui, je pense que c'est bien comme ça si il n'y a pas d'autre solution. De toute manière, lorsqu'on a choisi une gui, tout va bien. C'est juste parce que j'ai pas l'habitude de ce fonctionnement mais c'est vraiment pas grave.
Pour les pistes extraites, les audios ça va pour moi. C'est plus avec la vidéo que j'ai des problèmes : vlc ne la lit pas, mplayer me renvoi un message d'erreur, et impossible de faire quelque chose avec avidemux.
Dis moi si tu veux que je décrive plus les messages d'erreur.
Je précise que j'arrive à lire le mkv dans les 3 logiciels plus totem.
Je ne sais pas trop mais j'imagine que si totem arrive à lire c'est que j'ai le codec. Et vlc à les siens et il se moque (enfin selon mon expérience) des extensions.
Je referai des tests avec d'autres mkv demain si tu veux parce que là je vais me coucher.

Pour les problèmes de "" [] (' et autres voir éventuellement ce post : http://forum.ubuntu-fr.org/viewtopic.php?pid=2681085#p2681085

#23 Le 09/06/2009, à 13:59

nubu

Re : mencoder et zenity (coup de pouce pour un script)

bonjour plmegalo,

Je me remets dans ce script que j'avais un peu laissé de coté.
Mais ton lien ne fonctionne pas. sad

Hors ligne

#24 Le 09/06/2009, à 18:04

nubu

Re : mencoder et zenity (coup de pouce pour un script)

Je commence à comprendre le problème big_smile, mais pas comment le résoudre. sad

Après avoir essayé beaucoup de combinaisons de " de { et de [ un peu partout, plus ou moins au pif, mais en essayant de comprendre. Et donc après n'avoir rien compris de plus, j'ai beaucoup simplifié le script pour cerner le problème :

#! /bin/bash
#j'ai mis mon script dans /home/$USER/.gnome2/nautilus-scripts pour avoir un simple clic droit à faire
#donc $1 vaut le fichier selectionné

video=$1
sub_ext=$(zenity --file-selection --title="Veuillez sélectionner un sous-titre")
	sub="-sub ${sub_ext} -fontconfig -font Arial -subcp latin1 -subfont-text-scale 4 "
	mencoder $aid $sid ${sub} "${video}" -oac mp3lame -lameopts abr:br=128 -ovc xvid -xvidencopts bitrate=200:chroma_opt:vhq=4:bvhq=1:quant_type=mpeg -vf pp=de,scale=320:-2,expand=320:240,scale=320:240 -o "${video}.ZEN.avi" 2>&1 | gawk -vRS='\r' '$1 ~ /Pos/ {gsub(/Pos:/,"  ");gsub(/%)/," ");gsub(/ \(/," ");if ($3>0)print $3; fflush();}' | zenity --progress --auto-close --text="Conversion de ${video} en cours" --title="Progression de la conversion"

Je pense qu'au passage
sub="-sub ${sub_ext} etc...
le terminal (je sais pas vraiment si c'est lui qui interprète les commandes) colle le nom du sous-titre sans préciser que tous les espaces doivent être échappés. Après quand on rappelle $sub, "il" ne peut pas faire la différence entre les espaces à échapper et les autres.

Hors ligne

#25 Le 09/06/2009, à 20:58

nubu

Re : mencoder et zenity (coup de pouce pour un script)

ça non plus ça fonctionne pas :

	sub_ext=$(echo "$sub_ext" | sed "s/ /\\\ /g ;")
	sub="-sub ${sub_ext} -fontconfig -font Arial -subcp latin1 -subfont-text-scale 4 "

Hors ligne

Haut de page ↑