Итак, первая проблема заключается в обнаружении файлов, которые необходимо переместить.
Это можно сделать с помощьюgrep
:
grep -q -E '^>.*_(1?[0-9]|2[0-4])$'
grep -q -E '^>.*_(2[5-9]|[3-9][0-9]|[0-9]{3,})$'
Эти команды возвращали бы значение true, если бы входные данные содержали строку, совпадающую с указанными расширенными регулярными выражениями.
Выражение _(1?[0-9]|2[0-4])$
будет соответствовать любому положительному целому числу меньше 25, стоящему в конце строки после символа подчеркивания, а _(2[5-9]|[3-9][0-9]|[0-9]{3,})$
соответствует любому положительному целому числу больше или равному 25 в конце строки после символа подчеркивания. (при условии, что не существует нулевых -заполненных целых чисел, таких как002
). Мы также сопоставляем >
в начале строки. Опция -q
остановит grep
от фактического вывода всего, что (нас интересует только то, сможем ли мы найти одну из этих строк или нет ).
Для копирования файла первый grep
должен возвращать false , а второй grep
должен возвращать true .
Применение этого к каждому файлу каталога (в этом случае независимо от того, как файлы называются, поскольку вы ничего не сказали об этом):
for filename in./*; do
[ ! -f "$filename" ] && continue
if ! grep -q -E '^>.*_(1?[0-9]|2[0-4])$' "$filename" &&
grep -q -E '^>.*_(2[5-9]|[3-9][0-9]|[0-9]{3,})$' "$filename"
then
mv -i "$filename" /some/destination
fi
done
Это приведет к перемещению файлов, соответствующих требованиям, в некоторый каталог назначения по адресу /some/destination
.Параметр -i
для mv
заставит утилиту запрашивать подтверждение перед перезаписью уже существующего файла с тем же именем, что и перемещаемый файл.
Первый [ ! -f... ]
тест в цикле будет пропускать в каталоге все, что не является обычным файлом (или символической ссылкой на обычный файл ).
LoudGain кажется идеальным инструментом :https://github.com/Moonbase59/loudgain
It uses the well-known mp3gain commandline syntax but will never modify the actual audio data. Just what you ever wanted: The best of mp3gain, ReplayGain 2.0 and Linux combined.
Уменьшает усиление до -1 dBTP (вместо 0 dBTP, в соответствии с рекомендацией EBU ). Почти запас безопасности в случае, если дальнейший маршрут воспроизведения «только» понимает ReplayGain, но не имеет предотвращения отсечения
.wget https://raw.githubusercontent.com/Homebrew/install/master/install.sh
# first check what you get before install ;)
less install.sh
# press q and then install homebrew with:
/bin/bash -c install.sh
brew install Moonbase59/tap/loudgain
рекомендуемое использование для mp3:
loudgain -I3 -S -L -a -k -s e *.mp3
см.https://github.com/Moonbase59/loudgain/blob/master/docs/loudgain.1.md#recommendations
Взгляните на mp3gain , который (обратимо )изменяет коэффициент масштабирования в каждом кадре MP3 для регулировки громкости. Изменение файла MP3 таким образом не требует распаковки и повторного сжатия; звук будет таким же хорошим (или плохим ), как и оригинал.
Однако имейте в виду, что если исходные MP3-файлы, которые у вас есть, имеют низкое качество из-за низкого уровня усиления, вы ничего не можете сделать для улучшения этого (кроме создания новых файлов MP3 ). Так что, если низкий уровень усиления маскирует искажения, которые вы услышите при более высоких уровнях усиления, вам придется с этим смириться. Увеличение битрейта не поможет.