Intereting Posts
PHP и JavaScript для динамических HTML-страниц Использование скобок в имени файла cookie – Почему PHP превращает его в массив? Показать изображение с помощью file_get_contents Копирование изображений с URL на сервер, удаление всех изображений после Получение одной строки только с MySQLi Выполняется ли выполнение php после того, как пользователь покидает страницу? PHP Firebird вставить blob-файл в базу данных apache внезапно прекратить работу eval () не возвращает результаты функции Обновление с версии Kohana 2 до последней версии 3.2 phpMyAdmin бесконечный цикл при попытке использовать phpMyAdmin из VistaPanel на ByetHost После отправки формы, когда в форме есть несколько вкладок, и на каждой вкладке есть вкладка таблицы (которая может добавить строку таблицы) $ _GET пуст, когда URL имеет переменные Как Doctrine 2 извлекает объекты без вызова конструктора объекта? Он не отображает видеоплееры для всех существующих видеороликов. получение переменных из STRING url в php

Генерация формы волны с использованием ffmpeg

Я пытаюсь создать изображение формы волны, используя ffmpeg.

Я успешно сделал изображение осциллограммы, однако это выглядит не очень красиво …

Я искал вокруг, чтобы попытаться создать образ, чтобы он выглядел лучше, однако я не смог найти никакой информации об этом или о каких-либо учебниках по этому вопросу.

Я использую PHP и shell_exec для создания формы волны.

Я знаю, что есть библиотека php, которая может это сделать, но из-за формата файла это длительный процесс.

Код, который я использую, выглядит следующим образом:

$command = 'convertvid\bin\ffmpeg -i Temp\\'.$file.' -y -lavfi showwavespic=split_channels=0:s='.$width.'x50 Temp\\'.$PNGFileName; shell_exec($command); 

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

Форма сигнала по умолчанию

введите описание изображения здесь

 ffmpeg -i stereo_input.foo -filter_complex showwavespic -frames:v 1 output.png 

Заметки

  • Обратите внимание на сегмент беззвучного звука в середине.

  • Цвета по умолчанию – красный (левый канал) и зеленый (правый канал) для стерео входа.

  • Цвет смешивается, когда каналы перекрываются.

  • Фон прозрачен.

  • Вы можете изменить цвета канала с помощью параметра colors , например "showwavespic=colors=blue|yellow" . См. Список допустимых имен цветов или используйте шестнадцатеричную нотацию, например #ffcc99 .

  • Если цвета по умолчанию белого и серого на черном фоне, ваш ffmpeg слишком стар. См. Страницу загрузки FFmpeg для ссылок на последние двоичные файлы ffmpeg .

  • Если вы получите Option 'colors' not found ваш ffmpeg будет слишком старым. См. Страницу загрузки FFmpeg для ссылок на последние двоичные файлы ffmpeg .

  • Дополнительную информацию см. В документации по фильтру showwavespic .

  • Если вы хотите, чтобы видео вместо изображения использовало фильтр showwaves .

Причудливый сигнал

введите описание изображения здесь

 ffmpeg -i input -filter_complex \ "[0:a]aformat=channel_layouts=mono, \ compand=gain=-6, \ showwavespic=s=600x120:colors=#9cf42f[fg]; \ color=s=600x120:color=#44582c, \ drawgrid=width=iw/10:height=ih/5:color=#9cf42f@0.1[bg]; \ [bg][fg]overlay=format=rgb,drawbox=x=(iw-w)/2:y=(ih-h)/2:w=iw:h=1:color=#9cf42f" \ -vframes 1 output.png 

Объяснение параметров

  1. aformat уменьшает аудио до моно. В противном случае по умолчанию стереофонический вход приведет к формированию формы сигнала с другим цветом для каждого канала (см. Выше приведенный выше пример формы волны ).

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

  3. showwavespic делает фактическую форму волны.

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

  5. drawgrid добавляет сетку поверх фона. Сетка не представляет ничего, а только для взглядов. Цвет сетки такой же, как цвет отвратительной волны ( #9cf42f ), но непрозрачность установлена ​​на 10% ( @0.1 ).

  6. overlay поместит [bg] (то, что я назвал filtergraph для фона) позади [fg] (форма волны).

  7. Наконец, drawbox сделает горизонтальную линию, поэтому любые немые области не так уродливы.

Фон изображения

Конечно, вы можете использовать изображение или видео вместо фона:

введите описание изображения здесь

 ffmpeg -i audio -i image -filter_complex \ "[1:v]scale=600:-1,crop=iw:120[bg]; \ [0:a]showwavespic=s=600x120:colors=cyan|aqua[fg]; \ [bg][fg]overlay" \ -q:v 3 showwavespic_bg.jpg