У меня есть эта команда, которую мне нужно запустить в качестве фоновой задачи на моем сервере:
sox some-audio-file.foo -c 1 -t wav - | wav2png -w -o some-audio-file.png /dev/stdin
Но у меня уже есть ffmpeg
скомпилирован на заказ со всеми правильными кодеками (что было тяжелым испытанием), и я бы предпочел избежать установки sox
и снова пройти через то же самое испытание.
Мне интересно, могу ли я передать свой звук на wav2png
с помощью ffmpeg
вместо? Что было бы эквивалентом ffmpeg
команда? Я какое-то время гуглил об этом, и ничего, что я пробовал, не работает.
Непроверенный пример:
ffmpeg -i audio.foo -ac 1 -f wav - | wav2png -o audio.png /dev/stdin
В качестве альтернативы вы можете использовать Протокол доступа UNIX pipe.
ffmpeg -i audio.foo -ac 1 -f wav pipe: | wav2png -o audio.png /dev/stdin
-ac 1
был добавлен для понижающего микширования в моно, поскольку в настоящее время с wav2png
используется максимум всех каналов, но этот вариант может оказаться излишним.
Вы можете использовать любой тип входа, который содержит аудио и ffmpeg
может расшифровать.
Если вы просто хотите вывести определенный канал, используйте -map_channel
вариант (пример).
Просто используя -
вместо того /dev/stdin
может сработать, но я не пробовал.
Если вы хотите создать видео сигнала, используйте кнопку фильтр showwaves.
ffmpeg -i audio.foo -filter_complex \
"[0:a]showwaves=mode=line,format=yuv420p[v]" \
-map "[v]" -map 0:a -c:a copy output.mp4
Или используйте комбинацию фильтров:
ffmpeg -i input.mp3 -filter_complex \
"[0:a]avectorscope=s=640x518,pad=1280:720[vs]; \
[0:a]showspectrum=mode=separate:color=intensity:scale=cbrt:s=640x518[ss]; \
[0:a]showwaves=s=1280x202:mode=line[sw]; \
[vs][ss]overlay=w[bg]; \
[bg][sw]overlay=0:H-h,drawtext=fontfile=/usr/share/fonts/TTF/Vera.ttf:fontcolor=white:x=10:y=10:text='\"Song Title\" by Artist'[out]" \
-map "[out]" -map 0:a -c:v libx264 -preset fast -crf 18 -c:a copy output.mkv
Из Как кодировать видео для YouTube и других сайтов обмена видео.