c++调用ffmpeg库初体验

  |   0 评论   |   0 浏览

背景

上文中使用进程调用ffmpeg来转码,在线上会存在性能问题。本文尝试直接使用ffmpeg库来调用。

初体验

decode_audio

格式转换,默认为将MP2格式转成s16le,单通道,16k的pcm。

代码:decode_audio.c

编译

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

代码:transcoding.c

编译

gcc transcoding.c -o transcoding -lavutil -lm -lavfilter -lavformat -lavcodec

使用

./transcoding data/sample.mp3 data/new2.wav

原理

参考