Простой конвертер аудиофайлов в opus для эффективного хранения
- Rust 100%
| src | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| converter.toml.example | ||
| LICENSE | ||
| README.md | ||
converter
Рекурсивно конвертирует аудиофайлы в Opus через ffmpeg с сохранением метаданных, структуры директорий и обложек. Прямое назначение - сжатие аудиофайлов скачайнных с интернета в эффективный формат для хранения.
Программа считает что расширения содержат правдивую информацию о содержании файла, проверок на действительное качество файла не проверяется.
Программа создаёт файл log.txt в конечной директории с описанием каждого файла и количеством выданных ошибок.
Использование
converter [ОПЦИИ] [ВХОДНАЯ_ДИРЕКТОРИЯ] [ВЫХОДНАЯ_ДИРЕКТОРИЯ]
Если директории не указаны — входная по умолчанию ., выходная ./output.
Опции
| Опция | Назначение |
|---|---|
-t, --threads <N> |
Количество рабочих потоков (по умолчанию — число ядер CPU) |
-h, --help |
Показать справку |
Что делает
- Обходит все файлы во входной директории рекурсивно.
- Аудиофайлы конвертирует в Opus (
libopusчерез ffmpeg). - Неаудиофайлы копирует как есть.
- Файлы
.opusкопирует без перекодирования. - Сохраняет структуру поддиректорий.
- Пропускает файлы, уже находящиеся внутри выходной директории.
Битрейт
Настраивается в файле converter.toml в корне проекта:
[bitrate]
lossless = "160k"
lossy = "96k"
- lossless — для FLAC, WAV, ALAC, APE и т.д. (по умолчанию 160k)
- lossy — для MP3, AAC, OGG, M4A и т.д. (по умолчанию 96k)
Если файл converter.toml отсутствует, используются значения по умолчанию.
Обложки
- Извлекает встроенную обложку из аудиофайла (через ffmpeg) и встраивает в Opus (через opustags).
- Если встроенной обложки нет — ищет
folder.jpgилиcover.jpgрядом с входным файлом. - Если обложка больше 1000×1000 px — автоматически уменьшает до 1000×1000 (с сохранением пропорций).
cover.jpgсохраняется рядом с выходным.opusфайлом.
Логирование
- В консоль — через
env_logger(с временными метками). Уровень логирования:RUST_LOG=converter=debugдля более подробного вывода. - В файл
log.txtв выходной директории записываются все операции и количество ошибок в конце.
Требования
- ffmpeg (с поддержкой libopus)
- opustags
- Rust (для сборки)
Пример
# Конвертировать музыку из ~/Music в ~/Music-opus на 8 потоках
cargo run -- -t 8 ~/Music ~/Music-opus
Ограничения
- Не поддерживает вложенные обложки, отличные от JPEG (конвертация не выполняется, только копирование потока).