Доброго времени суток.
Накачал я тут себе однажды гору музыки, не разбираясь, в каком она формате, во flac или же в mp3. Думал «ну а что, есть же куча утилит, которые все это конвертируют, потом разберусь». Скачал, поискал в сети, чем можно конвертировать, нашел программку All2mp3 (сижу на маке)… Какого же было моё удивление, когда я узнал, что не могу в неё закинуть просто папку Music и ждать, пока она пробежится по всем подпапкам, найдет все файлы flac и конвертирует их в mp3! Начал гуглить, но никакого вменяемого решения так и не нашел.
Написал небольшой скрипт на shell, который пробегается по папкам, ищет flac, конвертирует их в mp3, и может удалить .flac если вы попросите. Скрипт был написан на коленке, по-этому новые файлы называются *.flac.mp3. Также для его работы нужны установленные программы flac
и lame.
Вот сам скрипт:
Как его использовать:
Проверил у себя — все работает. По крайней мере mp3 файлы есть и ничего лишнего не удалено, что уже неплохо, я считаю. Надеюсь, кому-нибудь пригодится.
P.S. Буду рад замечаниям по коду, так как на shell пишу очень редко.
UPD: Скрипт не сохраняет теги! Прошу прощения у тех, кто уже подорвался на этой мине, сейчас буду исправлять.
UPD2: Так как мое решение работает не так, как хотелось бы, пользователь mgyk любезно предложил свой вариант в комментариях:
Так же, в коментариях было предложено несколько программ, которые я не нашел, и которые выполняют поставленную задачу:
Max
X Lossless decoder
Накачал я тут себе однажды гору музыки, не разбираясь, в каком она формате, во flac или же в mp3. Думал «ну а что, есть же куча утилит, которые все это конвертируют, потом разберусь». Скачал, поискал в сети, чем можно конвертировать, нашел программку All2mp3 (сижу на маке)… Какого же было моё удивление, когда я узнал, что не могу в неё закинуть просто папку Music и ждать, пока она пробежится по всем подпапкам, найдет все файлы flac и конвертирует их в mp3! Начал гуглить, но никакого вменяемого решения так и не нашел.
Написал небольшой скрипт на shell, который пробегается по папкам, ищет flac, конвертирует их в mp3, и может удалить .flac если вы попросите. Скрипт был написан на коленке, по-этому новые файлы называются *.flac.mp3. Также для его работы нужны установленные программы flac
и lame.
Вот сам скрипт:
#!/bin/sh #flac2mp3 error(){ echo $@ 1>&2; exit 1; } r=0 rem(){ if [ $r -eq 1 ]; then rm "$1" fi } flac2mp3(){ data=$1 echo " -----------------------Working on $data" if [ -d "$data" ]; then for file in "$data"*; do if [ -d "$file" ]; then file="$file"/ fi flac2mp3 "$file" wait done elif [[ "$data" == *.flac ]]; then flac -d --stdout "$data" > temp.wav wait echo " ---------------------------------$data to wav done" lame temp.wav "$data".mp3 wait echo " ---------------------------------$data to $data.mp3 done" rm temp.wav rem "$data" fi } if [ $# -eq 0 ]; then error "Wrong arguments" fi echo ============================================================ if [ $# -eq 1 ]; then flac2mp3 "$1" elif [ $# -eq 2 ] && [ $1 == "-r" ]; then r=1 flac2mp3 "$2" else error "Wrong arguments!" fi
Как его использовать:
- Для конвертации БЕЗ удаления файлов .flac:
flac2mp3 yourMusicFolder/
- Для конвертации C удалением файлов .flac:
flac2mp3 -r yourMusicFolder/
Проверил у себя — все работает. По крайней мере mp3 файлы есть и ничего лишнего не удалено, что уже неплохо, я считаю. Надеюсь, кому-нибудь пригодится.
P.S. Буду рад замечаниям по коду, так как на shell пишу очень редко.
UPD: Скрипт не сохраняет теги! Прошу прощения у тех, кто уже подорвался на этой мине, сейчас буду исправлять.
UPD2: Так как мое решение работает не так, как хотелось бы, пользователь mgyk любезно предложил свой вариант в комментариях:
#!/bin/bash if [ "${1}" == '' ]; then shellDir="$PWD" else shellDir="${1}" fi prefix=/home/share/music/_mp3 find "${shellDir}" -name '*.flac' -print | while read fn; do ARTIST=`metaflac "$fn" --show-tag=ARTIST | sed s/.*=//g` TITLE=`metaflac "$fn" --show-tag=TITLE | sed s/.*=//g` ALBUM=`metaflac "$fn" --show-tag=ALBUM | sed s/.*=//g` GENRE=`metaflac "$fn" --show-tag=GENRE | sed s/.*=//g` TRACKNUMBER=`metaflac "$fn" --show-tag=TRACKNUMBER | sed s/.*=//g` DATE=`metaflac "$fn" --show-tag=DATE | sed s/.*=//g` newpath="${prefix}/$ARTIST/$ALBUM" newfile=${TITLE}.mp3 echo $newfile mkdir -p "${newpath}" flac -c -d "${fn}" | lame -m j -q 0 --vbr-new -V 0 -s 44.1 - "${newpath}/${newfile}" id3 -t "$TITLE" -T "${TRACKNUMBER:-0}" -a "$ARTIST" -A "$ALBUM" -y "$DATE" -g "${GENRE:-12}" "${newpath}/${newfile}" done
Так же, в коментариях было предложено несколько программ, которые я не нашел, и которые выполняют поставленную задачу:
Max
X Lossless decoder
