Лю­бите­ли музыки час­то стал­кива­ются с необ­ходимостью навес­ти порядок в собс­твен­ной кол­лекции ауди­офай­лов. А если ауди­офай­лов очень мно­го, это прев­раща­ется в проб­лему. В сегод­няшней статье мы раз­берем спо­соб авто­мати­чес­кой кон­верта­ции и анно­тиро­вания ауди­офай­лов в Windows с помощью ути­литы FFmpeg и CMD-сце­нари­ев.

Нас­тупила вес­на, приб­лижа­ется лето, и хочет­ся про­водить сво­бод­ное вре­мя на при­роде, вды­хая све­жий воз­дух и слу­шая голоса птиц. Если же нас­кучит лес­ная идил­лия, всег­да мож­но раз­нооб­разить отдых любимой музыкаль­ной ком­позици­ей, ауди­окни­гой, кур­сами инос­тран­ного язы­ка или обще­обра­зова­тель­ными лек­циями. Замече­но, что ауди­опле­еры, будь то отдель­ные устрой­ства или при­ложе­ния для смар­тфо­на, гораз­до луч­ше работа­ют с ауди­окол­лекци­ями, фай­лы которых содер­жат све­дения об аль­бомах и тре­ках в них.

Ли­цен­зион­ные матери­алы, как пра­вило, соп­ровож­дают­ся все­ми необ­ходимы­ми атри­бута­ми. Но есть еще любитель­ские и дик­тофон­ные записи, оциф­ровки грам­плас­тинок и ауди­окас­сет, сво­бод­но рас­простра­няемые ком­позиции, которые надо упо­рядо­чить и под­писать. А еще желатель­но при­вес­ти парамет­ры фай­лов в соот­ветс­твие с хра­нящи­мися в них ауди­одан­ными. Нап­ример, оциф­рован­ную плас­тинку «Мелодия» с мар­киров­кой «Моно» и записью бар­дов­ских песен, исполняв­шихся пол­века назад на кон­церте в каком‑нибудь про­вин­циаль­ном доме куль­туры, мож­но сох­ранить в фор­мате FLAC для исто­рии, но нет никако­го прак­тичес­кого смыс­ла записы­вать ее на пор­татив­ный про­игры­ватель в сте­реофор­мате с час­тотой дис­кре­тиза­ции 48 кГц и ско­ростью потока 320 Кбит/с.

Для кон­верта­ции ауди­офай­лов и редак­тирова­ния их тегов есть мно­жес­тво прог­рамм, как плат­ных, так и сво­бод­но рас­простра­няемых, с интерфей­сами раз­личной сте­пени изя­щес­тва и удобс­тва. Но боль­шинс­тво из них — обо­лоч­ки вок­руг одно­го‑двух про­ектов с откры­тым исходным кодом, в которых как раз и реали­зова­на вся необ­ходимая фун­кци­ональ­ность. Как пра­вило, в осно­ве лежит ути­лита коман­дной стро­ки, обла­дающая широким набором воз­можнос­тей, а гра­фичес­кая обо­лоч­ка откры­вает дос­туп к их под­мно­жес­тву, отоб­ранно­му по прин­ципу решения отдель­ной поль­зователь­ской проб­лемы.

Не­дав­но я занимал­ся пакет­ной обра­бот­кой изоб­ражений, для чего исполь­зовал прог­рамму ImageMagick. И слу­чай­но обна­ружил, что в сос­тав ее дис­три­бути­ва вхо­дит ути­лита FFmpeg, которая, как извес­тно, уме­ет выпол­нять мно­жес­тво опе­раций над меди­афай­лами. Почему бы не вос­поль­зовать­ся ею для кон­верта­ции и осна­щения тегами фай­лов моей ауди­окол­лекции? Но запус­кать ути­литу коман­дной стро­ки и ука­зывать мно­жес­тво парамет­ров для каж­дого MP3-фай­ла доволь­но уто­митель­но, и оче­вид­но, что про­цесс надо авто­мати­зиро­вать.

Из все­го богато­го спек­тра интер­пре­тиру­емых язы­ков и сис­тем прог­рамми­рова­ния, с помощью которых мож­но было бы лег­ко реали­зовать эту затею, я оста­новил­ся на самом при­митив­ном инс­тру­мен­те — язы­ке сце­нари­ев коман­дно­го про­цес­сора Windows. Почему? Во‑пер­вых, он име­ется на любой Windows-плат­форме, от W2K до W11. Во‑вто­рых, он нап­рямую пред­назна­чен для авто­мати­зации рутин­ных опе­раций с фай­лами. А в‑треть­их, он име­ет встро­енную соп­роводи­тель­ную докумен­тацию — что­бы получить справ­ку, не при­дет­ся даже откры­вать бра­узер.

