Pages : 1
#1 Le 07/07/2012, à 20:40
- billou
Conversion avec respect d'arborescence Flac vers Vorbis?
Salut la compagnie, j'ai toute une bibilothèque d'albums rippés et encodé en Flac, et tagués proprement via EasyTag, à des fins d'archivage (et pour une meilleure qualité audio sur les appareils "fixes")
Néanmoins disposant d'un smartphone sous Androïd, je compte réencoder ces derniers afin d'en disposer dessus, seulement je suis confronté à quelques problèmes.
-Déjà, habituellement, j'utilise XCFA qui fait très bien son taff, mais j'aimerais profiter du coreI5 que je viens de m'offrir pour encoder plus rapidement avec tous les cœurs utilisés, ce que XCFA ne permet (apparemment?) pas pour l'instant.
-Deuxièmement, un autre problème se pose, mes pistes sont nommées telles que taguées, et l'un ou l'autre, il n'est pas rare que les caractères utilisés soient des kanjis (japonais) ou du cyrillique (Russe), beaucoup de logiciels me flinguent les caractères en question après ré-encodage, y compris dans l'idtag.
Et enfin, je n'ai pas encore vu de logiciel proposer le respect de l'arborescence originale avec tous les sous dossiers & cie (classés proprement)... Et j'imagine que pour correspondre à mes besoins, le terminal devrait être d'une grande utilité?
Donc si quelqu'un connaît la commande miracle "type", ça m'arrangerait pas mal, il/elle aura ma gratitude éternelle !
Dernière modification par billou (Le 07/07/2012, à 20:42)
Hors ligne
#2 Le 07/07/2012, à 23:26
- Grouar
Re : Conversion avec respect d'arborescence Flac vers Vorbis?
Tiens c'est marrant, j'ai eu le meme problème il y a quelques semaines.
Du coup j'ai écrit un petit script en python qui fait ce que tu demandes, mais sans le multi-threading (donc on ne profite pas de tous les coeurs). Au niveau du temps d'exécution, ça a mis chez moi 2-3h pour encoder ~ 3000 morceaux sur un i5-2500k.
Les kanjis des noms de fichier et des metadata de mes musiques ont bien été préservés.
Voici le script si ça t'intéresse tout de meme (la seule dépendance, outre python, est oggenc) :
EDIT : je viens de le modifier un peu, voici un script qui permet d'utiliser tous les coeurs à disposition :
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os,glob,shutil,multiprocessing
inputFolder = "/home/grou/python/input"
outputFolder = "/home/grou/python/output"
transcodeCommand = "oggenc -q 6"
tasks=[]
def ntab(N):
tab=""
for i in range(2*N):
tab+=" "
return tab
def transcode(input):
os.system(transcodeCommand + input)
def transcodeFolder(input,location,level):
if os.path.isdir(input):
os.chdir(outputFolder+"/"+location)
try:
os.makedirs(input.split("/")[-1])
except:
print ntab(level)+"/!\\ Can't create " + outputFolder+"/"+location+"/"+input.split("/")[-1] + " directory. Please check if it already exists in the outputFolder."
os.chdir(input)
try:
for i in glob.glob("*"):
transcodeFolder(input+"/"+i,location+"/"+input.split("/")[-1],level+1)
except:
print ntab(level)+"LOOP FAILED for input : " +input + " \n"+ntab(level)+ "Location : " + location
elif input.split(".")[-1]== "flac" or input.split(".")[-1]=="wav":
try:
tasks.append(" "+ "\""+input + "\"" + " -o \"" + outputFolder + location + "/"+input.split("/")[-1].split(".")[0]+".ogg\"")
except:
print "ERROR transcoding " + input
elif input.split(".")[-1]=="mp3" or input.split(".")[-1]=="ogg":
try:
shutil.copy2(input,outputFolder+location)
except:
print input+" copy FAILED."
else:
print ntab(level)+input +" is not a .flac,.wav,.mp3,.ogg file. Skipping."
transcodeFolder(inputFolder,"",0)
pool = multiprocessing.Pool(None)
wait = pool.map_async(transcode,tasks)
wait.wait()
print "Finished !"
Pense à modifier les variables inputFolder et ouputFolder.
Si tu veux modifier la qualité de l'encodage, change le 6 de la variable transcodeCommand. Je te renvoie à cette page pour l'échelle de qualité.
Ceci dit, ya peut etre plus simple ^^'
Dernière modification par Grouar (Le 08/07/2012, à 01:35)
Hors ligne
#3 Le 08/07/2012, à 02:19
- NumberJ
Re : Conversion avec respect d'arborescence Flac vers Vorbis?
Ceci dit, ya peut etre plus simple ^^'
Je propose ma solution :
#!/usr/bin/python
import os
import shutil
import multiprocessing
import subprocess
inputFolder = "/home/grou/python/input"
outputFolder = "/home/grou/python/output"
transcodeCommand = ["oggenc", "-q", "6"]
def execute_no_output(args):
"""Execute a command without outputing anything on the console.
"""
p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
while p.poll() is None:
p.communicate()
return p.returncode
def transcode(source):
"""Create the program arguments used to transcode a file with subprocess.
"""
pos = source.rfind('.')
target = source[:pos] + '.ogg'
return transcodeCommand + [
os.path.join(
inputFolder,
source),
"-o",
os.path.join(
outputFolder,
target)]
tasks = []
nb_processed = 0
os.chdir(inputFolder)
for dirpath, dirnames, filenames in os.walk('.'):
print "Entering %s..." % dirpath
target = os.path.join(outputFolder, dirpath)
if not os.path.isdir(target):
print "Creating %s" % target
os.makedirs(target)
for name in filenames:
ext = name.split('.')[-1].lower()
if ext in ['flac', 'wav']:
tasks.append(transcode(
os.path.join(dirpath, name)))
elif ext in ['mp3', 'ogg']:
shutil.copy(
os.path.join(inputFolder, dirpath, name),
os.path.join(outputFolder, dirpath, name))
else:
print "%s is not a .flac, .wav, .mp3, .ogg file. Skipping." % (
os.path.join(inputFolder, dirpath, name),)
nb_processed += 1
pool = multiprocessing.Pool(None)
pool.map(execute_no_output, tasks)
print "Processed %d files (%d encoded)" % (nb_processed, len(tasks))
Dernière modification par NumberJ (Le 08/07/2012, à 02:20)
Hors ligne
#4 Le 08/07/2012, à 06:54
- billou
Re : Conversion avec respect d'arborescence Flac vers Vorbis?
Effectivement, vos scripts sont très utiles, merci !
Par contre NumberJ, le multithreading est une amélioration notable que tu apportes (ça encode plusieurs morceaux en même temps? Il n'y a qu'un fork d'oggenc sous windows qui permet d'encoder via plusieurs cœurs, que j'ai trouvé...
Ce qui est dommage, c'est qu'on perd l'affichage de la progression dans le terminal comme sur la version de Grouar. :-/
Hors ligne
#5 Le 08/07/2012, à 10:06
- NumberJ
Re : Conversion avec respect d'arborescence Flac vers Vorbis?
Ce qui est dommage, c'est qu'on perd l'affichage de la progression dans le terminal comme sur la version de Grouar. :-/
Ah mais je pensais que c'était l'objectif.
Le problème c'est justement que comme ça encode plusieurs trucs en parallèle, si on laisse les processus afficher quelque chose on aurait un mix immonde (et illisible) de toutes les progressions.
Il n'est pas très difficile d'ajouter la progression en terme de nombre de fichiers traités sur le total (puisque ce total est calculé au début). On n'a qu'à dire que je le laisse comme exercice au lecteur (mais je peux l'ajouter si tu veux)
Hors ligne
#6 Le 08/07/2012, à 10:23
- billou
Re : Conversion avec respect d'arborescence Flac vers Vorbis?
Bah, ça serait cool que tu le rajoutes, par contre le script en question, est publié sous GPL? Ça pourrait être sympa de publier ça se le wiki pour ceux qui en auraient besoin !
J'aimerais bien toucher un peu le python, tout comme la programmation, je suis capable d'en saisir les rouages, mais je crois que j'ai une haine maladive pour le "par coeur" depuis ma plus tendre enfance, bloquer, ça aide pas... :-/
Là j'y verrais bien un petit GUI qui y serait adjoint, faudrait que je regarde comme ça fonctionne !
Hors ligne
#7 Le 08/07/2012, à 13:39
- kamui57
Re : Conversion avec respect d'arborescence Flac vers Vorbis?
Est-ce que avec find ça pourrait aller pour le respect de l'arborescence ? un truc du genre
find -iname *.flac -exec <convert> "{}" "{}".ogg \;
? (avec <convert> la commande pour convertir un .flac vers un .ogg)
(aucune idée pour le multithreading et la barre de progression par contre)
avec echo au lieu de <convert> j'ai dans un répertoire avec kanjis
[dim. juil. 08][13:32:33][~/Musique/Toshi]
-> find -iname *.mp3 -exec echo "{}" "{}".ogg \;
./(1995.03.29) GRACE/09_-_Toshi_-_Everlasting_Love.mp3 ./(1995.03.29) GRACE/09_-_Toshi_-_Everlasting_Love.mp3.ogg
(…)
./(1997.11.21) NATURAL HIGH/01_-_Toshi_-_NATURAL_HIGH.mp3 ./(1997.11.21) NATURAL HIGH/01_-_Toshi_-_NATURAL_HIGH.mp3.ogg
./(1997.11.21) NATURAL HIGH/03_-_Toshi_-_NATURAL_HIGH_(ORIGINAL_KARAOKE).mp3 ./(1997.11.21) NATURAL HIGH/03_-_Toshi_-_NATURAL_HIGH_(ORIGINAL_KARAOKE).mp3.ogg
./(1997.11.21) NATURAL HIGH/02_-_Toshi_-_Love_Song.mp3 ./(1997.11.21) NATURAL HIGH/02_-_Toshi_-_Love_Song.mp3.ogg
./toshi samurai japan/01 エアポート.mp3 ./toshi samurai japan/01 エアポート.mp3.ogg
./toshi samurai japan/04 春の息吹.mp3 ./toshi samurai japan/04 春の息吹.mp3.ogg
./toshi samurai japan/02 雨音.mp3 ./toshi samurai japan/02 雨音.mp3.ogg
./toshi samurai japan/03 武士JAPAN.mp3 ./toshi samurai japan/03 武士JAPAN.mp3.ogg
./MISSION/06_-_Toshi_-_Heart_of_the_back.mp3 ./MISSION/06_-_Toshi_-_Heart_of_the_back.mp3.ogg
(…)
[dim. juil. 08][13:36:11][~/Musique/Toshi]
Quand le dernier arbre aura été abattu, et le dernier animal exterminé, les hommes se rendront compte que l'argent ne se mange pas (proverbe indien)
Toshiba Satellite L655 4 Go RAM, Archlinux Gnome-shell,LXDE / W7
Toshiba Satellite M30 512 Mo RAM, Archlinux Gnome 3 restreint / Crunchbang LXDE
https://help.ubuntu.com/community/Pastebinit pour poster du texte sur internet en console
Hors ligne
#8 Le 08/07/2012, à 19:00
- NumberJ
Re : Conversion avec respect d'arborescence Flac vers Vorbis?
Ca peut se faire avec find, mais t'auras pas le multithreading ou la progression, et si tu veux output dans un autre dossier il faut rajouter un peu de sed supplémentaire.
Hors ligne
#9 Le 08/07/2012, à 20:08
- NumberJ
Re : Conversion avec respect d'arborescence Flac vers Vorbis?
Bah, ça serait cool que tu le rajoutes, par contre le script en question, est publié sous GPL? Ça pourrait être sympa de publier ça se le wiki pour ceux qui en auraient besoin !
J'ai rajouté la progression, et j'en ai fait un truc plus générique, des fois que vous vouliez encoder d'autres trucs (des JPEG, etc).
Les fonctions tr_copy et tr_encode en haut sont les actions qui sont appliquées aux fichiers suivant leur type.
https://gist.github.com/3072068
Faites-en ce que vous voulez !
Hors ligne
#10 Le 12/07/2012, à 13:32
- billou
Re : Conversion avec respect d'arborescence Flac vers Vorbis?
Merci !
Hors ligne
#11 Le 02/08/2013, à 09:55
- billou
Re : Conversion avec respect d'arborescence Flac vers Vorbis?
Petit up, je viens de tester ton dernier script, je ne sais pas si c'est du à la version de python, mais de mon côté ça ne fonctionne plus, il y a des erreurs de syntaxe...
Hors ligne