Преобразование кучу MP3 в моно?

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

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

24
задан Steve Rathbone
25.02.2023 11:40 Количество просмотров материала 2824
Распечатать страницу

4 ответа

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

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

3
отвечен aibk01 2023-02-26 19:28

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

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

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

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

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

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
отвечен evilsoup 2023-02-26 21:45

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

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

cat s2mono.sh
#!/bin/bash

mp3file=$@

mp3size () {
    du -sk "" | awk '{print  * 8 }'
}
mp3length () {
    id3info "" | \
        awk '/=== TLEN/ { if ($NF > 0) { len=int( $NF/1000) }} END {print len}'
}
mp3rate () {
    echo $(( `mp3size ""` / `mp3length ""` ))
}

bitrate=`mp3rate "$mp3file"`
if [ $bitrate -gt 155 ]; then VBR='-V4'; fi
if [ $bitrate -gt 190 ]; then VBR='-V2'; fi
if [ $bitrate -gt 249 ]; then VBR='-V0'; fi

echo downsampling $mp3file
lame --silent $VBR -m m --mp3input "$mp3file" \
      "$(basename "$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+=} END{print tot}'
 80112

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

 find /R/audio/muzica/_ripped/wav  -exec file {} \+   |grep Monaural
1
отвечен Ярослав Рахматуллин 2023-02-27 00:02

дом на ответ, вы можете получить более портативное решение (без дополнительных зависимостей, без проблем с id3v1 против ID3v2 тегов) просто используя file и sed. Я также заполнил немного больше настроек битрейта.

в этом сценарии необходимо указать входные и выходные файлы в командной строке.

#!/bin/bash
#
# Usage: (this script) stereo-input.mp3 mono-output.mp3
#
# concept via https://superuser.com/a/566023/253931
#

# gnu/linux
bitrate=`file "" | sed 's/.*, \(.*\)kbps.*//'`

# osx
# bitrate=`afinfo "" | grep "bits per second" | sed 's/.*: \(.*\)000 bits per second.*//'`

BR='-V9'
if [ $bitrate -gt  75 ]; then BR='-V8'; fi
if [ $bitrate -gt  90 ]; then BR='-V7'; fi
if [ $bitrate -gt 105 ]; then BR='-V6'; fi
if [ $bitrate -gt 120 ]; then BR='-V5'; fi
if [ $bitrate -gt 145 ]; then BR='-V4'; fi
if [ $bitrate -gt 170 ]; then BR='-V3'; fi
if [ $bitrate -gt 180 ]; then BR='-V2'; fi
if [ $bitrate -gt 215 ]; then BR='-V1'; fi
if [ $bitrate -gt 230 ]; then BR='-V0'; fi
if [ $bitrate -gt 280 ]; then BR='-b320'; fi

echo "mono-izing file with detected bitrate '$bitrate': "
lame --silent $BR -m m --mp3input "" ""
0
отвечен Ian 2023-02-27 02:19

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх