Как отсортировать звуковые файлы согласно их критической частоте (реальная скорость передачи) в kHz?

У меня есть некоторая музыкальная коллекция, и я хочу сортировать/фильтровать их легко согласно их критической частоте (реальная скорость передачи, обычно в kHz. Я раньше использовал, Выступают за показ мне эта информация, но Говорят, не обеспечивает возможности использовать его в терминале или для нескольких операций файлов. Я уже нашел некоторые пути, но все они просто перечисляют скорость передачи, в которой звуковой файл сохранен в Кбит/с, не фактической критической частоте в kHz, в котором я нуждаюсь. Я хочу найти, что простое решение фильтрует целое использование набора, например, удар, Python, существующий простой инструмент, и т.д. Вы знаете какое-либо решение?

Разъяснение: я не ищу скорость передачи или частоту дискретизации, я ищу сокращение частоты!

6
задан 31 October 2015 в 18:04

2 ответа

Я искал что-то подобное, так как я пытаюсь дедуплицировать крупный музыкальный архив, хотел бы сохранить файлы высшего качества, но не доверяю используемым скоростям передачи.

я нашел fakeflac, который походит на хорошее начало. Не позволяйте имени одурачить Вас, это не является определенным для FLAC, так как это преобразовывает данный файл в wav и воздействует на то использование сценария Python. Это сканирует вниз спектр частот, пока это не находит сокращение, на основе нескольких эвристики (125%-е увеличение величины через диапазон на 220 Гц, с более низкой величиной не выше, чем 110% из этого на уровне 44100 Гц).

Это выписывает "счет", который является, как далеко спектр частот, сокращение появляется (т.е. если требуемая частота составляет 44100 Гц, но это убегает на уровне 22050 Гц, счет будет 50).

я должен был играть с ним немного, чтобы заставить его работать, например, Я заменил sndfile-convert foo bar ffmpeg -i foo bar, но это очень просто и, кажется, что я после.

можно использовать fakeflac в цикле для получения очков к набору файлов, затем отсортировать их использующий стандартные инструменты оболочки (sort, cut, и т.д.).

2
ответ дан 23 November 2019 в 08:05

Не самое изящное из решений, имеет несколько недостатков, но здесь - то, что я получил:

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
1
ответ дан 23 November 2019 в 08:05

Другие вопросы по тегам:

Похожие вопросы: