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 ^^'