c++调用ffmpeg库初体验
背景
上文中使用进程调用ffmpeg来转码,在线上会存在性能问题。本文尝试直接使用ffmpeg库来调用。
初体验
decode_audio
格式转换,默认为将MP2格式转成s16le,单通道,16k的pcm。
编译
gcc decode_audio.c -o decode_audio -lavutil -lavcodec
使用
$./decode_audio sample.mp2 raw_audio
Warning: the sample format the decoder produced is planar (s16p). This example will output the first channel only.
Play the output audio file with the command:
ffplay -f s16le -ac 1 -ar 16000 raw_audio
encode_audio
编译
gcc encode_audio.c -o encode_audio -lavutil -lm -lavcodec
使用
$./encode_audio data/hello.wav
resampling_audio
编译
gcc resampling_audio.c -o resampling_audio -lavutil -lm -lswresample
使用
$./resampling_audio data/sample.mp3
t:9.984000 in:1024 out:940
t:10.005333 in:1024 out:941
Resampling succeeded. Play the output file with the command:
ffplay -f s16le -channel_layout 7 -channels 3 -ar 44100 data/sample.mp3
transcode_aac
编译
$gcc transcode_aac.c -o transcode_aac -lavutil -lm -lavcodec -lswresample -lavformat
使用
./transcode_aac data/sample.mp3 data/new.wav
transcoding
编译
gcc transcoding.c -o transcoding -lavutil -lm -lavfilter -lavformat -lavcodec
使用
./transcoding data/sample.mp3 data/new2.wav