Визуализация аудио в ffmpeg

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

Собственно говоря данный пример в основном относится к -filter_complex (он же -lavfi) но я также рассмотрю более общие вопросы использования ffmpeg. Собственно, все необходимо я разместил на GitHub. Итак, что понадобится:

ПО. Сам ffmpeg, imagemagick (делать прозрачный фон и не только), git (если нет). Debian (Ubuntu)

$ apt install -y ffmpeg imagemagick git

Собственно mp3 файл, лучше с метаданными, скрипт может вытаскивать текст и добавлять его в видео.

Картинка, в принципе для данного примера любое изображение диска.

Поставить mktrans. В README.md инструкция для создания прозрачного фона. Изменить размер картинки можно с помощью convert из imagemagick или самого ffmpeg.

Поставить пример git clone https://github.com/zirf0/music_visual.git.

Теперь заглянем внутрь

flr_show-freq-vol - текст фильтра

music_vision.sh - основной скрипт

valk500tr.png - картинка с диском (у меня 500x500 с прозрачным фоном)

wagner.gif - гифка к этой статье.

wagner_valkyries.mp3 - "Полет Валькирий" Вагнера

Начинаем разбирать фильтр

" [0:a]showfreqs=s=600x240:mode=line:colors=red|blue,pad=1920:1080:0:x=1000:y=350[vf];

[0:a]showvolume=p=1,scale=1280:40[vv]; [1:v]scale=500:500,rotate=a=0.4*t/2:ow=iw/1:oh=ow[disk];

[vf][disk]overlay=(W-w)-1300:(H-h)/2,scale=1920:1080[l1];

[l1][vv]overlay=x=700:y=800,scale=1920:1080[l2]; [l2]drawtext=fontfile=NimbusRoman-BoldItalic.otf:textfile=metadata.txt: fontcolor=white:fontsize=50:box=1:boxcolor=black@0.5:boxborderw=5:x=(w-text_w)-500:y=(h-text_h)-800, format=yuv420p[fin] "

Это текстовая строка, она вынесена из скрипта для удобства. Итак первая строка [0:a]...[vf] из аудиопотока создает видео [vf] (video frequency - это я так назвал, чтобы понятнее было). Следующая строка работает аналогично, но выход фильтра showvolume обозначен как [vv]. Дальше [1:v]...[disk] применяет фильтр rotate к нашей картинке (да [1:v] видеопоток), вывод обозначен как [disk]. Теперь накладываем на [vf] [disk], вывод обозначен как [l1] (layer 1). Аналогично работает и следующая строка, накладывая [vv] на [l1]. Последняя пара [l2] ..[fin] накладывает текст, который берет из файла metadata.txt.

Перейдем к скрипту, я разберу только значимые строки, остальные затруднений не должны вызвать.

data=$(ffprobe -i $mp3 2>&1 | egrep "artist|title") # get some data from mp3 metadada

#Uncomment len to get real duration

#len=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 $mp3 ) #duration of input, sec len=20 # for test only

В переменную data попадают подстроки из метаданных, они записываются в файл metadata.txt, который был упомянут выше. len это длительность mp3 в секундах, по умолчание основной механизм закомментирован и длина устанавливается в 20 секунд. Кстати метод определение длительности не совсем точный в теории, но работает.

enc="-c:v h264 -crf 23 -preset medium -tune film -b:v 3M -c:a aac -b:a 192k" #executing string

exe=$(echo "ffmpeg -i $mp3 -loop 1 -i $disk -y -lavfi $filter -ss 00:00:00 -to $len $enc -shortest -map '[fin]' -map 0:a $out")

В переменной enc стоят значения по умолчанию. Для YouTube можно уточнить тут. В переменной exe командная строка ffmpeg, тут находится и [fin] из фильтра. Важен ключ -loop 1 перед картинкой, понятно почему. Потоки должны всегда быть соединены, то есть каждый выход должен попадать на вход. Зачем столь странная система - сброс переменной в файл и его запуск? По историческим причинам, отлаживать легче.

Теперь самое главное. Вы можете запустить ./music_vision.sh и получить 20 секунд видео. Но прежде, чем создавать видео, ознакомьтесь с нижеследующими материалами:

Журнал "Tester's Life", нужны номера за апрель 2014 и май 2016, там много про ffmpeg русским по белому.

https://github.com/SonicField/sonic-field-video. Море примеров. Например такой вывод.

Много примеров с видео результатов.

Документация ffmpeg.

Google. Рекомендации для видео YouTube.

Источник: https://habr.com/ru/post/587742/


Интересные статьи

Интересные статьи

На волне интереса к Clubhouse, основателям которого все чаще приходится отвечать на критику, набирают популярность новые аудиосоцсети — Cappuccino, Audlist, Nibble и ряд ...
Нормальный вывод для ffmpeg Наверное, вы, как и я, слышали про ffmpeg, но боялись его использовать. Респект таким парням, программа целиком выполнена на C ( си, без # и ++ ). Несм...
Я давно знаком с Битрикс24, ещё дольше с 1С-Битрикс и, конечно же, неоднократно имел дела с интернет-магазинами которые работают на нём. Да, конечно это дорого, долго, местами неуклюже...
Один из ключевых сценариев работы в CRM это общение с клиентом в удобном для него канале. По почте, по телефону, по SMS или в мессенджере. Особенно выделяется WhatsApp — интеграцию с ...
Вообще Debugger Visualizers для обычного Visual Studio — это очень старая тема (статья 2009 года), но не очень популярная. В большинстве случаев принято учить сразу дебажить, пред...