Script mp3cover

Description

mp3cover a pour but de placer une image cover.jpg comme étiquette id3 dans les fichiers mp3 contenus dans le même répertoire. Tout comme mp3resample et m3utospl, il peut servir pour transformer des fichiers mp3 pour les rendre plus pratiques à utiliser sur un lecteur mp3 comme le YP-P2 de Samsung.

Téléchargement

Télécharger mp3cover

mp3cover est distribué sous licence libre CeCILL.

Installation

Une fois le fichier téléchargé, vous devez

Ce logiciel nécessite l'utilisation des utilitaires convert et eyeD3, installables sous Ubuntu ou Debian par

sudo aptitude install imagemagick eyed3

Aide en ligne

$ mp3cover -h

Usage : mp3cover [répertoire] [répertoire ...]
        mp3cover -h

Place un fichier cover.jpg comme étiquette id3 dans les fichiers mp3 contenus
dans les répertoires donnés en argument, ou à défaut dans le répertoire courant.

Le comportement est récursif. Les étiquettes id3 ne sont modifiées que si le
fichier cover.jpg existe, après redimensionnement à la taille de 250x250 pixels.
Les paquets imagemagick (pour la retouche d'image) et eyed3 (pour la
modification des données id3) doivent être installés.

Transcript

#!/bin/bash

# This software is governed by the CeCILL license under French law and
# abiding by the rules of distribution of free software.  You can  use, 
# modify and/ or redistribute the software under the terms of the CeCILL
# license as circulated by CEA, CNRS and INRIA at the following URL
# "http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt".
# 
# Ce logiciel est régi par la licence CeCILL soumise au droit français et
# respectant les principes de diffusion des logiciels libres. Vous pouvez
# utiliser, modifier et/ou redistribuer ce programme sous les conditions
# de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA 
# à l'adresse "http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt".
# 
# Copyright Cyril Ravat, <ravat@free.fr> (2007-2009)
# Website : http://www.cyril-ravat.fr/scripts/mp3cover.php
# Help : mp3cover -h

# Taille maximale des images redimensionnées (en pixels)
IMSIZE=250

if [ "$1" == "-h" ]; then
  echo -e "Usage : $(basename "$0") [\033[1mrépertoire\033[0m] [\033[1mrépertoire\033[0m ...]"
  echo "        $(basename "$0") -h"
  echo
  echo "Place un fichier cover.jpg comme étiquette id3 dans les fichiers mp3 contenus"
  echo -e "dans les \033[1mrépertoire\033[0ms donnés en argument, ou à défaut dans le répertoire courant."
  echo 
  echo "Le comportement est récursif. Les étiquettes id3 ne sont modifiées que si le"
  echo "fichier cover.jpg existe, après redimensionnement à la taille de ${IMSIZE}x$IMSIZE pixels."
  echo "Les paquets imagemagick (pour la retouche d'image) et eyed3 (pour la"
  echo "modification des données id3) doivent être installés."
  echo 
  exit 0
fi

# Vérification des utilitaires convert et eyeD3
if [ -z `which convert` ]; then
  echo -e "L'utilitaire \033[1mconvert\033[0m n'existe pas."
  echo -e "Il faut installer le paquet \033[1mimagemagick\033[0m."
  exit 1
fi
if [ -z `which eyeD3` ]; then
  echo -e "L'utilitaire \033[1meyeD3\033[0m n'existe pas."
  echo -e "Il faut installer le paquet \033[1meyed3\033[0m."
  exit 1
fi

# Fonction d'encodage
function ajoute () {
  REP="$1"
  convert -resize "${IMSIZE}x$IMSIZE>" -quality 85 "$REP/cover.jpg" "$REP/covertmp.jpg"
  for FICHIER in "$REP"/*.mp3; do
    touch -r "$FICHIER" "$REP/tmp"
    eyeD3 --remove-images "$FICHIER" > /dev/null 2> /dev/null
    eyeD3 --add-image="$REP/covertmp.jpg":FRONT_COVER "$FICHIER" > /dev/null 2> /dev/null
    touch -r "$REP/tmp" "$FICHIER"
    echo -n "*"
  done
  rm "$REP/covertmp.jpg" "$REP/tmp"
}

# Récursivité
function recherche() {
  REP="$1"
  [ -d "$REP" ] || return
  echo -n "Répertoire $(basename "$REP")  "
  # Ajout de l'image
  [ -e "$REP/cover.jpg" ] && ajoute "$REP"
  echo 

  # Gestion des répertoires : comportement récursif
  for NREP in "$REP"/*; do
    [ -d "$NREP" ] && recherche "$NREP"
  done
}

# Corps : description de la liste des répertoires à traiter
for i in `seq $#`; do
  recherche "${!i%/}"
done

[ $# -eq 0 ] && recherche `pwd`