Самый эффективный способ конвертировать большую библиотеку ALAC в MP3

4581
Leda

У меня есть большая библиотека компакт-дисков, скопированных в 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», и я хотел бы, чтобы результаты отражали это.

5
Сколько процессоров / ядер у сервера? (LAME поддерживает только однопоточное кодирование, но в четырехъядерном процессоре можно кодировать четыре песни одновременно.) grawity 12 лет назад 0
У меня есть 4 ядра процессора, доступных на сервере для транскодирования. Leda 12 лет назад 0

2 ответа на вопрос

4
grawity

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


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

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

    output=~/Converted/$ mkdir -p "$" 

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

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

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

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

С 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вместо команды -namefind, чтобы получить нечувствительные к регистру совпадения (поэтому он подберет все * .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

Похожие вопросы