Contenu | Rechercher | Menus

Annonce

Ubuntu-fr.org recrute toujours de nouveaux modérateurs, avec de l'expérience.

Ubuntu 16.04 LTS
Commandez vos DVD et clés USB Ubuntu-fr !

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.

nombre réponses : 25

#0 -1 »  [Résolu] Bash - Variable vide dans boucle for » Le 27/08/2016, à 11:46

Slyfox
Réponses : 8

Bonjour smile

Voici un mini script qui permet de tester si "var" est vide ou des fichiers ou des dossiers:

#! /bin/bash

var="/home
/home/$USER"

old_IFS=${IFS} 	# sauvegarde IFS
IFS=$'\n'	# modification de l'IFS pour qu'il passe en saut de ligne

message=$(for i in ${var}; do

	if  [[ -z "${i}" ]]; then
		echo -e "La variable est vide"
		
	elif	[[ -d ${i} ]]; then
			echo -e "${i} est un dossier"

	elif	[[ -f ${i} ]]; then
		echo -e "${i} est un fichier"
	fi

done)

echo -e "Voici le résultat du test: \n${message}"

IFS=$old_IFS 	# IFS par défaut

Le problème si je fais le test avec une variable "vide" il ne fonctionne pas car normalement il devrait me retourner "La variable est vide". roll

#! /bin/bash

var=""

old_IFS=${IFS} 	# sauvegarde IFS
IFS=$'\n'	# modification de l'IFS pour qu'il passe en saut de ligne

message=$(for i in ${var}; do

	if  [[ -z "${i}" ]]; then
		echo -e "La variable est vide"
		
	elif	[[ -d ${i} ]]; then
			echo -e "${i} est un dossier"

	elif	[[ -f ${i} ]]; then
		echo -e "${i} est un fichier"
	fi

done)

echo -e "Voici le résultat du test: \n${message}"

IFS=$old_IFS 	# IFS par défaut

Pourquoi ?

Edit
Remplacement de IFS=old_IFS     # IFS par défaut par IFS=$old_IFS     # IFS par défaut (poste #3)

#1 Re : -1 »  [Résolu] Bash - Variable vide dans boucle for » Le 27/08/2016, à 11:56

Slyfox
Réponses : 8

Je viens d'essayer de mettre des guillemets à cette ligne:

message=$(for i in "${var}"; do

Cette fois cela fonctionne pour la variable vide mais plus pour le test des fichiers ou dossiers.

#2 Re : -1 »  [Résolu] Bash - Variable vide dans boucle for » Le 27/08/2016, à 12:40

Slyfox
Réponses : 8

Salut pingouinux smile

J'ai bien compris ce que tu expliques ci-dessus.
Mais ça veut dire que ce n'est pas possible de tester une variable vide avec d'autre condition dans une boucle for ?

Edit:
J'ai remplacé au post #1 IFS=old_IFS     # IFS par défaut IFS=$old_IFS     # IFS par défaut
Merci pour la remarque.

#3 Re : -1 »  [Résolu] Bash - Variable vide dans boucle for » Le 27/08/2016, à 13:03

Slyfox
Réponses : 8

C'est bon je crois que j'ai trouvé, c'est pas très propre mais ça marche.

Exemple avec plusieurs dossiers:

#! /bin/bash

var="/home
/home/$USER"

old_IFS=${IFS} 	# sauvegarde IFS
IFS=$'\n'	# modification de l'IFS pour qu'il passe en saut de ligne


if 	[[ -z "${var}" ]]; then
		message="La variable est vide"

else	message=$(for i in ${var}; do
		
		if	[[ -d ${i} ]]; then
				echo "${i} est un dossier"

		elif	[[ -f ${i} ]]; then
				echo "${i} est un fichier"
		fi

	done)
fi


echo -e "Voici le résultat du test: \n${message}"

IFS=$old_IFS 	# IFS par défaut

Exemple avec variable vide:

#! /bin/bash

var=""

old_IFS=${IFS} 	# sauvegarde IFS
IFS=$'\n'	# modification de l'IFS pour qu'il passe en saut de ligne

if 	[[ -z "${var}" ]]; then
		message="La variable est vide"

else	message=$(for i in ${var}; do
		
		if	[[ -d ${i} ]]; then
				echo "${i} est un dossier"

		elif	[[ -f ${i} ]]; then
				echo "${i} est un fichier"
		fi

	done)
fi

echo -e "Voici le résultat du test: \n${message}"

IFS=$old_IFS 	# IFS par défaut

#4 Re : -1 »  [Résolu] Bash - Variable vide dans boucle for » Le 27/08/2016, à 13:39

Slyfox
Réponses : 8

Et ben voilà quelque chose de propre et de pro ! cool

Merci du coup de main et d'avoir pris du temps pour résoudre ce problème.

Sinon en moralité une variable vide dans une boucle for c'est possible mais c'est moche ! lol

#5 -1 »  [Résolu] Bash - Mettre paramètre d'une commande dans une variable. » Le 21/08/2016, à 23:53

Slyfox
Réponses : 12

Bonjour,

Je fais un script complexe et je me heurte à un problème que je simplifie dans cette discussion (c'est juste un principe).

Voici le script qui fonctionne:

#! /bin/bash

ls -l "mon dossier"

Rien de compliquer ! mais maintenant j'aimerais bien mettre une partie de la commande dans un variable du style:

#! /bin/bash

var="-l  mon dossier"
ls "${var}"

J'ai essayer passablement de chose enlever le {}, supprimer les " ", mettre de ' ' ou de ` ` mais rien ne va et le fait que le dossier à nom avec espace cela complique la chose mais je dois faire avec, bien que je crois qu'il faut utilisé IFS=$'\n'

Je pense que c'est basique mais comment faire ?

Merci de partager votre savoir.

#6 Re : -1 »  [Résolu] Bash - Mettre paramètre d'une commande dans une variable. » Le 22/08/2016, à 15:28

Slyfox
Réponses : 12

Merci à tous pour ces réponses claires et précises ! Je m'endormirai moins bête ce soir ! cool

Par contre je profite de cette discussion et de votre savoir pour que vous m'apporter quelque précisions.

1. Pourquoi eval est-il dangereux ou pas bien ?

2. Désolé pour le hors sujet... Dans un test if je vois que des fois qu'on utilise les simples crochets [ ] et parfois les doubles [[ ]] quelle est la différence et le plus recommandé ?

3. On voit plusieurs manière d'écrire une variable comme $var ou ${var} ou "$var" ou "${var}" ... d'habitude j'utilise "{var}" surtout si j'ai une variable avec un ou des espaces, mais quelle est la manière d'utilisation la plus recommandé ?

Merci smile

#7 Re : -1 »  [Résolu] Bash - Mettre paramètre d'une commande dans une variable. » Le 22/08/2016, à 15:50

Slyfox
Réponses : 12
Watael a écrit :

Slyfox, quel est l'intérêt de procéder ainsi ?

En fait je fait un script pour convertir les vidéos avec yad comme interface graphique et ffmpeg pour la partie conversion.

Le script fonctionne ainsi, une fenêtre s'ouvre et l'utilisateur choisit les options comme le conteneur, le codec vidéo et audio, le crf, le preset...

Voici un extrait très simplifié des variables une fois les choix effectués (ils sont multiples):

#!/bin/bash

video="-c:v libx264"
crf="-crf 28"
audio="-c:a copy"
supTag="-map_metadata -1"
newTag="-metadata title="
newVideo="ma nouvelle vidéo"

ffmpeg -y -i "video.avi" ${video} ${crf} ${audio} ${supTag} ${newTag}"${newVideo}" "video.mkv"

Pour éviter de récrire complètement chaque ligne de commande de ffmpeg pour chaque choix (une bonne trentaine) j'ai préféré opté par la modification des variables elles même via un gros test if...

EDIT
Ma question initiale venait du fait que j'avais un problème avec la variable newTag car je l'écrivais faussement ainsi:

newTag="-metadata title=${newVideo}"

#8 Re : -1 »  [Résolu] Bash - Mettre paramètre d'une commande dans une variable. » Le 27/08/2016, à 12:04

Slyfox
Réponses : 12

Merci à tous pour les solutions apportées ! smile

Je passe cette discussion en résolu.

#9 -1 »  Awk recherche avec plusieurs valeurs dans boucle for » Le 23/08/2016, à 19:18

Slyfox
Réponses : 8

Bonjour,

J'ai un problème avec awk...

J'ai un fichier qui s'appelle langue.txt et contient ça:

Français
Allemend
Anglais
Japonais

... pas grand chose c'est juste pour le principe.

Maintenant le script demande quelle langue parle t'on, moi je répond par exemple "Français et Anglais", ce qui revient à dire que la variable langue vaut ça:

langue="Français Anglais"

Maintenant j'aimerais rajouter TRUE devant Français et Anglais
et FALSE devant Allemand et Japonais, voici comment de vois la chose:

#! /bin/bash

read -p 'Quelles langues parlez-vous? : ' langue

echo "${langue}"

for i in ${langue}; do

	awk '{

	if ($1=="'${i}'") 
		{printf "TRUE|%s\n" ,$0}

	else {printf "FALSE|%s\n" ,$0}
	}' langue.txt

done

Mais cela me retourne ça:

TRUE|Français
FALSE|Allemend
FALSE|Anglais
FALSE|Japonais
FALSE|Français
FALSE|Allemend
TRUE|Anglais
FALSE|Japonais

J'ai compris pourquoi... pour la simple raison que la boucle for prends d'abord "Français" et affiche le résultat puis refait la même chose avec Anglais d'où le "doublage" de lignes.

Mais comment faire pour obtenir un résultat qui ressemble (dans cet exemple) à ça:

TRUE|Français
FALSE|Allemend
TRUE|Anglais
FALSE|Japonais

Merci, je pense que c'est relativement simple mais moi là j'ai besoin de votre aide (ça fait 4h que je cherche...)

#10 Re : -1 »  Awk recherche avec plusieurs valeurs dans boucle for » Le 23/08/2016, à 20:20

Slyfox
Réponses : 8

Salut pingouinux;

Trop fort! cool merci vraiment! smile

Sinon penses-tu que c'est réalisable avec awk ?

C'est juste pour savoir si awk est à la hauteur pour ce genre de script et si je me suis pris le chou inutilement pendant plus de 4h à vouloir faire ça avec awk.

#11 Re : -1 »  Awk recherche avec plusieurs valeurs dans boucle for » Le 23/08/2016, à 21:36

Slyfox
Réponses : 8
Slyfox a écrit :

Sinon penses-tu que c'est réalisable avec awk ?

Et en plus j'ai le choix ! vraiment merci à vous 2, trop la classe ! cool cool cool

Juste en passant je ne comprends pas ça:

"\x5c<"$0"\x5c>"

#12 -1 »  Disque externe ne monte plus, perte de donnée ? » Le 11/08/2016, à 19:32

Slyfox
Réponses : 4

Bonjour smile

Je crois que la c'est la catastrophe ! sad sad sad

Je m'explique. J'ai un disque dur WD de 5 Tio où j'ai toutes mes données importantes (environ 2.5 Tio). Hier j'ai effectué plusieurs opérations: création d'une clé USB pour pour réinstaller mon système et une réinstallation de tout mon système. D'habitude je débranche mon disque externe lors de réinstallation importante, mais j'ai complètement oublier de le faire ! (mais peut-être que ça aucun rapport avec le problème qui va suivre ?)

Une fois ma Debian installer, je reboote et j'ai ce message qui s'affiche:

1470936169.png

J'y comprends pas grand chose... hormis que cela doit concerner mon disque externe.

Je vais voir ce que me dit Gpardet, pas mieux:

1470936289.png

1470936244.png

Voilà le retour de dmesg|tail

[ 1019.306383]  sdc:
[ 1029.440692]  sdc:
[ 1257.800068] systemd[1]: apt-daily.timer: Adding 11h 10min 44.704570s random time.
[ 1260.431957] systemd[1]: apt-daily.timer: Adding 6h 8min 36.585257s random time.
[ 1260.608552]  sdc:
[ 1262.650815]  sdb: sdb1
[ 1263.770382]  sdc:
[ 1284.235452]  sdc:
[ 1285.544924] systemd[1]: apt-daily.timer: Adding 4h 20min 18.282880s random time.
[ 2442.010171] isofs_fill_super: bread failed, dev=sdc, iso_blknum=17, block=-2147483648

Ce que je trouve bizarre c'est mon disque externe fait 5 Tio et Gpardet n'affiche que la moitié.

Sauf erreur de ma part ce disque (quand il fonctionnait) devait d'être en NTSF.

J'ai aussi essayé de le monté sur Win, lui vois qu'il a un disque branché sur le port USB rien de plus.

Voilà si vous pourriez m'aider à récupérer plus de 3 ans de dur labeur ça serait vraiment le bienvenu ! cool

#13 Re : -1 »  Disque externe ne monte plus, perte de donnée ? » Le 11/08/2016, à 21:57

Slyfox
Réponses : 4

Quand j'ai voulu créé ma clé USB bootable, j'ai utilisé les fameuses commandes:

sudo fdisk -l
sudo umount /dev/sdx
sudo dd if=image.iso of=/dev/sdx bs=4M && sync

alors à ce moment j'ai peut-être dû me tromper de disque,  il suffit de de noter /dev/sdb au lieu de /dev/sdd... et c'est goal ! sad

En supposant que ça soit le cas, ça veut dire que j'ai tout perdu ? Car même tesdisk ne semble rien trouvé.

#14 Re : -1 »  Disque externe ne monte plus, perte de donnée ? » Le 12/08/2016, à 20:15

Slyfox
Réponses : 4

Bonne nouvelle!

J'ai lancé "photophore" en début d'après-midi et il est entrain de me retrouver quasiment toutes mes vidéos et documents importants !!! smile smile smile

Il semble que tout ne soit pas effacé, à suivre... smile

#15 -1 »  ffmpeg synchroniser video et audio dans un seule vidéo » Le 08/08/2016, à 16:48

Slyfox
Réponses : 2

Bonjour,

J'ai une piste vidéo (sans audio) qui fait 01:30:00 (format x264) et une piste audio qui fait 01:29:59.7 (format aac).

Le but est de les fusionner pour former qu'une seule vidéo en mkv voilà comment je fais.

ffmpeg -i piste-video -i piste-audio -c:v copy -c:a copy nouvelle-video.mkv

Le problème c'est que j'ai un "décalage" entre l'audio et la vidéo (normal vu que les 2 piste à base n'ont pas la même durée).

