FFmpeg生成静音音频和黑屏视频命令
开发中有时需要生成静音音频或者纯色黑屏视频为便于测试或其他特殊应用场景,可以使用FFmpeg命令-f lavfi
来搞定。
生成静音音频
可以使用anullsrc
或者aevalsrc
来生成静音音频,aevalsrc
还可以生成其他类型声音。
以下命令生成10s特定采样率和声道的静音音频,可以指定编码器进行编码。
anullsrc
1 | ffmpeg -f lavfi -i anullsrc -t 10 silent-audio.mp3 |
sample_rate, r
指定采样率,默认44100。
channel_layout, cl
指定通道布局,详见 libavutil/channel_layout.c 中 channel_layout_map 定义,常见
mono
stereo
5.1
。-t
文件时长,不指定就一直生成。
aevalsrc
1 | ffmpeg -f lavfi -i aevalsrc=0 -t 10 silent-audio.mp3 |
生成纯色视频
可以使用color
或者nullsrc
源来生成指定格式的纯色视频。
color
1 | ffmpeg -f lavfi -i color=size=1920x1080:rate=25:color=black:duration=5 black.mp4 |
color,c:
视频颜色,可以是颜色名或者数值
#RRGGBB
,详见ffmpeg color。
nullsrc
1 | ffmpeg -f lavfi -i nullsrc=size=1280x720:rate=25:duration=5,lutrgb=0:0:0 black.mp4 |
size, s:
图像分辨率
rate, r:
视频帧率
duration, d:
视频时长
生成纯色图像
生成纯色图片仅需要把上述生成视频的帧率和时长都设置为1即可。
1 | ffmpeg -f lavfi -i color=s=1920x1080:r=1:c='#FF00FF':d=1 purple.jpg |
下面弄点好玩的
正弦信号音频
aevalsrc
源可以产生特定参数的波形信号,前面aevalsrc=0
产生静音信号,可以使用表达式来表示其信号波形。
生成48kHz采样率,频率为400Hz的长度10s的正弦信号单声道音频。
可以使用 Foobar2000 的 示波仪 看到正弦信号波形。
1 | ffmpeg -f lavfi -i aevalsrc="sin(400*2*PI*t):s=48000:d=10" sin-400hz.mp3 |
生成正弦+余弦 双声道信号
1 | ffmpeg -f lavfi -i aevalsrc="sin(400*2*PI*t)|cos(420*2*PI*t):d=10" sin-cos.mp3 |
长度可以使用d=10
或者 -t 10
来指定。
白噪声信号音频
可以使用aevalsrc
或者 anoisesrc
函数来产生白噪声信号。
aevalsrc
使用随机数函数生成信号值
1 | ffmpeg -f lavfi -i aevalsrc="-2+random(0)" -t 10 wn.mp3 |
anoisesrc
anoisesrc是专门用于产生噪声的源。
1 | ffmpeg -f lavfi -i anoisesrc=c=white:c=white:r=44100:a=0.5:d=3 white.mp3 |
sample_rate, r
采样率
amplitude, a
声音幅值,0.0-1.0。
duration, d
时长
color, colour, c
噪声类型,white, pink, brown, blue, violet and velvet,默认白色。
文字转语音音频
这个功能需要集成libflite库,编译时配置参数--enable-libflite
。
1 | # 读文本 |
默认是男声,voice=slt
是女声。
ffplay -f lavfi -i flite=list_voices=1
可以列出所有支持的voice
,例如:kal, slt, rms
。
测试发现不能识别中文,不知道是不是库版本原因。