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

问题描述 投票:1回答:1

我正在学习使用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
audio ffmpeg codec pcm
1个回答
1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.