Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Conseil pour un script.

19 réponses
Avatar
Dominique
Bonjour,

Je suis une véritable quiche en scripts. Il est vrai que je ne prends
pas le temps d'apprendre...

Soit un répertoire dans lequel j'ai une quarantaine de fichiers vidéos DV.

Je voudrais les convertir en mpeg avec ffmpeg de cette manière :

ffmpeg -i nom_du_fichier.dv nom_du_fichier.mpeg, ligne de commande qui
fait exactement ce que j'attends.

Je devrais avoir un script qui ressemblerait à quelque chose comme ça :

#!/bin/bash
for i in *.dv
do
ffmpeg -i $i ????.mpeg
next

Je ne sais pas remplacer les ???? par nom_du_fichier. J'ai testé %f.mpeg
mais ça ne paraît pas être ça.

Si vous pouviez m'aider, ça me dispenserait de m'infuser tous les
fichiers à la main...

Merci et bon 1er mai,

--
Dominique
Courriel : dominique point sextant ate orange en France
Esto quod es

10 réponses

1 2
Avatar
Tonton Th
On 05/01/2012 11:15 AM, Dominique wrote:

#!/bin/bash
for i in *.dv
do
ffmpeg -i $i ????.mpeg
next

Je ne sais pas remplacer les ???? par nom_du_fichier. J'ai testé %f.mpeg
mais ça ne paraît pas être ça.



$ man basename

--

Nous vivons dans un monde étrange/
http://foo.bar.quux.over-blog.com/
Avatar
Dominique
Le 01/05/2012 11:23, Tonton Th a écrit :
On 05/01/2012 11:15 AM, Dominique wrote:


$ man basename




Merci pour basename que je ne conaissais pas.

basename nom_fichier.dv .dv

me donne bien en sortie nom_fichier

Mais comment récupérer la sortie dans une variable pour la réinjecter
dans mon script ? Mes tentatives de redirection avec > nom ne me donnent
rien.



--
Dominique
Courriel : dominique point sextant ate orange en France
Esto quod es
Avatar
Francois Lafont
Bonjour,

Le 01/05/2012 11:46, Dominique a écrit :

$ man basename




Merci pour basename que je ne conaissais pas.

basename nom_fichier.dv .dv

me donne bien en sortie nom_fichier

Mais comment récupérer la sortie dans une variable pour la réinjecter
dans mon script ? Mes tentatives de redirection avec > nom ne me donnent
rien.



Comme ça :

nom="$(basename nom_fichier.dv .dv)"
echo "$nom"


--
François Lafont
Avatar
Dominique
Le 01/05/2012 12:08, Francois Lafont a écrit :


Comme ça :

nom="$(basename nom_fichier.dv .dv)"
echo "$nom"



Bon, j'ai réussi avec ce script

#!/bin/bash
for i in *.dv
do
nom="$(basename $i .dv)"
ffmpeg -i $i $nom.mpeg
done

J'obtiens bien, avec en entrée, fichier.dv, une sortie fichier.mpeg
parfaitement reconnue par ffdiaporama (que je vous conseille...)

Merci à tous pour le coup de main et bonne journée,


--
Dominique
Courriel : dominique point sextant ate orange en France
Esto quod es
Avatar
Luc.Habert.00__arjf
Tonton Th :

Je ne sais pas remplacer les ???? par nom_du_fichier.


$ man basename



Pitié! Ça fait des milénaires que les shells supportent ${i%.*}.
Avatar
Francois Lafont
Si jamais les noms contiennent des espaces (ce qui n'a pas l'air d'être
ton cas), alors, il faut encadrer les variables de doubles quotes. Par
exemple, au lieu de ça :

Le 01/05/2012 12:40, Dominique a écrit :

nom="$(basename $i .dv)"
ffmpeg -i $i $nom.mpeg



Écrire plutôt ça :

nom=$(basename "$i" .dv)
ffmpeg -i "$i" "$nom.mpeg"

Comme ça, un nom avec des espaces ne fera pas planter le script.
À+

--
François Lafont
Avatar
gigiair
(Luc Habert) disait le 05/01/12 que :

Tonton Th :

Je ne sais pas remplacer les ???? par nom_du_fichier.


$ man basename



Pitié! Ça fait des milénaires que les shells supportent ${i%.*}.



Un Milénaire, c'est 1,852 années ?

--
JJR.
Avatar
Dominique
Le 01/05/2012 12:47, Francois Lafont a écrit :
Si jamais les noms contiennent des espaces (ce qui n'a pas l'air d'être
ton cas), alors, il faut encadrer les variables de doubles quotes. Par
exemple, au lieu de ça :

Le 01/05/2012 12:40, Dominique a écrit :

nom="$(basename $i .dv)"
ffmpeg -i $i $nom.mpeg



Écrire plutôt ça :

nom=$(basename "$i" .dv)
ffmpeg -i "$i" "$nom.mpeg"

Comme ça, un nom avec des espaces ne fera pas planter le script.



Je te remercie mais, comme tu le fais remarquer, mes noms de fichiers ne
sont composés que de azAZ09_- Pas d'espace ni de ponctuation ni de
caractères accentués.

Par contre, je retiens les double quottes pour quand je devrais
travailler sur les fichiers de ma fille qui est sous XP et qui raconte
sa vie dans les noms de fichiers :-)

Bon après-midi,

--
Dominique
Courriel : dominique point sextant ate orange en France
Esto quod es
Avatar
Dominique
Le 01/05/2012 12:44, Luc Habert a écrit :
Tonton Th :

Je ne sais pas remplacer les ???? par nom_du_fichier.


$ man basename



Pitié! Ça fait des milénaires que les shells supportent ${i%.*}.



Et comment fonctionne ce filtre ? Je ne suis pas bon avec ça !

--
Dominique
Courriel : dominique point sextant ate orange en France
Esto quod es
Avatar
Francois Lafont
Le 01/05/2012 13:48, Dominique a écrit :

Je ne sais pas remplacer les ???? par nom_du_fichier.


$ man basename



Pitié! Ça fait des milénaires que les shells supportent ${i%.*}.



Et comment fonctionne ce filtre ? Je ne suis pas bon avec ça !



Comme ça :

i="/home/francois/Bureau/test.txt"
nom="${i%.*}"
echo "$nom"

--
François Lafont
1 2