Содержание статьи
Наступила весна, приближается лето, и хочется проводить свободное время на природе, вдыхая свежий воздух и слушая голоса птиц. Если же наскучит лесная идиллия, всегда можно разнообразить отдых любимой музыкальной композицией, аудиокнигой, курсами иностранного языка или общеобразовательными лекциями. Замечено, что аудиоплееры, будь то отдельные устройства или приложения для смартфона, гораздо лучше работают с аудиоколлекциями, файлы которых содержат сведения об альбомах и треках в них.
Лицензионные материалы, как правило, сопровождаются всеми необходимыми атрибутами. Но есть еще любительские и диктофонные записи, оцифровки грампластинок и аудиокассет, свободно распространяемые композиции, которые надо упорядочить и подписать. А еще желательно привести параметры файлов в соответствие с хранящимися в них аудиоданными. Например, оцифрованную пластинку «Мелодия» с маркировкой «Моно» и записью бардовских песен, исполнявшихся полвека назад на концерте в каком‑нибудь провинциальном доме культуры, можно сохранить в формате FLAC для истории, но нет никакого практического смысла записывать ее на портативный проигрыватель в стереоформате с частотой дискретизации 48 кГц и скоростью потока 320 Кбит/с.
Для конвертации аудиофайлов и редактирования их тегов есть множество программ, как платных, так и свободно распространяемых, с интерфейсами различной степени изящества и удобства. Но большинство из них — оболочки вокруг одного‑двух проектов с открытым исходным кодом, в которых как раз и реализована вся необходимая функциональность. Как правило, в основе лежит утилита командной строки, обладающая широким набором возможностей, а графическая оболочка открывает доступ к их подмножеству, отобранному по принципу решения отдельной пользовательской проблемы.
Недавно я занимался пакетной обработкой изображений, для чего использовал программу ImageMagick. И случайно обнаружил, что в состав ее дистрибутива входит утилита FFmpeg, которая, как известно, умеет выполнять множество операций над медиафайлами. Почему бы не воспользоваться ею для конвертации и оснащения тегами файлов моей аудиоколлекции? Но запускать утилиту командной строки и указывать множество параметров для каждого MP3-файла довольно утомительно, и очевидно, что процесс надо автоматизировать.
Из всего богатого спектра интерпретируемых языков и систем программирования, с помощью которых можно было бы легко реализовать эту затею, я остановился на самом примитивном инструменте — языке сценариев командного процессора Windows. Почему? Во‑первых, он имеется на любой Windows-платформе, от W2K до W11. Во‑вторых, он напрямую предназначен для автоматизации рутинных операций с файлами. А в‑третьих, он имеет встроенную сопроводительную документацию — чтобы получить справку, не придется даже открывать браузер.
Итак, сформулируем задачу. Даны аудиоальбомы, представленные наборами аудиофайлов. Требуется добавить к этим файлам изображение обложки альбома и описательных тегов из текстового файла, а также при необходимости конвертировать эти файлы в формат MP3 с установкой требуемых параметров аудиоданных. Для решения задачи попытаемся использовать программу FFmpeg и язык сценариев командной оболочки CMD.
, пока корпорация‑разработчик не отправила его на свалку истории вслед за Paint’ом.
Изучение возможностей FFmpeg
Начать решение задачи я решил с изучения возможностей FFmpeg в интересующей меня области. В том, что она справится с конвертацией аудиофайлов из одного формата в другой, я почти не сомневался. Но сумеет ли она прикрепить изображение обложки и добавить информационные теги в результирующие файлы?
Мои сомнения были развеяны статьей Стефана Шмитца «Получение и установка метатегов ID3 с помощью FFmpeg», в которой автор привел примеры интересующих меня команд. Основная идея заключается в том, что значения тегов указываются программе FFmpeg в виде параметров:
-metadata НазваниеТега="ЗначениеТега"
Более того, в статье имеется пример использования текстового файла в качестве источника тегов. К сожалению, для этого нужно создавать отдельные текстовые файлы с тегами для каждого аудиофайла, тогда как гораздо удобнее все сведения о содержимом аудиоальбома держать в одном текстовом файле.
Указывать полный путь к исполняемому файлу FFmpeg в командной строке крайне неудобно. Обычно при установке программы предлагают включить путь в системную переменную окружения PATH
, но я предпочитаю ее не засорять. Вместо этого можно поместить в папку, уже присутствующую в этой переменной, командный файл ffmpeg.
следующего содержания:
@"%ProgramFiles%\ImageMagick-7.1.0-Q8\ffmpeg.exe" %*
Символ @
подавляет эхо‑печать командной строки, а вместо сочетания %*
при выполнении будут подставлены все параметры, переданные сценарию ffmpeg.
. Таким образом, использовать FFmpeg из командной строки для конвертации файла SRC\
в TGT\
можно так:
ffmpeg.cmd -i SRC\sample.wav TGT\sample.mp3
Ответ на вопрос, можно ли с помощью FFmpeg снабдить MP3-файл изображением обложки, был практически моментально получен в поисковой системе. Оказалось, что с точки зрения FFmpeg изображение обложки является для MP3-файла видеопотоком и, чтобы склеить его с аудиоданными, надо воспользоваться командой вида
ffmpeg -i SRC\audio.mp3 -i SRC\cover.jpg -map 0 -map 1 -id3v2_version 3 -metadata:s:v title="Album cover" TGT\audio.mp3
С помощью опций -map
источники данных из входных файлов отображаются в потоки выходного файла. Первая опция определяет первый поток, ее параметр 0
говорит о том, что надо использовать первый указанный с помощью опции -i
источник, в приведенном примере это аудиоданные из файла SRC\
. Вторая опция определяет второй поток, ее параметр 1
говорит, что надо использовать второй указанный с помощью опции -i
источник — изображение из файла SRC\
.
По умолчанию FFmpeg автоматически кодирует потоки в соответствии со своими предустановками так, чтобы они отвечали формату выходного файла (определяется по расширению). Например, аудио она конвертирует кодеком LAME с частотой дискретизации 44 100 Гц и скоростью потока 128 Кбит/с, а изображение преобразует в формат PNG. Если манипуляции с обложкой еще можно простить, то описанные действия со звуком меломаны могут воспринять как личное оскорбление. К счастью, можно запретить программе выполнять какие бы то ни было преобразования, указав в командной строке опцию -c
. Или запретить преобразовывать только аудио, конкретизировав опцию так: -c:
.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»