creative ha scritto:
prova con ffmpeg
ffmpeg -i INPUT -ab 192k -y OUTPUT
non ho testato se vengono o meno mantenuti i tag
nada, anche ffmpeg cancella i tag mp3.
Ci ho rinunciato a fare cose semplici e sono arrivato ad una soluzione (quella detta su di leggere i tag e poi di riscriverli nel file ::) )
Mi aspettavo fosse più difficile invece me la sono cavato con poco:
Codice: Seleziona tutto
#!/bin/bash
# questo script prende tutti i file .mp3 che si trovano nelle cartelle e
# li comprime.
echo -e "\nInizio dello script: valore 6500Kbyte"
# cerco tutti i file e li stampo sul file tmp con antecedente la dimensione in Kb
find . -type f -exec du {} \; > ~/tmp
# cancello tutte le righe la cui dimensione è minore di 6500, divido i campi con il carattere \t
# attenzione, per indicare \n ho indicato lo \ con il codice ascii \134
echo -e `awk -v FS="\t" '{if (int($1)>6500) printf "%s\134n",$2}' ~/tmp` > ~/tmp
echo "Elenco recuperato correttamente nel file '~/tmp'!"
numfile=`cat ~/tmp | wc -l`
let numfile--
echo "Ci sono $numfile files da comprimere."
i=0
# leggo tutti i file uno per uno (riga per riga)
# attenzione alle virgolette, se non ci sono ogni spazio significa un nuovo argomento.
cat ~/tmp | while read file;
do
# attenzione alle virgolette nella variabile $file
if [ "-n" "$file" ]
then
let i++
# leggo il bitrate del file e ne faccio un controllo, se non è maggiore di 128 è inutile ricodificarlo
bitrate=`id3info "$file" | grep Bitrate | awk '{sub("KBps","",$2); print $2}'`
#echo $bitrate
if [ $bitrate -gt 128 ]
then
# recupero i tag del file .mp3 grazie allo script id3info e il bitrate
title=`id3info "$file" | grep TIT2 | awk -F: '{sub(/[[:space:]]*/,"",$2); print $2}'`
artist=`id3info "$file" | grep TPE1 | awk -F: '{sub(/[[:space:]]*/,"",$2); print $2}'`
album=`id3info "$file" | grep TALB | awk -F: '{sub(/[[:space:]]*/,"",$2); print $2}'`
year=`id3info "$file" | grep TYER | awk -F: '{sub(/[[:space:]]*/,"",$2); print $2}'`
echo -e "\n File $i/$numfile"
#echo "$file: $artist - $title : $album - $year ~${file#.}"
# attenzione: devo creare il secondo file in una cartella temporanea (~/ va benissimo) e poi cancellarlo, amarok poi potrebbe fare una scansione della collezione durante l'encoding e quindi leggere meta' informazioni. (durata 1.41 etc...)
# codice per comprimere il file mp3
lame -b 128 --tt "$title" --ta "$artist" --tl "$album" --ty "$year" "$file" ~/tmp.MP3
# sposto il file ~/tmp.MP3 e sovrascrivo il file vecchio
mv ~/tmp.MP3 "$file"
echo -e "\n File $file modificato correttamente\n"
else
echo -e "\n Il bitrate del file $file è già minore di $bitrate KBps.\n"
fi
fi
done
rm ~/tmp
Se a qualcuno può servire questo codice va messo nella cartella "Musica" o comunque quella in cui sono presenti tutti i vostri file mp3 (funziona anche se i file si trovano all'interno di altre sottocartelle, per esempio NomeCantante/NomeAlbum). Vengono cercati tutti i file "grandi" (quindi si consiglia vivamente di non far girare lo script se ci sono altri file oltre a quelli mp3 se questi file superano i 6Mb di grandezza). Quindi si selezionano tutti i file mp3 che sono maggiori di 6.5Mb (numero scelto così ma si può pensare di generalizzare lo script) e si controlla il bitrate. Se il bitrate è maggiore di 128KBps si ricodifica il file con lame (senza perdere i vecchi tag o almeno i tag titolo, artista, album, e anno; gli altri andranno persi), e il nuovo file a 128KBps (più piccolo del vecchio, anche questo valore potrebbe essere parametrizzato) andrà a sovrascrivere il file esistente.
Che ne pensate dello script? Secondo voi può essere migliorato e di aiuto a qualcun altro o solo io sento l'esigenza di ridurre i file "grandi" mp3 in maniera semplice e pulita?