Конвертируете кучу MP3-файлов в моно?

Конвертируете кучу MP3-файлов в моно?

У меня есть куча стерео MP3, которые я хотел бы преобразовать в моно. Как лучше всего это сделать? Я бы предпочел что-то, что позволяло бы обрабатывать их в пакетном режиме. Я хочу сохранить качество как можно ближе к оригиналу. Мои файлы также имеют разный битрейт, поэтому я не хочу делать все файлы 320kpbs, когда некоторые из них всего 128.

Кроме того, есть ли быстрый способ узнать, какие файлы из всей моей библиотеки являются стереофайлами?

решение1

Конвертация из стерео в моно будет означать перекодировку, поэтому сохранение того же битрейта будет бессмысленным. Фактически, конвертация 128 кбит/с MP3 -> новый 128 кбит/с MP3 даст вам ужасное качество, даже если второй будет моно (и, следовательно, потребует более низкого битрейта для того же субъективного качества).

Обычно я бы использовал настройку Variable Bit Rate (VBR) для MP3, которая нацелена на определенное качество и позволяет кодеру устанавливать любой требуемый битрейт (для полностью бесшумного звука требуется более низкий битрейт, чем для whalesong, которому требуется более низкий битрейт, чем для dubstep). Из командной строки ffmpeg может преобразовать аудио в моно с помощью опции -ac 1, например:

ffmpeg -i input.mp3 -c:a libmp3lame -q:a 2 -ac 1 output.mp3

Видетьэта страницадля руководства по использованию -q:a. Обратите внимание, что таблица на этой странице нацелена на стереозвук; фактические битрейты, которые вы увидите, будут несколько ниже. Обычно я рекомендую 3-4, но поскольку вы кодируете из MP3, а не с оригинального CD, вам следует стремиться к немного большему.

Конечно, это можно очень легко автоматизировать. В Linux/OSX/других UNIX-подобных системах для преобразования каталога MP3:

for f in *.mp3; do ffmpeg -i "$f" -c:a libmp3lame -q:a 2 -ac 1 mono-"$f"; done

Чтобы сделать это рекурсивно:

find . -type f -name "*.mp3" -exec ffmpeg -i '{}' -c:a libmp3lame -q:a 2 -ac 1 mono-'{}' \;

Если у вас GNU Parallel и многоядерный компьютер, вам может пригодиться следующее:

find . -type f -name "*.mp3" | parallel ffmpeg -i {} -c:a libmp3lame -q:a 2 -ac 1 mono-{}

решение2

Ну, есть несколько способов, но позвольте мне рассказать вам о тех, которые действительно работают. Вы можете использоватьМужество, для этого есть бесплатное программное обеспечение.

Пожалуйста, посмотрите этоСтатья eHowо том, как преобразовать MP3 в моно.

решение3

Lame может конвертировать файлы в моно с помощью ключа -m, преимуществом которого является сохранение метатегов (я не уверен, может ли ffmpeg делать то же самое).

Вот несколько сложный пример, который определяет битрейт mp3-файла перед его перекодированием с одним из вариантов качества переменного битрейта.

кот s2mono.sh
#!/bin/баш

mp3файл=$@

mp3size () {
    дю -ск "$1" | awk '{print $1 * 8 }'
}
mp3length () {
    id3info "$1" | \
        awk '/=== TLEN/ { if ($NF > 0) { len=int( $NF/1000) }} END {print len}'
}
mp3rate () {
    эхо $(( `mp3size "$1"` / `mp3length "$1"` ))
}

битрейт=`mp3rate "$mp3file"`
если [ $bitrate -gt 155 ]; тогда VBR='-V4'; фи
если [ $bitrate -gt 190 ]; тогда VBR='-V2'; фи
если [ $bitrate -gt 249 ]; тогда VBR='-V0'; фи

эхо-понижение $mp3file
lame --silent $VBR -mm --mp3input "$mp3file" \
      "$(базовое имя "$mp3file" .mp3 )-mono.mp3"

Я запустил это на папке, где общий размер всех mp3-файлов был 80 МБ в стереоформате. Полученные моно mp3-файлы заняли всего 32 МБ.

 find . -iname \*mp3  -print0 |xargs -0 -L1 sh s2mono.sh
 (...)

 du -skc *-mono.mp3| tail -n1
 32376   total

 find . -iname \*mp3  |grep -ve '-mono'  |\
     while read f; do du -sk "$f" ;done  |\
     awk '{ tot+=$1} END{print tot}'
 80112

Что касается последней части вашего вопроса, то fileсделаю следующее:

 find /R/audio/muzica/_ripped/wav  -exec file {} \+   |grep Monaural

решение4

Это самый простой метод, который я нашел.

для меня в.mp3; сделать ffmpeg -i "$i" -ac 1 "${i%.} - моно.mp3"; сделано

Этот же метод можно использовать для конвертации из других аудиоформатов в mp3, а также для конвертации в моно.

для меня в.m4b; выполните ffmpeg -i "$i" -ac 1 "${i%.} - моно.mp3"; сделано

Связанный контент