例如,使用一个wav
文件,您可以轻松区分位深度
24 位
Stream #0:0: Audio: pcm_s24le ([1][0][0][0] / 0x0001), 44100 Hz, stereo,
s32, 2116 kb/s
16 位
Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stereo,
s16, 1411 kb/s
然而 AAC 似乎难以捉摸
Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo,
fltp, 151 kb/s
答案1
ffprobe 报告正确的位深度,但只有当有深度需要报告时,否则它会正确报告“位深度”不适用(N/A)。
在 FFmpeg 的数据字段“bits_per_raw_sample”的报告中,根据 Karans 的回答,“位深度”对于 AAC 编码音频来说是不正确的。
如果您尝试探测数据文件,您可能需要grep -e
针对“codec_name”辨别“bits_per_raw_sample”报告的是哪些流(视频、音频、文本)。这样可以轻松知道报告的位深度状态是属于视频编解码器还是音频编解码器:
$ ffprobe -show_streams <input_file.mp4> | grep -e codec_name -e bits_per_raw_sample
...生成的视频和音频数据文件报告示例:
codec_name=h264 <----- video
bits_per_raw_sample=8 <----- 8-bit depth video
codec_name=aac <----- AAC audio
bits_per_raw_sample=N/A <----- bit depth is "Not Applicable" to AAC audio
你可能会喜欢这篇文章,“揭秘音频编码“
位深度
除了采样率,还需要考虑位深度。位深度是用于编码每个样本的数字信息位数。简而言之,位深度测量“精度”。位深度越高,信号传达实际模拟声源振幅的准确性就越高。在最低可能的位深度下,我们只有两种选择来测量声音的精度:0 表示完全静音,1 表示最大音量。位深度越高,编码音频的精度就越高。例如:CD 质量音频是标准的 16 位,可提供 216(或 65,536)个音量可供选择。
PCM 编码的位深度是固定的,但是对于有损压缩编解码器(如 MP3 和 AAC),它是在编码期间计算的,并且可能因样本而异。
...因此,要回答“如何确定 AAC 位深度?”这个问题,我想您必须逐个样本地进行。
答案2
答案3
事实上,这些格式并不完全是每个样本的位数,但你可以考虑两个变量来取近似值:采样率和比特率。
如果您知道采样率意味着每秒有多少个样本(例如,如果您有 44100 Hz,则意味着 1 秒播放 44100 个样本)和比特率(在我的情况下是 95kb/s),那么您就知道 95000 字节/秒除以 44100 个样本/秒 = 2.1542(大约)字节/样本。这比 16 位质量编码多一点。因此,您可以使用以下 ffmpeg 命令以 44100Hz 解码每个原始样本 24 位:
ffmpeg -i input.mp4a -acodec pcm_s24le -f s24le -ar 44.1k -ac 2 out.pcm
它不会正好是 24 位,所以可能会太大,但是如果转换为较低质量,则不会损失质量。