• ffmpeg音频重采样


    音频重采样

    重采样就是改变音频的采样率、sample format(采样格式)、声道数(channel)等参数
    为什么需要重采样?
    1、音频重采样是为了将音频统一格式
    比如直播:
    麦克风采集 44.1Khz(采样率) f32(格式) 2chn(通道数)
    添加背景音乐 48Khz s16 2chn
    将麦克风采集的和背景音乐的音频合并叠加,也就是混音,就需要统一格式,统一采样率,这样才能混音(amix)进行编码
    2、多个播放器播放音频
    播放器1 44.1Khz(采样率) f32(格式) 2chn(通道数)
    播放器2 48Khz s16 2chn
    对于声卡来讲能否同时播放两种不同采样率不同格式的音频?
    答案是不能,那怎样才能同时播放两个播放器的内容,比如声卡固定设置为48Khz,S16格式的,这个时候不管什么格式什么采样率的音频最终都要转为48Khz,S16格式的音频进行输出
    这就是为什么音频需要重采样,就是为了统一采样率,统一格式

    音频aac、mp3文档规定:
    AAC:帧大小1024个sample,采样率为44100Hz ,帧播放时长:acc dur=1024/44100 = 0.02322s=23.22ms
    MP3:帧大小1152个sample,采样率为44100Hz ,帧播放时长: mp3 dur=1152/44100 = 0.02608s=26.08ms

    在ffmpeg中不同的AAC编码器,ID都是一样的,不同的是name
    audacity软件分析音频

    重采样参数

    sample rate(采样率):采样设备每秒抽取样本的次数
    sample format(采样格式)和量化精度:这个应该好理解,就是采用什么格式进行采集数据;每种⾳频格式有不同的量化精度(位宽),位数越多,表示值就越精确,声⾳表现⾃然就越精准。
    channel layout(通道布局,也就是声道数):这个就是采样的声道数

    ffmpeg中音频的格式

    enum AVSampleFormat {
        AV_SAMPLE_FMT_NONE = -1,
        AV_SAMPLE_FMT_U8,          ///< unsigned 8 bits
        AV_SAMPLE_FMT_S16,         ///< signed 16 bits
        AV_SAMPLE_FMT_S32,         ///< signed 32 bits
        AV_SAMPLE_FMT_FLT,         ///< float 4字节 32 bits
        AV_SAMPLE_FMT_DBL,         ///< double
     
        AV_SAMPLE_FMT_U8P,         ///< unsigned 8 bits, planar
        AV_SAMPLE_FMT_S16P,        ///< signed 16 bits, planar
        AV_SAMPLE_FMT_S32P,        ///< signed 32 bits, planar
        AV_SAMPLE_FMT_FLTP,        ///< float, planar
        AV_SAMPLE_FMT_DBLP,        ///< double, planar
        AV_SAMPLE_FMT_S64,         ///< signed 64 bits
        AV_SAMPLE_FMT_S64P,        ///< signed 64 bits, planar
     
        AV_SAMPLE_FMT_NB           ///< Number of sample formats. DO NOT USE if linking dynamically
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    这里的数字,8,16(两个字节),32等都是代表音频采样的位深
    在这里插入图片描述
    其中s16le,f32le,s8就是采样位深,le代表大小端,

    交错模式和平面模式(Planar)

    采样格式最后一个字母如果是P就代表数据格式是平面模式,存储时其左声道和右声道的数据是分开存储的,左声道的数据存储在data[0],右声道的数据存储在data[1],每个声道的所占⽤的字节数为linesize[0]和linesize[1];
    LLLLLLRRRRRRLLLLLLRRRRRRLLLLLLRRRRRRL…(每个LLLLLLRRRRRR为一个音频帧)
    如果最后一个字母不是P就代表是交错模式,存储时是按照LRLRLR…的格式交替存储在data[0]中,linesize[0]表示总的数据量。
    LRLRLRLRLRLRLRLRLRLRLRLRLRLRLRLRLRLRL…(每个LR为一个音频样本)

    比如AAC目前编码基本都是一帧有1024个采样点,那么对于2chn的交错模式,就需要一帧1024个LR数据,对于planar模式就是一帧中先有1024个L,再加上1024个R
    保存到本地的音频一定要用交错模式

    linesize和nb_samples

    linesize表示一个平面内总比特数(经过内存对齐), nb_samples表示一帧音频帧的采样点数

    采样频率:每秒钟采样的点的个数。常用的采样频率有:
    22000(22kHz): 无线广播。
    44100(44.1kHz):CD音质。
    48000(48kHz): 数字电视,DVD。
    96000(96kHz): 蓝光,高清DVD。
    192000(192kHz): 蓝光,高清DVD。
    采样精度(采样深度):每个“样本点”的大小,
    常用的大小为8bit, 16bit,24bit。
    通道数:单声道,双声道,四声道,5.1声道。

  • 相关阅读:
    区域气象-大气化学在线耦合模式(WRF/Chem)
    java计算机毕业设计ssm+jsp计算机视频学习网站
    朋友圈为什么会被折叠?
    360 度反馈的实施计划与案例
    软件测试面试题:自动化测试脚本开发的主要步骤?
    展商企业【广东伟创科技开发有限公司】| 2024水科技大会暨技术装备成果展
    vue日历插件vue-full-calendar
    快速入门python基础语法一
    Apache Spark 的基本概念和在大数据分析中的应用
    Google ProtoBuf介绍
  • 原文地址:https://blog.csdn.net/qq_40170041/article/details/126578722