5

У меня есть большая библиотека компакт-дисков, скопированных в alac, которые я использую в качестве основной музыкальной библиотеки. Я хотел бы преобразовать копию этой библиотеки в vbr mp3 для портативных устройств, однако я не хочу делать это на своем ноутбуке, так как имеется около 650 ГБ музыки, и я много путешествую, чтобы оставить свой ноутбук сидящим за то время, которое потребуется для конвертации всей моей библиотеки. У моего друга есть место на сервере (запущено Debian Squeeze), и он готов предоставить мне на неделю или две силы для преобразования моей библиотеки. Какая будет лучшая утилита или способ пойти по этому поводу. Для отдельных песен или отдельных альбомов я просто использую что-то вроде

#!/bin/sh
for file in "$@" ; do
name=`echo "$file" | sed -e "s/.mp4$//g"`
ffmpeg -i "$file" -ac 2 -f wav - | lame --preset standard - "$name.mp3"
done

Я уверен, что есть гораздо более эффективный способ сделать это. Моя музыка в настоящее время организована как «Artist - Albums - Tracks», и я хотел бы, чтобы выходные данные отражали это.

2 ответа2

4

В приведенных ниже примерах ~/Music/ предполагается в качестве исходного каталога.


Создайте скрипт convert.sh :

$ cat > convert
#!/bin/bash
input=$1
output=${input#.*}.mp3
ffmpeg -i "$input" -ac 2 -f wav - | lame -V 2 - "$output"
[Ctrl-D]
$ chmod +x convert
  • Если вы хотите, чтобы для выходов использовалось другое местоположение, добавьте это перед ffmpeg:

    output=~/Converted/${output#~/Music/}
    mkdir -p "${output%/*}"
    

Преобразование с использованием parallel из moreutils:

$ find ~/Music/ -type f -name '*.mp4' -print0 | xargs -0 parallel ./convert --

Не следует путать parallel с GNU, который использует другой синтаксис:

$ find ~/Music/ -type f -name '*.mp4' | parallel ./convert
2

С GNU Parallel вам даже не нужен скрипт:

find ~/Music/ -type f -name '*.mp4' | parallel ffmpeg -i {} -ac 2 -f wav - \| lame -V 2 - {.}.mp3

То же самое можно сделать без использования lame, при условии, что ваша версия ffmpeg скомпилирована с включенным libmp3lame (большинство версий):

find ~/Music/ -type f -name '*.mp4' | parallel ffmpeg -i {} -c:a libmp3lame -q:a 2 {.}.mp3

Вы также можете использовать -iname вместо -name в команде find, чтобы получить нечувствительные к регистру совпадения (поэтому он подберет все * .mp4 и *.MP4, и все варианты корпуса). Кроме того, -ac 2 не требуется строго во второй версии; В любом случае MP3 может поддерживать максимум два канала, поэтому ffmpeg автоматически преобразует звук в два канала, если это необходимо, что позволит вам избежать добавления лишних бессмысленных каналов к любому монофоническому звуку, который у вас может быть.

На этой вики-странице ffmpeg вы найдете основную информацию о кодировке MP3, а в этом гидеаудио-руководство - более подробную информацию.

Если у вас есть другие машины, к которым вы можете подключиться по ssh (например, возможно, ваш ноутбук доступен по ночам), GNU Parallel также может использовать эти процессоры. Посмотрите на примеры --trc (для передачи файлов) и --retries (чтобы справиться с отсутствием ноутбука в течение дня). См. Http://www.gnu.org/software/parallel/man.html#example__using_remote_computers

Посмотрите вступительные видео, чтобы узнать больше: http://www.youtube.com/watch?v=OpaiGYxkSuQ

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .