Преобразование кучу MP3 в моно?
У меня есть куча стерео mp3-файлов, которые я хотел бы преобразовать в моно. Каков наилучший способ сделать это? Я предпочел бы что-то, что позволило бы пакетной обработке их. Я хочу сохранить качество как можно ближе к оригиналу. Мои файлы также находятся в разных битрейтах, поэтому я не хочу делать все файлы 320kpbs, когда некоторые из них только 128.
кроме того, есть ли быстрый способ увидеть, какие файлы стерео из всей моей библиотеки?
4 ответов
Ну есть несколько способов, но позвольте мне направлять вас к тем, которые на самом деле работают. Вы можете использовать Audacity, свободное доступное программное обеспечение для этого.
пожалуйста, посмотрите на это статья eHow о том, как конвертировать MP3 в моно.
преобразование из стерео в моно будет означать перекодирование, поэтому сохранение одной и той же скорости будет бессмысленным. На самом деле, преобразование 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-{}
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
дом на ответ, вы можете получить более портативное решение (без дополнительных зависимостей, без проблем с 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 "" ""
Другие вопросы audio-conversion batch mono mp3 stereo