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 09/04/2012, à 12:58

iGor.m

[Résolu] script pour convertir les m4a en ogg

Bonjour,

Le problème est le suivant : dans mon répertoire ~/Musique j'ai un bon nombre de fichiers .m4a que je voudrais convertir en .ogg (par exemple). Le répertoire est organisé en Artiste/Album, parfois /Artiste/Coffret/Album. J'aimerais faire la conversion en une fois, en ligne de commande, si possible en respectant les tags. Après recherche, j'ai trouvé un script (que j'ai modifié) qui utilise Soundconverter en ligne de commande, ce qui me va bien. Le script va chercher les fichiers .mp4 dans un dossier, les converti en .ogg, efface les .m4a.
Si je fais un test dans un répertoire test qui a une structure /Artiste/Album, le script ne fonctionne pas en récursif, le script au départ est conçu pour être appliqué dans un dossier particulier.

le script :

#!/bin/bash
cd /home/igor/Bureau/testmp4
for i in *.m4a; do 
                j="${i%.m4a}"
soundconverter -b -m audio/x-vorbis -s .ogg "$j.m4a" && rm -f "$j.m4a"  && echo "$i réencodé en ogg."
chown -R igor:jeanneigor /home/igor/Bureau/testmp4
done

A terme j'aimerais changer le chemin de la ligne cd par /home/igor/Musique.
La ligne chown sert à faire en sorte que le répertoire soit disponible pour un groupe comprenant un autre user.

En m'apercevant que le script n'allait pas chercher les fichiers dans un sous-répertoire, j'ai essayé de modifier

for i in *.m4a; do

par

for i in */*.m4a; do

mais évidemment si j'ai un sous-répertoire de sous-répertoire, ça ne marche plus.

Je ne sais si ça vaut la peine de continuer dans cette direction ou s'il faut trouver une autre méthode, par exemple associer une action à la commande find.

Merci ! smile

Dernière modification par iGor.m (Le 09/04/2012, à 13:49)


Sur Ubuntu depuis décembre 2009, et sous debian depuis avril 2013
Asus Vintage V7 - P8H61E - Intel® Core™ i3-2130 CPU @ 3.40GHz × 4 - 8Go RAM (dont 6 jamais utilisées :( ) - Debian Wheezy (64 bits) - Gnome 3.4
Lenovo Thinkpad X100E 3508-5GG - AMD Turion X2 Ultra Dual-Core 1.60GHz - 3Go RAM - Debian Wheezy (Xcfe)

Hors ligne

#2 Le 09/04/2012, à 13:14

pingouinux

Re : [Résolu] script pour convertir les m4a en ogg

Bonjour,
Essaye ceci :

shopt -s globstar # En tête du script
..........................
for i in **/*.m4a; do

Hors ligne

#3 Le 09/04/2012, à 13:49

iGor.m

Re : [Résolu] script pour convertir les m4a en ogg

Merci pingouinux ! smile

Après quelques tests, ça marche bien ce truc.
J'ai trouvé un peu de documentation sur shopt : https://www.gnu.org/software/bash/manua … iltin.html

Voilà. Merci encore.


