пятница, 3 сентября 2021 г.

Пакетное преобразование аудиокниг mp3 в формат ogg с заданным битрейтом


Возникла необходимость уменьшения размера аудиокниг. Как правило, аудиокниги распространяются в формате mp3 с битрейтом 128 и более. Вследствие этого зачастую одно произведение может достигать размеров в среднем 500-600 Мб.

Экспериментальным образом выяснено, что если такие произведения преобразовать с формат ogg с битрейтом 16, который мне показался вполне достаточным для нормального прослушивания речи, то можно получить выигрыш в размерах произведений в несколько раз. Строго фиксированное значение указать сложно, но в среднем оно у меня достигало величин в 6-10, а то и более раз. В частности, конвертация 50-минутного произведения Альфреда Бестера "Кто-то там наверху меня любит", представленного исходным файлом mp3 128 кбит/с размером в 120 Мб позволила получить на выходе вполне комфортно воспринимаемый на слух файл ogg размером в 6,5 Мб.
 
Для преобразования вам понадобится пакет ffmpeg, который можно установить командой  sudo apt install -y ffmpeg   

Сама команда для преобразования имеет вид:
 
ffmpeg -i file.mp3 -b:a 16k -acodec libopus file.ogg
 
На первых порах через особое действие в правом контекстном меню оболочки XFCE она мной использовалась как действие для каждого файла с выводом уведомления о том, что файл ogg готов:

ffmpeg -i %f -b:a 16k -acodec libopus %f.ogg && zenity --width=130 --height=50 --info --text "\nogg ready" 2>/dev/null

Однако неудобство заключалось в том, что результирующие файлы имели расширение mp3.ogg, что приводило к необходимости переименования их расширения в ogg вручную, а также то, что исходные файлы mp3 также приходилоcь удалять вручную.

После мучительных поисков решения родился следующий сценарий, в ходе которого:

1) указывается папка с файлами mp3, которые необходимо преобразовать;

2) осуществляется поиск в указанной папке файлов mp3 и каждый найденный фал преобразовывается в формат ogg;

3) после преобразования исходные файл mp3 удаляются;

4) расширение файлов mp3.ogg приводится к виду ogg.

Текст сценария:

#!/bin/bash
dir=$(zenity --file-selection --directory)
find "$dir" -name "*.mp3" -exec ffmpeg -i {} -b:a 16k -acodec libopus {}.ogg \;
find "$dir" -name "*.mp3" -exec rm {} \;
find "$dir" -name '*.mp3.ogg' -exec sh -c 'mv "$0" "${0%.mp3.ogg}.ogg"' {} \;

В XFCE можно создать значок запуска, присвоив ему какую-либо картинку, например:


и запускать его через команду "Выполнить" правого контекстного меню мыши. Либо для такого сценария sh добавить на панель элемент "Запуск приложений", впоследствии указав в нём путь к файлу sh и отображаемый значок.

В процессе преобразования сценарий может осуществлять преобразование файлов не последовательно, а по ему одному известной  😀  очерёдности, что, впрочем, никак не влияет на функциональность. Ход процесса отображается в окне терминала:


Если sh запускался не по команде в окне терминала, а по кнопке запуска, то после завершения всех процессов окно терминала будет закрыто. В папке с файлами аудиокниги будут присутствовать только файлы ogg.

Комментариев нет:

Отправить комментарий