Answers:
您可以使用ffmpeg
多个过滤器从音频创建视频。
将输入音频转换为视频输出,显示音量直方图。
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]"
请参阅ahistogram
文档以获取更多选项和示例。
将输入音频转换为视频输出,显示音频相位。
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]"
请参阅aphasemeter
文档以获取更多选项和示例。
将输入音频转换为视频输出,代表音频矢量范围。
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]"
请参阅avectorscope
文档以获取更多选项和示例。
将输入音频转换为代表带有音乐音阶的频谱的视频输出。
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]"
请参阅showcqt
文档以获取更多选项和示例。
将输入音频转换为代表音频功率谱的视频输出。音频幅度在Y轴上,而频率在X轴上。
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]"
请参阅showfreqs
文档以获取更多选项和示例。
将输入音频转换为代表音频频谱的视频输出。
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]"
请参阅showspectrum
文档以获取更多选项和示例。
将输入音频转换为视频输出,代表样本波。
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]"
请参阅showwaves
文档以获取更多选项和示例。
将输入音频音量转换为视频输出。
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]"
请参阅showvolume
文档以获取更多选项和示例。
有关输出质量的更多详细信息,请参见FFmpeg Wiki:H.264编码指南。
format=yuv420p
确保libx264使用的像素格式与QuickTime等糟糕的播放器兼容。
而不是重新编码默认情况下,你可以使用-c:a copy
到流拷贝音频,如果你的输出容器格式支持的音频格式。将流复制(重新混合)视为复制和粘贴,而无需重新编码。
ffmpeg
由于开发非常活跃,因此应始终使用最新版本。FFmpeg下载页面ffmpeg
上提供了Windows,OS X和Linux 版本的链接。或者,您可以按照分步指南进行编译。ffmpeg
我很了解你的问题。如果您要创建一个根据音频的音高和低音移动的波形模式,则可以尝试使用此链接。
http://www.videocopilot.net/tutorial/audio_to_animation/
Adobe After Effects使您可以轻松做到这一点。您可以与粒子效果一起播放,以获得更立体的波形。
祝好运!
许多音乐播放器都有可视化器。播放其中的音频,然后使用抓屏器录制视频。
您也可以尝试使用http://www.vidarholen.net/contents/blog/?p=23中所述的gstreamer
另一种选择是Sonic Candle,http://sourceforge.net/projects/soniccandle/
在阅读了LordNeckbeard的精彩回答后,我继续创建了一个小脚本,使用ffmpeg和showspectrum过滤器进行可视化。我还为自己添加了一个上传选项,可以直接编码到比在家上传大型视频更好的远程服务器上。它还使用了很棒的脚本youtube-upload!
编辑:直接上传会大大减慢编码过程!!
#!/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
如果您可以访问After Effects,则有一个名为Trapcode Keys的插件可以非常有效地完成此操作。结果看起来非常好-我已经在许多项目中使用了与您所描述的完全相同的工具,但是它并不便宜-单独花费150美元,或者完整的Trapcode Suite花费899美元。