Sur Ubuntu depuis décembre 2009, et sous debian depuis avril 2013
Asus Vintage V7 - P8H61E - Intel® Core™ i3-2130 CPU @ 3.40GHz × 4 - 8Go RAM (dont 6 jamais utilisées :( ) - Debian Wheezy (64 bits) - Gnome 3.4
Lenovo Thinkpad X100E 3508-5GG - AMD Turion X2 Ultra Dual-Core 1.60GHz - 3Go RAM - Debian Wheezy (Xcfe)

Hors ligne

#4 Le 09/04/2012, à 18:08

iGor.m

Re : [Résolu] script pour convertir les m4a en ogg

J'ajoute quelques informations.

En partant du fait que les fichiers m4a en question sont encodés à 128 kbps, les transcoder avec soundconverter en mp3, à 128 kbps par défaut m'a semblé ne pas être un grand crime. D'autant que l'encodage par défaut en ogg via soundconverter se fait à un débit encore moindre, c'est pas forcément mieux.
S'ajoute le fait qu'un bon nombre de ces fichiers correspondent à des CD que j'ai. Mais pour éviter de les importer, il y a maintenant plus de 4 ans, je les avais copié depuis une collection musicale (qui fonctionnait sous iTunes + iPod). Or, depuis, j'ai appris plus de choses sur les formats audio. Du coup, si je pouvais avoir une liste des fichiers réencodés, ce serait pas mal. J'ai donc ajouté une commande qui écrit tout ça dans un .txt
Ce qui donne :

#!/bin/bash
shopt -s globstar
cd /home/igor/Musique
for i in **/*.m4a; do 
         j="${i%.m4a}"
soundconverter -b -m audio/mpeg -s .mp3 "$j.m4a" && rm -f "$j.m4a"  && echo "$i réencodé en mp3." && echo $i réencodé en mp3 >> /home/igor/Bureau/reencode_mp3_list.txt
chown -R igor:jeanneigor /home/igor/Musique
done

A partir du .txt créé, je pourrais me faire une liste de CD à importer... en .flac cette fois.
Après tout ça, il ne me restera plus qu'à faire des filtres dans gmusicbrowser pour faire la liste des Albums au débit trop pauvre et de, lorsque c'est possible, les importer à nouveau, également en .flac

Une "bonne" collection musicale digitale, c'est un vrai boulot smile (et encore, je ne suis qu'un amateur...)


Sur Ubuntu depuis décembre 2009, et sous debian depuis avril 2013
Asus Vintage V7 - P8H61E - Intel® Core™ i3-2130 CPU @ 3.40GHz × 4 - 8Go RAM (dont 6 jamais utilisées :( ) - Debian Wheezy (64 bits) - Gnome 3.4
Lenovo Thinkpad X100E 3508-5GG - AMD Turion X2 Ultra Dual-Core 1.60GHz - 3Go RAM - Debian Wheezy (Xcfe)

Hors ligne

#5 Le 09/04/2012, à 20:13

iGor.m

Re : [Résolu] script pour convertir les m4a en ogg

Je continue ma réflexion ici... Si vraiment ça ennuie, il faut me le dire smile

Le problème du script, c'est qu'il prend du temps. Il transcode 2 fichiers, puis rien ne se passe pendant un moment, puis il transcode à nouveau 2 fichiers. Je pense qu'entre deux il refait la boucle pour trouver les suivants. Vu la taille de ma collection musicale, ça va prendre pas mal de temps.
Alors je me suis dit que j'allais chercher une autre solution, du type justement find [truc] -exec soundconverter {} \;

J'ai pris un échantillon test que j'ai placé dans un répertoire sur mon bureau. Avec

find /home/igor/Bureau/test -name "*.m4a"

je trouve ce que je cherche, sans aller là où je ne voudrais pas aller. C'est une chose.
Je parviens pas à utiliser la commande soundconverter, en me plaçant dans le bon répertoire, comme suit :

soundconvert -b -m audio/mpeg -s .mp3 [nom_de_fichier].m4a

Donc :

find /home/igor/Bureau/test -name "*.m4a" -exec soundconverter -b -m audio/mpeg -s .mp3 {} \; 

fonctionne assez bien.
Maintenant il s'agit en plus d'effacer le fichier .m4a qui a été converti :

find /home/igor/Bureau/test -name "*.m4a" -exec soundconverter -b -m audio/mpeg -s .mp3 {} \; -exec rm -f {} \;

Et ça marche ! smile
Enfin, si je peux laisser une trace de ce qui a été fait :

find /home/igor/Bureau/test -name "*.m4a" -exec soundconverter -b -m audio/mpeg -s .mp3 {} \; -exec echo {} >> reencode_mp3_list_2.txt \; -exec rm -f {} \;

Ce qui ne fonctionne pas du tout : il écrit dans le .txt la progression du transcodage avec soundconverter, point par point et du coup dans le shell je ne sais pas ce qu'il se passe smile Si je mets le echo après la séquence rm, il me dit : "paramètre manquant pour -exec". Ce doit être parce qu'il ne peut écrire une donnée supprimée...
Si au contraire, je mets le echo en premier

find /home/igor/Bureau/test -name "*.m4a" -exec echo {} >> reencode_mp3_list_2.txt \; -exec soundconverter -b -m audio/mpeg -s .mp3 {} \; -exec rm -f {} \;

C'est pas terrible non plus.
Au final, je me dis que cette histoire de journal de ce qui a été fait, ce n'est peut-être pas aussi nécessaire que cela.
Il ne me reste plus qu'à "viser" le bon répertoire...


Sur Ubuntu depuis décembre 2009, et sous debian depuis avril 2013
Asus Vintage V7 - P8H61E - Intel® Core™ i3-2130 CPU @ 3.40GHz × 4 - 8Go RAM (dont 6 jamais utilisées :( ) - Debian Wheezy (64 bits) - Gnome 3.4
Lenovo Thinkpad X100E 3508-5GG - AMD Turion X2 Ultra Dual-Core 1.60GHz - 3Go RAM - Debian Wheezy (Xcfe)

Hors ligne