Я пытаюсь создать изображение формы волны, используя 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
aformat уменьшает аудио до моно. В противном случае по умолчанию стереофонический вход приведет к формированию формы сигнала с другим цветом для каждого канала (см. Выше приведенный выше пример формы волны ).
compand изменяет динамический диапазон звука, чтобы форма волны выглядела менее плоской. Это делает менее точное представление фактического звука, но может быть более визуально привлекательным.
showwavespic делает фактическую форму волны.
фильтр цветного источника используется, чтобы сделать цветной фон того же размера, что и форма волны.
drawgrid добавляет сетку поверх фона. Сетка не представляет ничего, а только для взглядов. Цвет сетки такой же, как цвет отвратительной волны ( #9cf42f
), но непрозрачность установлена на 10% ( @0.1
).
overlay поместит [bg]
(то, что я назвал filtergraph для фона) позади [fg]
(форма волны).
Наконец, 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