У меня есть музыкальная коллекция, и я хочу сортировать / фильтровать их легко в соответствии с их частотой отсечки (реальный битрейт, обычно в кГц. Я использовал Spek для показа мне эту информацию, но Spek не предоставляет никаких возможность использовать его в терминале или для нескольких операций с файлами. Я уже нашел несколько способов, но все они просто перечисляют скорость передачи битов, в которой аудиофайл сохраняется в kbps, а не фактическая частота отсечки в кГц, что я Мне нужно найти простое решение для фильтрации всей коллекции, например, bash, python, существующего простого инструмента и т. д. Знаете ли вы какое-либо решение?
Уточнение: я не ищу битрейт или выборку Я ищу прерывание частоты!
Не самый элегантный из решений, имеет несколько недостатков, но вот что я получил:
find . -type f -name "*.wav" -printf "***%p\n" -exec file {} \; | awk '/\*\*\*/{printf $0"|"};{gsub(/\,/,"");for(i=1;i<=NF;i++) if($i~/Hz/) printf " "$(i-1)"|"$i"\n" }' | sort --field-separator="|" --numeric -k 2
В основном мы используем команду find для поиска файлов с расширением «.wav» , внутри /my/audio/folder. Мы печатаем путь к каждому файлу, заполняя его тремя знаками подстановочных знаков и выполняем команду file для каждого из них. Выход stdout проходит через трубу к длинному коду awk, который считывает каждую строку; если строка имеет три звездочки - это имя файла, напечатайте его; если в строке, помещенной в строку, содержится Hz, мы печатаем число перед этим полем и само поле. Все напечатано таким образом, чтобы иметь выход в формате ***/path/to/file | number | (k)Hz. Наконец, вывод обрабатывается командой sort, которая сортируется численно на основе столбца 2 (число).
Большим ограничением является то, что он работает нормально с файлами того же типа, но если вы смешаете mp3 и wav, то вы заметите, что mp3-файлы отображают свою частоту как 44,1 кГц, и это разбивает сортировку.
Пример вывода, который у меня есть, например:
***./test.wav| 8000|Hz
***./odeath.wav| 44100|Hz
***./Front_Center.wav| 48000|Hz