繁体   English   中英

FFmpeg:如何估算音频流中的样本数量?

[英]FFmpeg: How to estimate number of samples in audio stream?

我目前正在编写一个使用FFmpeg库的小型应用程序,以便在C ++中解码音频文件(尤其是avformat和swresample)。

现在,我需要音频流中的样本总数。 我知道确切的数字只能通过实际解码所有帧才能找到,我只需要一个估计即可。 这里首选的方法是什么? 如何找出文件的持续时间?

这个问题中有一些关于如何从ffmpeg中获取信息的好信息: FFMPEG无法显示视频的持续时间

要计算音频流中的样本数量,您需要三个基本的信息位:

  1. 持续时间(以秒为单位)
  2. 采样率(以每秒采样数为单位)
  3. 流中的频道数(例如,立体声2个)

获得该信息后,流中的样本总数仅为[持续时间] * [速率] * [通道]。

请注意,这不等于字节,因为采样可能至少为16位,并且可能为24位。

我相信您需要的是音频/框架的公式。 例如,如果ar = 48000,并且视频的帧速率为50fps,则您需要每帧48000/50 = 960个样本。

缓冲区计算稍后作为samples_per_frame * nChannels * (audiobit/8) AudioBit通常为16位(也可以为24位或32位)。 因此,对于16位48Khz的8通​​道音频,每个音频帧需要960 * 8 * 2 = 15360字节。 进行此最后计算的官方方法是使用:

av_samples_get_buffer_size(NULL, nChannels, SamplesPerFrame, audio_st->codec->sample_fmt, 0)函数。

av_samples_get_buffer_size(NULL, 8, 960, audio_st->codec->sample_fmt, 0)

还将返回15360(对于专家:是的,我假设格式为pcm_s16le)。 因此,这回答了您问题的第一部分。 希望能有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM