FFmpeg - 与音频帧大小的概念及其计算混淆

FFmpeg - confused with the concept of audio frame size and its calculation

我正在学习使用 FFmpeg 的视频和音频编解码器。我很想了解帧大小和其他一些概念。

帧大小 这是每个帧的字节大小。这可能会有很大差异:如果每个样本 是 8 位,我们正在处理单声道声音,帧大小是一个字节。 类似地,在具有 64 位浮点样本的 6 声道音频中,帧大小为 48 字节 (PCM Terminology and Concepts)

如上所述,如果每个样本为8位且有6个通道,则帧大小将为48字节。我的代码的结果是 96(16 位 * 6 通道)。另一方面,调用 stream->codecpar->frame_size 的结果是 1024。为什么它们不同? 6 个通道的帧大小是 1024 还是每个通道?

main.cpp:

else if (stream->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) {
    std::cout << "audio sample rate: " << stream->codecpar->sample_rate << std::endl;
    std::cout << "audio bits: " << stream->codecpar->bits_per_coded_sample << std::endl;
    std::cout << "audio channels: " << stream->codecpar->channels << std::endl;
    std::cout << "audio frame size: " << stream->codecpar->frame_size << std::endl; 
    std::cout << "audio frame size: (16bits * 6 channels) = " << stream->codecpar->channels * stream->codecpar->bits_per_coded_sample << std::endl; 
    audio_stream_index = i;
}

控制台:

audio sample rate: 48000
audio bits: 16
audio channels: 6
audio frame size: 1024
audio frame size: (16bits * 6 channels) = 96

在 FFmpeg 中,音频帧大小指的是样本,而不是字节。因此,16 位 4 通道 PCM 流的一个音频帧将具有 1024 x 16 x 4 = 65536 位 = 8192 字节。