Итак, сфор­мулиру­ем задачу. Даны ауди­оаль­бомы, пред­став­ленные набора­ми ауди­офай­лов. Тре­бует­ся добавить к этим фай­лам изоб­ражение обложки аль­бома и опи­сатель­ных тегов из тек­сто­вого фай­ла, а так­же при необ­ходимос­ти кон­верти­ровать эти фай­лы в фор­мат MP3 с уста­нов­кой тре­буемых парамет­ров ауди­одан­ных. Для решения задачи попыта­емся исполь­зовать прог­рамму FFmpeg и язык сце­нари­ев коман­дной обо­лоч­ки CMD.EXE, пока кор­порация‑раз­работ­чик не отпра­вила его на свал­ку исто­рии вслед за Paint’ом.

 

Изучение возможностей FFmpeg

На­чать решение задачи я решил с изу­чения воз­можнос­тей FFmpeg в инте­ресу­ющей меня области. В том, что она спра­вит­ся с кон­верта­цией ауди­офай­лов из одно­го фор­мата в дру­гой, я поч­ти не сом­невал­ся. Но суме­ет ли она прик­репить изоб­ражение обложки и добавить информа­цион­ные теги в резуль­тиру­ющие фай­лы?

Мои сом­нения были раз­веяны стать­ей Сте­фана Шмит­ца «Получе­ние и уста­нов­ка метате­гов ID3 с помощью FFmpeg», в которой автор при­вел при­меры инте­ресу­ющих меня команд. Основная идея зак­люча­ется в том, что зна­чения тегов ука­зыва­ются прог­рамме FFmpeg в виде парамет­ров:

-metadata НазваниеТега="ЗначениеТега"

Бо­лее того, в статье име­ется при­мер исполь­зования тек­сто­вого фай­ла в качес­тве источни­ка тегов. К сожале­нию, для это­го нуж­но соз­давать отдель­ные тек­сто­вые фай­лы с тегами для каж­дого ауди­офай­ла, тог­да как гораз­до удоб­нее все све­дения о содер­жимом ауди­оаль­бома дер­жать в одном тек­сто­вом фай­ле.

Ука­зывать пол­ный путь к исполня­емо­му фай­лу FFmpeg в коман­дной стро­ке край­не неудоб­но. Обыч­но при уста­нов­ке прог­раммы пред­лага­ют вклю­чить путь в сис­темную перемен­ную окру­жения PATH, но я пред­почитаю ее не засорять. Вмес­то это­го мож­но помес­тить в пап­ку, уже при­сутс­тву­ющую в этой перемен­ной, коман­дный файл ffmpeg.cmd сле­дующе­го содер­жания:

@"%ProgramFiles%\ImageMagick-7.1.0-Q8\ffmpeg.exe" %*

Сим­вол @ подав­ляет эхо‑печать коман­дной стро­ки, а вмес­то сочета­ния %* при выпол­нении будут под­став­лены все парамет­ры, передан­ные сце­нарию ffmpeg.cmd. Таким обра­зом, исполь­зовать FFmpeg из коман­дной стро­ки для кон­верта­ции фай­ла SRC\sample.wav в TGT\sample.mp3 мож­но так:

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\audio.mp3. Вто­рая опция опре­деля­ет вто­рой поток, ее параметр 1 говорит, что надо исполь­зовать вто­рой ука­зан­ный с помощью опции -i источник — изоб­ражение из фай­ла SRC\cover.jpg.

Слияние файлов с аудиоданными и изображением в аудио- и видеопотоки файла-контейнера MP3
Сли­яние фай­лов с ауди­одан­ными и изоб­ражени­ем в аудио- и виде­опо­токи фай­ла‑кон­тей­нера MP3

По умол­чанию FFmpeg авто­мати­чес­ки кодиру­ет потоки в соот­ветс­твии со сво­ими пре­дус­танов­ками так, что­бы они отве­чали фор­мату выход­ного фай­ла (опре­деля­ется по рас­ширению). Нап­ример, аудио она кон­верти­рует кодеком LAME с час­тотой дис­кре­тиза­ции 44 100 Гц и ско­ростью потока 128 Кбит/с, а изоб­ражение пре­обра­зует в фор­мат PNG. Если манипу­ляции с обложкой еще мож­но прос­тить, то опи­сан­ные дей­ствия со зву­ком мелома­ны могут вос­при­нять как лич­ное оскор­бле­ние. К счастью, мож­но зап­ретить прог­рамме выпол­нять какие бы то ни было пре­обра­зова­ния, ука­зав в коман­дной стро­ке опцию -c copy. Или зап­ретить пре­обра­зовы­вать толь­ко аудио, кон­кре­тизи­ровав опцию так: -c:a copy.

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Подписаться
Уведомить о
3 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии