user12802: I have to create a video. Part of it involves "showing" a radio interview. Rather than just having a black screen and listening to the audio, I'd like to have a varying waveform on the screen and a caption.
Is there any free or cheap tool I can use that will do this?

If I ask a friend to do it, is there anything in the Adobe Creative Suite that can do the job?

user5161: Many music players have visualisers. Play the audio in one of them and use a screen-grabber to record the video.
You could also try to use gstreamer as described at http://www.vidarholen.net/contents/blog/?p=23
Another option is Sonic Candle, http://sourceforge.net/projects/soniccandle/ 

user12789: After reading the great answer from LordNeckbeard I went on created a small script to make a visualization with ffmpeg and the showspectrum filter.
I also added an upload option for myself to encode directly to my remote server that has a better connection than at home to upload big videos. It also uses the great script youtube-upload!
EDIT: uploading directly slows down the encoding process significantly!! 
Script
#!/bin/bash
# ffmpeg spectrum maker

action=$1

infile=$2

outfile=$3
upload_server="sftp://cloud"

upload_location="/home/master/videos/"

remote_command="youtube-upload --title=\"Remote_upload\" --privacy=\"private\" $upload_location$outfile"

#simple spectrum
filter1="showspectrum=s=1920x1080:slide=scroll:mode=combined:color=intensity:scale=cbrt:saturation=1:win_func=hann[tmp]"

#vertical mirror
filter2="[tmp]crop=iw:ih/2:0:ih/2-3,split[up][tmp];[tmp]vflip[down];[up][down]vstack[tmp]"

#horizontal mirror
filter3="[tmp]crop=iw/2:ih:iw/2:,split[left][tmp];[tmp]hflip[right];[left][right]hstack[tmp]"

#fisheye effect VERY SLOW!!! if used make change the size of the spectrum to (1920*11/10)x(1080*11/10) and use the crop filter below
filter4="[tmp]frei0r=filter_name=defish0r:filter_params=1.5|n[tmp]"

#make sure the resolution has the desired size
filter5="[tmp]crop=1920:1080"

#pass the stream to the output for ffplay
testpass="[tmp]copy[out0]"


vcodec="-codec:v libx264 -pix_fmt yuv420p -tune grain -crf 21 -preset medium -bf 2 -flags +cgop -r 25"

acodec="-codec:a libfdk_aac -b:a 128k -movflags +faststart"

#acodec="-codec:a copy"

extraflags="-movflags +faststart "


if [ "$action" = "test" ]
then
        ffplay -f lavfi "amovie=$infile,asplit[a][out1];[a]$filter1;$filter2;$filter3;$testpass"
fi

if [ "$action" = "make" ]
then
        ffmpeg -i "$infile" -filter_complex "[0:a]$filter1;$filter2;$filter3" -map [tmp] -map 0:a $vcodec $acodec $extraflags "$outfile"
fi
if [ "$action" = "upload" ]
then
        ffmpeg -i "$infile" -filter_complex "[0:a]$filter1;$filter2;$filter3" -map [tmp] -map 0:a $vcodec $acodec $extraflags "$upload_server$upload_location$outfile"
        ssh cloud $remote_command
fi
exit



user-1: I understood your question quite well. If you are trying to make a waveform pattern that moves according to the pitch and bass of your audio, then you can try this link.
http://www.videocopilot.net/tutorial/audio_to_animation/
Adobe After effects lets you do it easily. You can play along with the particle effects to get a more solid looking waveform.
Good luck!

user-1: Adobe After Effects has a visualizer, see
There are also plugins such as here for Photoshop.
Good luck with your project.

user1760: You can use ffmpeg to create video from audio using several filters.

ahistogram
Convert input audio to a video output, displaying the volume histogram.

ffmpeg
ffmpeg -i input.flac -filter_complex \
"[0:a]ahistogram,format=yuv420p[v]" \
-map "[v]" -map 0:a output.mp4

ffplay
ffplay -f lavfi "amovie=input.flac, asplit [a][out1]; [a] ahistogram [out0]"

See the ahistogram documentation for more options and examples.

aphasemeter
Convert input audio to a video output, displaying the audio phase.

ffmpeg
ffmpeg -i input.wav -filter_complex \
"[0:a]aphasemeter=s=1280x720:mpc=cyan,format=yuv420p[v]" \
-map "[v]" -map 0:a output.mp4

ffplay
ffplay -f lavfi "amovie=input.wav, asplit [a][out1]; [a] aphasemeter=s=1280x720:mpc=cyan [out0]"

See the aphasemeter documentation for more options and examples.

avectorscope

Convert input audio to a video output, representing the audio vector scope. 
ffmpeg
ffmpeg -i input.mp3 -filter_complex \
"[0:a]avectorscope=s=1280x720,format=yuv420p[v]" \
-map "[v]" -map 0:a output.mp4

ffplay
ffplay -f lavfi "amovie=input.mp3, asplit [a][out1]; \
[a] avectorscope=zoom=1.3:rc=2:gc=200:bc=10:rf=1:gf=8:bf=7 [out0]"

See the avectorscope documentation for more options and examples.

showcqt

Convert input audio to a video output representing frequency spectrum with musical tone scale.
ffmpeg
ffmpeg -i input.mp4 -filter_complex \
"[0:a]showcqt,format=yuv420p[v]" \
-map "[v]" -map 0:a output.mp4

ffplay
ffplay -f lavfi "amovie=input.mp4, asplit [a][out1]; [a] showcqt [out0]"

See the showcqt documentation for more options and examples.

showfreqs
Convert input audio to video output representing the audio power spectrum. Audio amplitude is on Y-axis while frequency is on X-axis. 

ffmpeg
ffmpeg -i input.mp4 -filter_complex \
"[0:a]showfreqs=mode=line:fscale=log,format=yuv420p[v]" \
-map "[v]" -map 0:a output.mp4

ffplay
ffplay -f lavfi "amovie=input.mp4, asplit [a][out1]; [a]  showfreqs=mode=line:fscale=log [out0]"

See the showfreqs documentation for more options and examples.

showspectrum

Convert input audio to a video output, representing the audio frequency spectrum. 
ffmpeg
ffmpeg -i input.oga -filter_complex \
"[0:a]showspectrum=s=1280x720,format=yuv420p[v]" \
-map "[v]" -map 0:a output.mp4

ffplay
ffplay -f lavfi "amovie=input.oga, asplit [a][out1]; \
[a] showspectrum=mode=separate:color=intensity:slide=1:scale=cbrt [out0]"

See the showspectrum documentation for more options and examples.

showwaves

Convert input audio to a video output, representing the samples waves. 
ffmpeg
ffmpeg -i input.m4a -filter_complex \
"[0:a]showwaves=s=1280x720:mode=line:rate=25,format=yuv420p[v]" \
-map "[v]" -map 0:a output.mp4

ffplay
ffplay -f lavfi "amovie=input.m4a, asplit [a][out1]; [a] showwaves [out0]"

See the showwaves documentation for more options and examples.

showvolume

Convert input audio volume to a video output.
ffmpeg
ffmpeg -i input.mka -filter_complex \
"[0:a]showvolume=f=1:b=4:w=720:h=68,format=yuv420p[vid]" \
-map "[vid]" -map 0:a output.mp4

ffplay
ffplay -f lavfi "amovie=input.mka, asplit [a][out1]; [a] showvolume=f=255:b=4:w=720:h=68 [out0]"

See the showvolume documentation for more options and examples.

Notes

See FFmpeg Wiki: H.264 Encoding Guide for more detailed information regarding output quality.
format=yuv420p makes sure that libx264 uses a pixel format that is compatible with crappy players like QuickTime.
Instead of re-encoding by default, you can use -c:a copy to stream copy the audio if your output container format supports the audio format. Think of stream copying (re-muxing) like a copy and paste – no re-encoding.


Get ffmpeg
You should always use a recent version since development is very active. Links to builds of ffmpeg for Windows, OS X, and Linux are available on the FFmpeg Download page. Or you can follow a step-by-step guide to compile ffmpeg.

12802: <p>I have to create a video. Part of it involves "showing" a radio interview. Rather than just having a black screen and listening to the audio, I'd like to have a varying waveform on the screen and a caption.</p>

<p>Is there any free or cheap tool I can use that will do this?</p>

<hr>

<p><em>If I ask a friend to do it, is there anything in the Adobe Creative Suite that can do the job?</em></p>
 5161: <p>Many music players have visualisers. Play the audio in one of them and use a screen-grabber to record the video.</p>

<p>You could also try to use gstreamer as described at <a href="http://www.vidarholen.net/contents/blog/?p=23" rel="nofollow">http://www.vidarholen.net/contents/blog/?p=23</a></p>

<p>Another option is Sonic Candle, <a href="http://sourceforge.net/projects/soniccandle/" rel="nofollow">http://sourceforge.net/projects/soniccandle/</a> </p>
 12789: <p>After reading the great answer from LordNeckbeard I went on created a small script to make a visualization with ffmpeg and the showspectrum filter.
I also added an upload option for myself to encode directly to my remote server that has a better connection than at home to upload big videos. It also uses the great script <a href="https://github.com/tokland/youtube-upload" rel="nofollow">youtube-upload</a>!</p>

<p><strong>EDIT:</strong> uploading directly slows down the encoding process significantly!! </p>

<h1>Script</h1>

<pre><code>#!/bin/bash
# ffmpeg spectrum maker

action=$1

infile=$2

outfile=$3
upload_server="sftp://cloud"

upload_location="/home/master/videos/"

remote_command="youtube-upload --title=\"Remote_upload\" --privacy=\"private\" $upload_location$outfile"

#simple spectrum
filter1="showspectrum=s=1920x1080:slide=scroll:mode=combined:color=intensity:scale=cbrt:saturation=1:win_func=hann[tmp]"

#vertical mirror
filter2="[tmp]crop=iw:ih/2:0:ih/2-3,split[up][tmp];[tmp]vflip[down];[up][down]vstack[tmp]"

#horizontal mirror
filter3="[tmp]crop=iw/2:ih:iw/2:,split[left][tmp];[tmp]hflip[right];[left][right]hstack[tmp]"

#fisheye effect VERY SLOW!!! if used make change the size of the spectrum to (1920*11/10)x(1080*11/10) and use the crop filter below
filter4="[tmp]frei0r=filter_name=defish0r:filter_params=1.5|n[tmp]"

#make sure the resolution has the desired size
filter5="[tmp]crop=1920:1080"

#pass the stream to the output for ffplay
testpass="[tmp]copy[out0]"


vcodec="-codec:v libx264 -pix_fmt yuv420p -tune grain -crf 21 -preset medium -bf 2 -flags +cgop -r 25"

acodec="-codec:a libfdk_aac -b:a 128k -movflags +faststart"

#acodec="-codec:a copy"

extraflags="-movflags +faststart "


if [ "$action" = "test" ]
then
        ffplay -f lavfi "amovie=$infile,asplit[a][out1];[a]$filter1;$filter2;$filter3;$testpass"
fi

if [ "$action" = "make" ]
then
        ffmpeg -i "$infile" -filter_complex "[0:a]$filter1;$filter2;$filter3" -map [tmp] -map 0:a $vcodec $acodec $extraflags "$outfile"
fi
if [ "$action" = "upload" ]
then
        ffmpeg -i "$infile" -filter_complex "[0:a]$filter1;$filter2;$filter3" -map [tmp] -map 0:a $vcodec $acodec $extraflags "$upload_server$upload_location$outfile"
        ssh cloud $remote_command
fi
exit
</code></pre>

<p></p>
 -1: <p>I understood your question quite well. If you are trying to make a waveform pattern that moves according to the pitch and bass of your audio, then you can try this link.</p>

<p><a href="http://www.videocopilot.net/tutorial/audio_to_animation/" rel="nofollow">http://www.videocopilot.net/tutorial/audio_to_animation/</a></p>

<p>Adobe After effects lets you do it easily. You can play along with the particle effects to get a more solid looking waveform.</p>

<p>Good luck!</p>
 -1: <p>Adobe After Effects has a visualizer, <a href="http://www.youtube.com/watch?v=YglOeu3-DYE">see</a></p>

<p>There are also plugins such as <a href="http://softwaresolution.informer.com/d/Photoshop_Visualizer_Plugin">here</a> for Photoshop.</p>

<p>Good luck with your project.</p>
 1760: <p>You can use <code>ffmpeg</code> to create video from audio using several filters.</p>

<hr>

<h1><a href="https://ffmpeg.org/ffmpeg-filters.html#ahistogram" rel="noreferrer">ahistogram</a></h1>

<p>Convert input audio to a video output, displaying the volume histogram.</p>

<p><a href="https://i.stack.imgur.com/VO0x1.jpg" rel="noreferrer"><img src="https://i.stack.imgur.com/VO0x1.jpg" alt="ahistogram"></a></p>

<p><strong><code>ffmpeg</code></strong></p>

<pre><code>ffmpeg -i input.flac -filter_complex \
"[0:a]ahistogram,format=yuv420p[v]" \
-map "[v]" -map 0:a output.mp4
</code></pre>

<p><strong><code>ffplay</code></strong></p>

<pre><code>ffplay -f lavfi "amovie=input.flac, asplit [a][out1]; [a] ahistogram [out0]"
</code></pre>

<p>See the <a href="https://ffmpeg.org/ffmpeg-filters.html#ahistogram" rel="noreferrer"><code>ahistogram</code></a> documentation for more options and examples.</p>

<hr>

<h1><a href="http://ffmpeg.org/ffmpeg-filters.html#aphasemeter" rel="noreferrer">aphasemeter</a></h1>

<p>Convert input audio to a video output, displaying the audio phase.</p>

<p><a href="https://i.stack.imgur.com/vsDD6.jpg" rel="noreferrer"><img src="https://i.stack.imgur.com/vsDD6.jpg" alt="aphasemeter"></a></p>

<p><strong><code>ffmpeg</code></strong></p>

<pre><code>ffmpeg -i input.wav -filter_complex \
"[0:a]aphasemeter=s=1280x720:mpc=cyan,format=yuv420p[v]" \
-map "[v]" -map 0:a output.mp4
</code></pre>

<p><strong><code>ffplay</code></strong></p>

<pre><code>ffplay -f lavfi "amovie=input.wav, asplit [a][out1]; [a] aphasemeter=s=1280x720:mpc=cyan [out0]"
</code></pre>

<p>See the <a href="http://ffmpeg.org/ffmpeg-filters.html#aphasemeter" rel="noreferrer"><code>aphasemeter</code></a> documentation for more options and examples.</p>

<hr>

<h1><a href="https://ffmpeg.org/ffmpeg-filters.html#avectorscope" rel="noreferrer">avectorscope</a></h1>

<p><img src="https://i.stack.imgur.com/yAPxt.jpg" alt="avectorscope filter"></p>

<p>Convert input audio to a video output, representing the audio vector scope. </p>

<p><strong><code>ffmpeg</code></strong></p>

<pre><code>ffmpeg -i input.mp3 -filter_complex \
"[0:a]avectorscope=s=1280x720,format=yuv420p[v]" \
-map "[v]" -map 0:a output.mp4
</code></pre>

<p><strong><code>ffplay</code></strong></p>

<pre><code>ffplay -f lavfi "amovie=input.mp3, asplit [a][out1]; \
[a] avectorscope=zoom=1.3:rc=2:gc=200:bc=10:rf=1:gf=8:bf=7 [out0]"
</code></pre>

<p>See the <a href="https://ffmpeg.org/ffmpeg-filters.html#avectorscope" rel="noreferrer"><code>avectorscope</code></a> documentation for more options and examples.</p>

<hr>

<h1><a href="https://ffmpeg.org/ffmpeg-filters.html#showcqt" rel="noreferrer">showcqt</a></h1>

<p><img src="https://i.stack.imgur.com/MtKy2.jpg" alt="showcqt filter"></p>

<p>Convert input audio to a video output representing frequency spectrum with musical tone scale.</p>

<p><strong><code>ffmpeg</code></strong></p>

<pre><code>ffmpeg -i input.mp4 -filter_complex \
"[0:a]showcqt,format=yuv420p[v]" \
-map "[v]" -map 0:a output.mp4
</code></pre>

<p><strong><code>ffplay</code></strong></p>

<pre><code>ffplay -f lavfi "amovie=input.mp4, asplit [a][out1]; [a] showcqt [out0]"
</code></pre>

<p>See the <a href="https://ffmpeg.org/ffmpeg-filters.html#showcqt" rel="noreferrer"><code>showcqt</code></a> documentation for more options and examples.</p>

<hr>

<h1><a href="https://ffmpeg.org/ffmpeg-filters.html#showfreqs" rel="noreferrer">showfreqs</a></h1>

<p>Convert input audio to video output representing the audio power spectrum. Audio amplitude is on Y-axis while frequency is on X-axis. </p>

<p><a href="https://i.stack.imgur.com/L6wnp.png" rel="noreferrer"><img src="https://i.stack.imgur.com/L6wnp.png" alt="showfreqs"></a></p>

<p><strong><code>ffmpeg</code></strong></p>

<pre><code>ffmpeg -i input.mp4 -filter_complex \
"[0:a]showfreqs=mode=line:fscale=log,format=yuv420p[v]" \
-map "[v]" -map 0:a output.mp4
</code></pre>

<p><strong><code>ffplay</code></strong></p>

<pre><code>ffplay -f lavfi "amovie=input.mp4, asplit [a][out1]; [a]  showfreqs=mode=line:fscale=log [out0]"
</code></pre>

<p>See the <a href="https://ffmpeg.org/ffmpeg-filters.html#showfreqs" rel="noreferrer"><code>showfreqs</code></a> documentation for more options and examples.</p>

<hr>

<h1><a href="https://ffmpeg.org/ffmpeg-filters.html#showspectrum" rel="noreferrer">showspectrum</a></h1>

<p><img src="https://i.stack.imgur.com/WG1Dy.jpg" alt="showspectrum image"></p>

<p>Convert input audio to a video output, representing the audio frequency spectrum. </p>

<p><strong><code>ffmpeg</code></strong></p>

<pre><code>ffmpeg -i input.oga -filter_complex \
"[0:a]showspectrum=s=1280x720,format=yuv420p[v]" \
-map "[v]" -map 0:a output.mp4
</code></pre>

<p><strong><code>ffplay</code></strong></p>

<pre><code>ffplay -f lavfi "amovie=input.oga, asplit [a][out1]; \
[a] showspectrum=mode=separate:color=intensity:slide=1:scale=cbrt [out0]"
</code></pre>

<p>See the <a href="https://ffmpeg.org/ffmpeg-filters.html#showspectrum" rel="noreferrer"><code>showspectrum</code></a> documentation for more options and examples.</p>

<hr>

<h1><a href="https://ffmpeg.org/ffmpeg-filters.html#showwaves" rel="noreferrer">showwaves</a></h1>

<p><img src="https://i.stack.imgur.com/MFJ4J.png" alt="showwaves filter"></p>

<p>Convert input audio to a video output, representing the samples waves. </p>

<p><strong><code>ffmpeg</code></strong></p>

<pre><code>ffmpeg -i input.m4a -filter_complex \
"[0:a]showwaves=s=1280x720:mode=line:rate=25,format=yuv420p[v]" \
-map "[v]" -map 0:a output.mp4
</code></pre>

<p><strong><code>ffplay</code></strong></p>

<pre><code>ffplay -f lavfi "amovie=input.m4a, asplit [a][out1]; [a] showwaves [out0]"
</code></pre>

<p>See the <a href="https://ffmpeg.org/ffmpeg-filters.html#showwaves" rel="noreferrer"><code>showwaves</code></a> documentation for more options and examples.</p>

<hr>

<h1><a href="http://ffmpeg.org/ffmpeg-filters.html#showvolume" rel="noreferrer">showvolume</a></h1>

<p><a href="https://i.stack.imgur.com/Hv3Og.png" rel="noreferrer"><img src="https://i.stack.imgur.com/Hv3Og.png" alt="showvolume filter"></a></p>

<p>Convert input audio volume to a video output.</p>

<p><strong><code>ffmpeg</code></strong></p>

<pre><code>ffmpeg -i input.mka -filter_complex \
"[0:a]showvolume=f=1:b=4:w=720:h=68,format=yuv420p[vid]" \
-map "[vid]" -map 0:a output.mp4
</code></pre>

<p><strong><code>ffplay</code></strong></p>

<pre><code>ffplay -f lavfi "amovie=input.mka, asplit [a][out1]; [a] showvolume=f=255:b=4:w=720:h=68 [out0]"
</code></pre>

<p>See the <a href="http://ffmpeg.org/ffmpeg-filters.html#showvolume" rel="noreferrer"><code>showvolume</code></a> documentation for more options and examples.</p>

<hr>

<h2>Notes</h2>

<ul>
<li><p>See <a href="https://trac.ffmpeg.org/wiki/Encode/H.264" rel="noreferrer">FFmpeg Wiki: H.264 Encoding Guide</a> for more detailed information regarding output quality.</p></li>
<li><p><code>format=yuv420p</code> makes sure that libx264 uses a pixel format that is compatible with crappy players like QuickTime.</p></li>
<li><p>Instead of re-encoding by default, you can use <code>-c:a copy</code> to <a href="https://ffmpeg.org/ffmpeg.html#Stream-copy" rel="noreferrer">stream copy</a> the audio if your output container format supports the audio format. Think of stream copying (re-muxing) like a copy and paste – no re-encoding.</p></li>
</ul>

<hr>

<h2>Get <code>ffmpeg</code></h2>

<p>You should always use a recent version since development is very active. Links to builds of <code>ffmpeg</code> for Windows, OS X, and Linux are available on the <a href="https://ffmpeg.org/download.html" rel="noreferrer">FFmpeg Download</a> page. Or you can follow a step-by-step <a href="http://trac.ffmpeg.org/wiki/CompilationGuide" rel="noreferrer">guide to compile <code>ffmpeg</code></a>.</p>
