ffmpeg音频重采样

音频重采样是将音频从一种采样格式转换到另一种,通常在播放器不支持原始数据格式时需要。ffmpeg提供了一系列函数,如swr_alloc_set_opts、swr_init、av_frame_alloc等,用于创建重采样上下文、初始化数据并执行重采样操作。在完成重采样后,还需释放相关资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

音频重采样,指的是将音频从一个采样格式转换到另一个转换格式,可以通过强大的音视频工具ffmpeg实现。

音频重采样的使用场景之一是:当我们要播放一段音频时解封装得到了一段音频原始数据(PCM数据),可是我们使用的播放器(如SDL)不支持该采样格式的音频原始数据,这时就需要进行音频重采样。

 

音频重采样用到的结构体 

SwrContex   重采样上下文

AVFrame 存放解码后数据的结构体 

 

音频重采样用到的函数

1、创建重采样上下文

struct SwrContext *swr_alloc_set_opts(struct SwrContext *s,

                                      int64_t out_ch_layout, enum AVSampleFormat out_sample_fmt, int out_sample_rate,

                                      int64_t  in_ch_layout, enum AVSampleFormat  in_sample_fmt, int  in_sample_rate,

                                      int log_offset, void *log_ctx);

2、初始化重采样上下文

int swr_init(struct SwrContext *s);

3、初始化帧数据(在堆内开辟空间)

AVFrame *av_frame_alloc(void);

4、初始化重采样输出AVFrame中data的空间(在堆内开辟空间)

int av_samples_alloc(uint8_t **audio_data, int *linesize, int nb_channels,

                     int nb_samples, enum AVSampleFormat sample_fmt, int align);

5、重采样函数

int swr_convert(struct SwrContext *s, uint8_t **out, int out_count,

                                const uint8_t **in , int in_count);

6、重采样结束后需要释放相关数据,首先是AVFrame中的data部分

void av_freep(void *ptr);

7、释放AVFrame

void av_frame_free(AVFrame **frame);

8、释放重采样上下文

void swr_free(struct SwrContext **s);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值