1

I have this command I need to run as a background task on my server:

sox some-audio-file.foo -c 1 -t wav - | wav2png -w -o some-audio-file.png /dev/stdin

But I already have ffmpeg custom-compiled with all the right codecs (which was an ordeal and a half) and I'd prefer to avoid installing sox and having to go through the same ordeal again.

So I'm wondering, could I pipe my audio to wav2png using ffmpeg instead? What would be the equivalent ffmpeg command? I've been Googling on this for a while and nothing I've tried is working.

2
  • What does this do ?
    – user9517
    Sep 2, 2014 at 5:50
  • wav2png produces an image representing the waveform of an audio file. The sox command decodes the file and puts it into an appropriate form for it to handle.
    – curtisdf
    Sep 2, 2014 at 12:16

1 Answer 1

1

Choose your pipe

Untested example:

ffmpeg -i audio.foo -ac 1 -f wav - | wav2png -o audio.png /dev/stdin

Alternatively you could use the UNIX pipe access protocol.

ffmpeg -i audio.foo -ac 1 -f wav pipe: | wav2png -o audio.png /dev/stdin

Notes

  • -ac 1 was added to downmix to mono since currently with wav2png the max of all channels is used, but this option may be superfluous.

  • You can use any type of input that contains audio and that ffmpeg can decode.

  • If you just want to output a specific channel use the -map_channel option (example).

  • Simply using - instead of /dev/stdin may work, but I didn't get to try.

Visualizing audio

If you would like to create a video of the waveform use the showwaves filter.

ffmpeg -i audio.foo -filter_complex \
"[0:a]showwaves=mode=line,format=yuv420p[v]" \
-map "[v]" -map 0:a -c:a copy output.mp4

Or use a combination of filters: screenshot of video visualizing music

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

From How to Encode Videos for YouTube and other Video Sharing Sites.

1
  • Hmmm, unfortunately neither of the pipe-to-wav2png options are working. wav2png produces a blank image with only a uniform background color and no waveform. Nice visuals though!
    – curtisdf
    Sep 21, 2014 at 15:01

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .