У меня есть некоторая музыкальная коллекция, и я хочу сортировать/фильтровать их легко согласно их критической частоте (реальная скорость передачи, обычно в kHz. Я раньше использовал, Выступают за показ мне эта информация, но Говорят, не обеспечивает возможности использовать его в терминале или для нескольких операций файлов. Я уже нашел некоторые пути, но все они просто перечисляют скорость передачи, в которой звуковой файл сохранен в Кбит/с, не фактической критической частоте в kHz, в котором я нуждаюсь. Я хочу найти, что простое решение фильтрует целое использование набора, например, удар, Python, существующий простой инструмент, и т.д. Вы знаете какое-либо решение?
Разъяснение: я не ищу скорость передачи или частоту дискретизации, я ищу сокращение частоты!
Я искал что-то подобное, так как я пытаюсь дедуплицировать крупный музыкальный архив, хотел бы сохранить файлы высшего качества, но не доверяю используемым скоростям передачи.
я нашел fakeflac, который походит на хорошее начало. Не позволяйте имени одурачить Вас, это не является определенным для FLAC, так как это преобразовывает данный файл в wav и воздействует на то использование сценария Python. Это сканирует вниз спектр частот, пока это не находит сокращение, на основе нескольких эвристики (125%-е увеличение величины через диапазон на 220 Гц, с более низкой величиной не выше, чем 110% из этого на уровне 44100 Гц).
Это выписывает "счет", который является, как далеко спектр частот, сокращение появляется (т.е. если требуемая частота составляет 44100 Гц, но это убегает на уровне 22050 Гц, счет будет 50).
я должен был играть с ним немного, чтобы заставить его работать, например, Я заменил sndfile-convert foo bar
ffmpeg -i foo bar
, но это очень просто и, кажется, что я после.
можно использовать fakeflac
в цикле для получения очков к набору файлов, затем отсортировать их использующий стандартные инструменты оболочки (sort
, cut
, и т.д.).
Не самое изящное из решений, имеет несколько недостатков, но здесь - то, что я получил:
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
. Наконец, вывод передается по каналу для сортировки команды, который виды численно на основе столбца 2 (число).
Большое ограничение - то, что это работает хорошо с тем же типом файлов, но если Вы смешиваетесь mp3
и wav
, затем Вы замечаете, что mp3 файлы перечисляют свою частоту как 44,1 кГц и который повреждает вид.
Демонстрационный вывод, который я имею, например:
***./test.wav| 8000|Hz
***./odeath.wav| 44100|Hz
***./Front_Center.wav| 48000|Hz