OVH Cloud OVH Cloud

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

9 réponses

1 2
Avatar
domledom
On 1 mai, 13:56, Francois Lafont
wrote:
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



Bonjour

Je sais que je suis complètement hors sujet, mais si l'objectif est de
lire ces fichiers .dv avec ffDiaporama, il suffit de les renommer
en .avi et ffDiaporama saura les lire sans avoir besoin de les
convertir.
Avatar
Luc.Habert.00__arjf
Francois Lafont :

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



[Au passage : lors d'une affectation dans une variable, ça ne sert à rien de
mettre des "" autour si il n'y a pas d'espace littéral (si il est dans le
contenu d'une variable utilisée ou dans le résultat d'un `, pas de problème).]

Si on a potentiellement un chemin d'accès dans la variable, il faut faire un
peu plus compliqué, parce qu'on va se faire avoir si un répertoire du chemin
a un . et pas le nom de fichier au bout (noter qu'on se fait avoir aussi
avec basename, mais différement). On peut s'en sortir comme ça :

case $i in
*/*)
tmp=${i##*/}
name=${i%/*}/${j%.*};;
*) name=${i%.*};;
esac

et utiliser $name derrière.
Avatar
Dominique
Le 01/05/2012 17:18, domledom a écrit :


Je sais que je suis complètement hors sujet, mais si l'objectif est de
lire ces fichiers .dv avec ffDiaporama, il suffit de les renommer
en .avi et ffDiaporama saura les lire sans avoir besoin de les
convertir.



Je n'aurais pas pensé à changer les extensions « à la hussarde »...

J'y penserai la prochaine fois. Là, j'ai fini mon diaporama avec des
fichiers mpeg. Je ne recommence pas :-)

Merci pour le tuyau et bonne soirée,

--
Dominique
Courriel : dominique point sextant ate orange en France
Esto quod es
Avatar
Nicolas George
domledom , dans le message
, a
écrit :
Je sais que je suis complètement hors sujet, mais si l'objectif est de
lire ces fichiers .dv avec ffDiaporama, il suffit de les renommer
en .avi et ffDiaporama saura les lire sans avoir besoin de les
convertir.



Ça, ça ressemble fortement à un bon argument pour mettre ledit ffDiaporama
illico à la poubelle.
Avatar
Dominique
Le 01/05/2012 20:47, Nicolas George a écrit :

Ça, ça ressemble fortement à un bon argument pour mettre ledit ffDiaporama
illico à la poubelle.



Ce serait dommage. C'est vraiment une application agréable, efficace et
intuitive à utiliser. Un rapport de bug aux auteurs serait sans doute
plus efficace.

Bonne journée,

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

Le 01/05/2012 17:50, Luc Habert a écrit :

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



[Au passage : lors d'une affectation dans une variable, ça ne sert à rien de
mettre des "" autour si il n'y a pas d'espace littéral (si il est dans le
contenu d'une variable utilisée ou dans le résultat d'un `, pas de problème).]



Oui en effet, j'ai le réflexe de mettre des « "xxx" » partout.

Si on a potentiellement un chemin d'accès dans la variable, il faut faire un
peu plus compliqué, parce qu'on va se faire avoir si un répertoire du chemin
a un . et pas le nom de fichier au bout (noter qu'on se fait avoir aussi
avec basename, mais différement). On peut s'en sortir comme ça :

case $i in
*/*)
tmp=${i##*/}
name=${i%/*}/${j%.*};;
*) name=${i%.*};;
esac

et utiliser $name derrière.



Merci pour cette petite « siouxerie ». :-)
À+


--
François Lafont
Avatar
Nicolas George
Dominique , dans le message
<4fa0cf14$0$12495$, a écrit :
Ce serait dommage. C'est vraiment une application agréable, efficace et
intuitive à utiliser. Un rapport de bug aux auteurs serait sans doute
plus efficace.



Là, ce n'est pas un bug, c'est une preuve d'incompétence crasse.
Avatar
Dominique
Le 02/05/2012 10:03, Nicolas George a écrit :


Là, ce n'est pas un bug, c'est une preuve d'incompétence crasse.



Est-ce suffisant pour jeter toute l'application ?

--
Dominique
Courriel : dominique point sextant ate orange en France
Esto quod es
Avatar
Nicolas George
Dominique , dans le message
<4fa11265$0$21493$, a écrit :
Est-ce suffisant pour jeter toute l'application ?



À mon sens oui : s'il y a une grossière erreur comme celle-là aussi visible,
il y en a certainement un paquet d'autres moins visibles, qui font chacune
courir des risques à la machine : fuites de mémoire, écrasement d'un fichier
source, etc.
1 2