Je suis arriver à accélérer la piste audio avec Audacity, onglet "Effets" puis "Changer la vitesse" puis il suffit de redéterminer la nouvelle durée et d'exporter la nouvelle piste audio pour la fusionner avec la commande ci-dessus.

Mais je dois pouvoir le faire en lignes de commandes et de préférence avec ffmpeg (c'est pour un script).

Voilà une piste que j'ai trouvé:

ffmpeg -y -i piste-audio -filter:a "atempo=1.00005" nouvelle-piste-audio.m4a

Pour info le 1.00005 est le facteur (pourcent) qu'on applique, par exemple:

2   la piste est accélérer à 200% de l'original (2x plus rapide)
1.25 la piste est accélérer à 125% de l'original
1      la piste ne subit aucun changement (100%)
0.75 la piste est ralentie à 75% de l'original
0.5   la piste est ralentie à 50% ou de moitié de l'original (2x moins rapide)

Dans mon cas pour obtenir ce facteur, j'ai converti la durée de piste vidéo et audio en seconde avec 2 chiffres après la virgule (centième de secondes) puis j'ai divisé la durée de la piste vidéo par celle de l'audio (5400 / 5399.7 = 1.00005).
Ce qui revient à accélérer la nouvelle piste audio à 100.005% de l'original. Pas grand chose... mais 3 centièmes de seconde de décalage c'est laid sur une vidéo !

Le hic avec cette méthode c'est que je ne suis pas précis à 100%... il y a encore un "décalage" de quelques dixièmes de seconde (j'ai besoin d'une précision d'un dixième de seconde de différence au maximum) .

