如何将音频转换为视频(即显示视频中的波形)?


32

我必须创建一个视频。其中一部分涉及“显示”广播采访。我不仅要黑屏听音频,还希望在屏幕和字幕上显示变化的波形。

我可以使用任何免费或便宜的工具来做到这一点吗?


如果我请朋友去做,那么Adobe Creative Suite中有什么可以做的?


大胆应该向您展示声波;您可以-直观地记录波浪。

值得一提的是,您可能正在寻找的“可视化工具”工具是示波器,它可以为您的搜索提供帮助。
勇士鲍勃

Answers:


52

您可以使用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文档以获取更多选项和示例。


showcqt

showcqt过滤器

将输入音频转换为代表带有音乐音阶的频谱的视频输出。

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文档以获取更多选项和示例。


表演波

showwaves过滤器

将输入音频转换为视频输出,代表样本波。

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


OP可能希望查看链接到After Effects教程的其他答案,但是这些出色的ffmpeg示例在此处确实很有用。谢谢!
mivk 2015年

1
@LordNeckbeard OP在这里。已经有一段时间了,但是我回来了,这是一个很好的答案。
ccleve

我刚刚创建了一个问题superuser.com/questions/1184922/…如何设置背景图片?
NineCattoRules's

6

Adobe After Effects具有可视化器,请参见

也有插件,如这里的Photoshop。

祝您项目顺利。


4

我很了解你的问题。如果您要创建一个根据音频的音高和低音移动的波形模式,则可以尝试使用此链接。

http://www.videocopilot.net/tutorial/audio_to_animation/

Adobe After Effects使您可以轻松做到这一点。您可以与粒子效果一起播放,以获得更立体的波形。

祝好运!



3

在阅读了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


0

如果您可以访问After Effects,则有一个名为Trapcode Keys的插件可以非常有效地完成此操作。结果看起来非常好-我已经在许多项目中使用了与您所描述的完全相同的工具,但是它并不便宜-单独花费150美元,或者完整的Trapcode Suite花费899美元。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.