Простой конвертер аудиофайлов в opus для эффективного хранения
Find a file
2026-06-12 22:55:01 +03:00
src Бубубебебе 2026-06-12 22:55:01 +03:00
.gitignore Бубубебебе 2026-06-12 22:55:01 +03:00
Cargo.lock Бубубебебе 2026-06-12 22:55:01 +03:00
Cargo.toml Бубубебебе 2026-06-12 22:55:01 +03:00
converter.toml.example Бубубебебе 2026-06-12 22:55:01 +03:00
LICENSE Бубубебебе 2026-06-12 22:55:01 +03:00
README.md Бубубебебе 2026-06-12 22:55:01 +03:00

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 (конвертация не выполняется, только копирование потока).