Donc, je cherche une commande dans la quelle je donne comme paramètre une durée précise comme 01:30:00 ou 5400 ou une autre valeur du style .

Merci de votre savoir en la matière et de votre aide.

#16 Re : -1 »  ffmpeg synchroniser video et audio dans un seule vidéo » Le 09/08/2016, à 18:33

Slyfox
Réponses : 2

Salut Bertrand49,

Merci pour ta réponse intéressante cool mais je préfère une solution en ligne de commande.

En fouinant sur le net j'ai trouvé qu'on peut modifier la vitesse de la vidéo avec ffmpeg en utilisant le paramètre "setpts=xxxx*PTS" (remplacer xxxx par votre valeur). Cela reviens un peu à la "solution" du premier poste avec "atempo" mais cela semble plus précis (?)

Sinon voilà mon bout de script qui synchronise et fusionne les pistes vidéo et audio (c'est un principe simplifié).

#! /bin/bash

# Saisir chemin des pistes
pisteVideo="/chemin/video.mkv"
pisteAudio="/chemin/audio.m4a"

# Saisir chemin du dossier de destination
cd "/home/$USER"

#===========================================================

# Calcul durée video
timeVideo=$(awk -F [\:] '{printf "%.3f\n" ,(($1*3600)+($2*60)+$3)}' <<< $(ffmpeg -i "${pisteVideo}" 2>&1 | awk '/Duration:/ {print $2}' | awk -F [,] '{print $1}'))

# Calcul durée audio
timeAudio=$(awk -F [\:] '{printf "%.3f\n" ,(($1*3600)+($2*60)+$3)}' <<< $(ffmpeg -i "${pisteAudio}" 2>&1 | awk '/Duration:/ {print $2}' | awk -F [,] '{print $1}'))

# Calcul facteur de correction pour la piste video
#tempo=$(echo "(${timeVideo}/${timeAudio})" | bc -l)
tempo=$(echo "(${timeAudio}/${timeVideo})" | bc -l)

# Conversion piste vidéo et fusion des pistes
ffmpeg -y -i "${pisteVideo}" -vf "setpts=${tempo}*PTS" -c:v libx264 -crf 16 -an video-tempo.mkv
ffmpeg -y -i video-tempo.mkv -i "${pisteAudio}" -c:v copy -c:a copy video-final.mkv

echo "tempo = $tempo"

#19 Re : -1 »  [Résolu] Quelles vidéos choisir entre BDRIP ou 720p, indice de qualité » Le 09/01/2016, à 16:06

Slyfox
Réponses : 13

Je me permets de déterré ce topic... car je tiens à développer encore ce sujet car il me paraît intéressant et il me fait tourné mes méninges depuis quelques jours.  roll

Je trouve le raisonnement de Rufus T. Firefly très bien !
Une vidéo 720p aura pas le même rendu visuelle sur un écran full HD (1980x1080) que sur un écran plus petit, donc je pense que c'est un facteur à tenir compte dans ce calcul.

Deuxièmement j'ai compris mon erreur concernant la comparaison entre mes des vidéos ci-dessus.
C'est le format d'encodage. Une vidéo h264  à besoin moins de débit qu'une vidéo en mpeg ou dvix pour la même qualité, c'est pourtant logique.
Donc là, le calcul est complément faussé ! mad

Bref je serais intéressé de savoir si il existe une formule qui me permettrai de comparer les vidéos afin de choisir celle qui est la meilleure ou même si quelqu'un serait assez courageux pour me développer une formule... cool
Je vais aussi essayer de pondre quelque chose avec mes maigres connaissances en algèbre et en raisonnement. roll

A savoir qu'il a lieu de tenir compte de plusieurs facteurs... comme par exemple
Définition de la vidéo (1280x720, 1920x1080...)
Débit
Format de la vidéo (16:9,  4:3, plein écran. bandes noires...)
Nombre d'images par secondes
Codec ou format de compression
Taille de l'écran
Distance par rapport à l'écran (bien qu'il me semble plus secondaire comme facteur, je n'ai pas envie d'avancer ou reculer mon canapé selon la vidéo que je visionne... big_smile )
Autres facteurs que j'ai omis (?)

