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 15/01/2015, à 09:14

Neko62

RESOLU - Script - traitement par lot - conversion flac en mp3

Bonjour à tous,

je cherche à créer un script qui me permette de faire la chose suivante :
- j'ai l'ensemble de ma discothèque sur un serveur, organisée sous forme d'une structure de répertoires ( Artiste/Album/... ) dans lesquelles on retrouve à la fois les pistes audio au format flac, mais également les images des pochettes et des artistes au format jpg, ainsi que des fichiers *.nfo donnant des informations littérales sur l'artiste ou l'album ( utiles pour XBMC, ou KODI maintenant ).
- je souhaite copier l'ensemble de cette discothèque sur une carte microSD pour l'avoir sur une tablette tactile.
- n'ayant pas besoin de la qualité audio du flac et également pour une question de place sur la carte microSD, je souhaite convertir l'ensemble des pistes audio au format mp3 dans une qualité audio moindre mais tout de même audible. Pour cela, je pensai utiliser une commande du type :

avconv -i input.flac -ab 128k -map_metadata 0 -id3v2_version 3 output.mp3

- au final, comment puis-je recopier à l'aide d'un script l'ensemble de ma structure de dossiers/fichiers avec tout le contenu, tout en convertissant les fichiers flac en fichiers mp3 ?

D'avance merci.

Dernière modification par Neko62 (Le 15/01/2015, à 11:45)

Hors ligne

#2 Le 15/01/2015, à 09:37

serged

Re : RESOLU - Script - traitement par lot - conversion flac en mp3

find est ton sauveur !

find ~/Musique -iname "*.flac" -exec avconv '{}' ... \;

(le '{}' remplacera le nom du fichier trouvé par "*.flac").


LinuxMint Vera Cinnamon et d'autres machines en MATE, XFCE... 20.x , 21.x ou 19.x
Tour : Asus F2A55 / AMD A8-5600K APU 3,6GHz / RAM 16Go / Nvidia GeForce GT610 / LM21.1 Cinnamon
Portable : LDLC Mercure MH : Celeron N3450 /RAM 4Go / Intel HD graphics 500 i915 / biboot Win 10 (sur SSD) - LM21.1 MATE (sur HDD)

Hors ligne

#3 Le 15/01/2015, à 10:24

Hizoka

Re : RESOLU - Script - traitement par lot - conversion flac en mp3

find ne sera pas terrible pour ça je pense.

car il veut copier son architecture et convertir.

le soucis c'est pour lui indiquer le fichier de sortie avec find... comment lui dire de changer d'emplacement de sortie ou tout simplement de renommer le fichier en mp3 ?

Moi je verrais plutot :

input="Dossier des musiques" # => il faut que ca se termine par / !!
output="Dossier de sortie" # => il faut que ca se termine par / !!

# traite les fichiers un par un
while read file
do
  # Architecture a recrer
  arch="${file/${input}}" arch="${arch%/*}/"
  
  # Nom du fichier sans l'extension
  name="${file##*/}" name="${name%.*}"

  # Verifie que les dossiers parents existent et les crée si besoin
  if [[ ! -d "${output}${arch}" ]]
  then
    mkdir -p "${output}${arch}"
  fi

  # Si l'extension est un fichier flac
  if [[ "flac" == "${file##*.}" ]]
  then
    avconv -i "${file}" -ab 128k -map_metadata 0 -id3v2_version 3 "${output}${arch}${name}.mp3"

  # Si ce n'est pas un flac
  else
    cp "${file}" "${output}${arch}"
  fi
done < <(find "${input}" -type f)

Non testé !!

Pour tester :

input="Dossier des musiques" # => il faut que ca se termine par / !!
output="Dossier de sortie" # => il faut que ca se termine par / !!

# traite les fichiers un par un
while read file
do
  # Architecture a recrer
  arch="${file/${input}}" arch="${arch%/*}/"
  
  # Nom du fichier sans l'extension
  name="${file##*/}" name="${name%.*}"

  # Verifie que les dossiers parents existent et les crée si besoin
  if [[ ! -d "${output}${arch}" ]]
  then
    echo "le dossier ${output}${arch} n'existe pas, on le crée lui et ses parents."
  fi

  # Si l'extension est un fichier flac
  if [[ "flac" == "${file##*.}" ]]
  then
    echo "le fichier ${file} est un flac qu'il faut convertir, il sera changer en : ${output}${arch}${name}.mp3

  # Si ce n'est pas un flac
  else
    echo "le fichier ${file} doit simplement être copié dans le dossier : ${output}${arch}"
  fi
done < <(find "${input}" -type f)

Il y a surement plus simple mais là ca permet de creer l'architecture, de copier les fichiers non flac et de convertir les flacs directement en mp3 sans les copier avant.

Dernière modification par Hizoka (Le 15/01/2015, à 10:25)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#4 Le 15/01/2015, à 11:05

Neko62

Re : RESOLU - Script - traitement par lot - conversion flac en mp3

Tout d'abord, merci pour votre réactivité et votre aide !

j'ai testé le script suivant comme indiqué par Hizoka :

input="/home/nicolas/Musique/Art of Noise/" # => il faut que ca se termine par / !!
output="/home/nicolas/Musique/Art of Noise_test/" # => il faut que ca se termine par / !!

# traite les fichiers un par un
while read file
do
  # Architecture a recrer
  arch="${file/${input}}" arch="${arch%/*}/"
  
  # Nom du fichier sans l'extension
  name="${file##*/}" name="${name%.*}"

  # Verifie que les dossiers parents existent et les crée si besoin
  if [[ ! -d "${output}${arch}" ]]
  then
    echo "le dossier ${output}${arch} n'existe pas, on le crée lui et ses parents."
  fi

  # Si l'extension est un fichier flac
  if [[ "flac" == "${file##*.}" ]]
  then
    echo "le fichier ${file} est un flac qu'il faut convertir, il sera changer en : ${output}${arch}${name}.mp3

  # Si ce n'est pas un flac
  else
    echo "le fichier ${file} doit simplement être copié dans le dossier : ${output}${arch}"
  fi
done < <(find "${input}" -type f)

mais cela me donne la réponse suivante :

nicolas@Nicolas-System-Product-Name:~$ sh '/home/nicolas/Musique/flac_to_mp3.sh' 
/home/nicolas/Musique/flac_to_mp3.sh: 29: /home/nicolas/Musique/flac_to_mp3.sh: Syntax error: Unterminated quoted string

qu'en pensez-vous ?
Merci.

Hors ligne

#5 Le 15/01/2015, à 11:23

pingouinux

Re : RESOLU - Script - traitement par lot - conversion flac en mp3

Bonjour,
Essaye de le lancer avec bash et non sh.

Ajouté : Et il manque " à la fin de la ligne 22

Dernière modification par pingouinux (Le 15/01/2015, à 11:32)

Hors ligne

#6 Le 15/01/2015, à 11:30

Neko62

Re : RESOLU - Script - traitement par lot - conversion flac en mp3

Ca donne ceci avec bash

nicolas@Nicolas-System-Product-Name:~$ bash '/home/nicolas/Musique/flac_to_mp3.sh' 
/home/nicolas/Musique/flac_to_mp3.sh: ligne 28: Caractère de fin de fichier (EOF) prématuré lors de la recherche du « " » correspondant
/home/nicolas/Musique/flac_to_mp3.sh: ligne 29: Erreur de syntaxe : fin de fichier prématurée
nicolas@Nicolas-System-Product-Name:~$ 

Hors ligne

#7 Le 15/01/2015, à 11:33

pingouinux

Re : RESOLU - Script - traitement par lot - conversion flac en mp3

J'ai complété mon message #5.

Hors ligne

#8 Le 15/01/2015, à 11:45

Neko62

Re : RESOLU - Script - traitement par lot - conversion flac en mp3

Ca fonctionne nickel !
Impeccable.
Encore merci à tous !

Hors ligne

#9 Le 15/01/2015, à 13:47

Hizoka

Re : RESOLU - Script - traitement par lot - conversion flac en mp3

oups désolé pour le " tongue

merci pingouinux


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne