问题如下:
在音视频开发过程中使用ffmpeg命令把mp4格式转为flv格式:
ffmpeg -i test.mp4 out.flv
报错信息如下:
Sample rate must be 11025,22050 or 44100
Error initializing output stream 0:1 -- Error while opening encoder for output steam #0:1 -maybe incorrect parametes such as bit_rate,rate,width or heigh
报错的内容大致为:采样率必须为11025,22050或者44100。
既然是采样率报错,那么,我们可以用ffprobe来查看test.mp4的采样率:
我们发现test.mp4的音频流是用aac编码的,采样率为48000HZ,也就是说,当我们把test.mp4转为flv文件时,如果你没修改采样率,那么它就把原视频的采样率48000HZ作为转换后的flv的采样率,然而,我们查看flv的官方文档会发现,flv的aac编码的音频流仅支持5.5kHZ、11kHZ、22kHZ和44kHZ,详见下图:
也就是说,在使用ffmpeg把mp4的格式转为flv的时候,在没有指定ar的情况下,flv封装格式中的aac不支持mp4的采样率,所以就报错了,因此,解决方法有两个:
方法一:转格式的时候 采用指定采样率,例如:
ffmpeg -i test.mp4 -ar 44100 out.flv
方法二:把自己编译的ffmpeg换成官方编译的ffmpeg进行转换,因为官方的ffmpeg会自动将aac的音频流转化为mp3格式。
flv官方文档:
ffmpeg Documentationhttps://ffmpeg.org/ffmpeg-all.html#toc-Audio-Options