J'essayais de convertir certains fichiers .ape en fichiers .flac en utilisant avconv
en ligne de commande; évidemment, avconv
n'est pas le point principal ici; sa syntaxe est assez simple, avconv -i inputApeFile.ape outputFlacFile.flac
.
Le fait est que les fichiers sont imbriqués dans plusieurs sous-dossiers; c’est-à-dire que j’ai le dossier Artist, puis divers sous-dossiers de CD, chacun contenant des fichiers .ape différents. Comment convertir tous les fichiers, puis les sauvegarder dans le même dossier que le fichier d'origine, mais avec l'extension .flac?
Si cela est possible, j'aimerais utiliser uniquement la commande Shell sur une seule ligne sans utiliser de scripts. Je pense que ça devrait être quelque chose comme ça
avconv -i 'ls -R | grep ape' '???'
mais je suis coincé avec la deuxième partie (peut-être en utilisant sed
??!??)
La commande dont vous avez besoin est:
find /path/to/MainDir/ -type f -name "*.ape" -execdir sh -c ' avconv -i "$1" "${1%.ape}.flac" ' _ {} \;
Cela trouvera chaque fichier portant le suffixe .ape
, puis le convertira avec le même nom de fichier avec le suffixe .flac
au même emplacement que le fichier d'origine.
{}
est le chemin du fichier trouvé actuel.
Voir le test de ici
Le script (python) ci-dessous devrait faire l'affaire. Copiez-le dans un fichier vide, enregistrez-le sous convert.py
, définissez le répertoire sur les fichiers de la section d'en-tête du script (convert_dir =
) et exécutez-le à l'aide de la commande suivante:
python3 /path/to/convert.py
#!/usr/bin/env python3
convert_dir = "/path/to/folder/tobeconverted"
import os
import subprocess
for root, dirs, files in os.walk(convert_dir):
for name in files:
if name.endswith(".ape"):
# filepath+name
file = root+"/"+name
# to use in other (convert) commands: replace the "avconv -i" by your command, and;
# replace (".ape", ".flac") by the input / output extensions of your conversion
command = "avconv -i"+" "+file+" "+file.replace(".ape", ".flac")
subprocess.Popen(["/bin/bash", "-c", command])
else:
pass
Maintenant que ffmpeg est à nouveau préféré à avconv, et qu’il existe de nombreux ordinateurs centraux peu coûteux (60 $ pour un XU4 à 8 cœurs), j’utilise ce qui suit pour être plus efficace;
#!/bin/bash
#
# ape2flac.sh
#
function f2m(){
FILE=$(echo "$1" | Perl -p -e 's/.ape$//g');
if [ ! -f "$FILE".flac ] ; then
ffmpeg -v quiet -i "$FILE.ape" "$FILE.flac"
fi
}
export -f f2m
find "$FOLDER" -name '*.ape' | xargs -I {} -P $(nproc) bash -c 'f2m "$@"' _ "{}"