J'ai bien trouvé cette formule du poste #10 de ce lien http://forum.ripp-it.com/indice-de-qual … 16260.html.

1452349924.png

Mais je ne comprends pas ce que veux dire les X et Y (définition de l'écran ou/et dimension de la vidéo ???)

#20 Re : -1 »  [Résolu] Quelles vidéos choisir entre BDRIP ou 720p, indice de qualité » Le 10/01/2016, à 01:36

Slyfox
Réponses : 13

Je suis en train de me rendre compte qu'il a tellement de paramètres qu'il est vraiment difficile de trouver une telle formule en tout cas pour moi cela va trop loin pour ma compétence.

En sachant que mon écran et fixe tout comme mon canapé, que j'utilise du x264/aac/mkv et qu'en principe les vidéos sont à 24 images seconde.
Les 2 paramètres où je peux changé quelque chose c'est la définition et le débit.
Donc je pense opter pour un débit d'environ 5000 kb/s pour les vidéos en 720 et environ 10000 kb/s pour les vidéos 1080 avec ça je pense conservé une bonne qualité.

#21 Re : -1 »  [Résolu] Quelles vidéos choisir entre BDRIP ou 720p, indice de qualité » Le 10/01/2016, à 14:14

Slyfox
Réponses : 13

@ Rufus T. Firefly

Je dois encore te donner raison ! Et j'aime bien ta façon de voir les choses. cool

Bon du coup je vais réenterrer la discussion... tongue

Merci à tous de m'avoir répondu, j'y vois plus clair maintenant ! smile

#22 Re : -1 »  [Résolu] Quelles vidéos choisir entre BDRIP ou 720p, indice de qualité » Le 13/01/2016, à 00:42

Slyfox
Réponses : 13
J5012 a écrit :

→ ce poids image ne dit rien de l'aspect qualitatif !!!

Salut et merci de me répondre.

J5012 a écrit :

1/ tu as un debit max en bitrate 6000kbps qui vient d'où ?
2/ tu as une resolution non pas d'ecran mais d'encodage de l'image 1280x720
3/ tu as un debit d'images 23.98ips
4/ quelle est la duree totale du film ? → combien de trames sont noires ou sombres ?
5/ le plan de 24 voire de 32 bits (precision 2^24 == 16 millions de nuances de couleurs) dans la palette des couleurs n'est pas pris en compte dans l’équation ...

1/ ... c'était pour l'exemple.
2/ oui je sais et en passant c'est pas la résolution dans ce cas mais c'est la définition.
3/ on est toujours d'accord.
4/ comme c'est un exemple je ne peux pas de donner de temps précis.
5/ merci pour l'info.

Il faut juste faire attention dans cette discussion qui est en fait une en 2 car j'ai posé une première question avec un exemple et quelque temps plus tard je l'ai réouvert pour une autre question(similaire) mais avec un autre exemple pour donné une idée de ce que je cherchais à faire.

Sinon en bref...

Ma vision des choses à un peu changer depuis le début de cette discussion, je comprends (enfin) que mes yeux et mon cerveau sont l'un des moyens qui me permettent de juger si mes vidéos ont un niveau de qualité satisfaisant de manière simple et rapide. (Bien que je pense que cela doit être possible de faire via des calculs estimatifs ou sur une moyenne globale ou même de manière très précise).

Après si quelqu'un à quelque chose d'autre à me proposer, je suis quand même preneur... wink mais là pour moi vous comprendrez bien que cela dépasse mais compétence. roll

Après comme je l'ai dit dans l'un de mes dernier poste j'ai opté pour un débit d'environ 5000 kb/s pour les vidéos en 720 et environ 10000 kb/s pour les vidéos 1080 avec ça je pense conservé une bonne qualité avec une petite marge.

Amicalement Slyfox

#23 Re : -1 »  [Résolu] 1080p vs 720p laquelle choisir ? » Le 08/01/2016, à 01:40

Slyfox
Réponses : 7

Merci xabilon pour tes réponses claires, simples et précises !

Pour moi l'essentielle est là.. je passe en [Résolu]