FFmpeg - путают с понятием размера аудио кадра и его расчета - PullRequest
1 голос
/ 12 марта 2019

Я изучаю видео и аудио кодеки с FFmpeg.Я пытаюсь понять размер кадра и некоторые другие понятия.

Размер кадра Это размер в байтах каждого кадра.Это может сильно варьироваться: если каждый семпл имеет 8 бит и мы обрабатываем монофонический звук, размер кадра составляет один байт.Аналогично в 6-канальном аудио с 64-битными выборками с плавающей запятой размер кадра составляет 48 байтов ( PCM Терминология и понятия )

Как описано выше, если каждый образец имеет 8 бит иЕсть 6 каналов, тогда размер кадра будет 48 байтов.Результат из моего кода был 96 (16 бит * 6 каналов).С другой стороны, результат звонка stream->codecpar->frame_size был 1024. Почему они отличались?Размер кадра 1024 для 6 каналов или только для каждого канала?

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

1 Ответ

1 голос
/ 12 марта 2019

В FFmpeg размер аудио кадра относится к сэмплам, а не к байтам.Таким образом, один аудиокадр 16-битного 4-канального потока PCM будет иметь 1024 x 16 x 4 = 65536 битов = 8192 байта.

...