请教下,怎么用 ffprobe 查看音频文件的 "位深" ? bits_per_raw_sample = N/A; bits_per_sample = 0 是啥情况?

2021-01-27 21:34:48 +08:00
 yodhcn
用 ffprobe 查看音频文件的信息时,发现两个看不懂的数据项,`bits_per_raw_sample` 和 `bits_per_sample` 有什么区别?

出现
bits_per_raw_sample = N/A
bits_per_sample = 0
又意味着什么?

据我了解,应有公式:比特率 = 采样率 * 位深 * 声道数

用 `MPC-BE` 这个软件检查某些 MP3 文件的信息时,也会出现不显示 "位深" 的情况,
这是 "位深" 低于 16bit 时就没有必要看了的意思吗?

另外,位深、采样率、比特率等,这些值,哪一个最能反映音质?
1912 次点击
所在节点    程序员
7 条回复
no1xsyzy
2021-01-27 22:46:00 +08:00
MPC-BE 我记得是基于 LavFilter,而 Lav 又是基于 ffmpeg……
比特率还要考虑到压缩,尤其 mp3 是有损压缩

决定音质的因素很多,如果拿 5 块钱爆音麦录 96kHz 48bit,音质也好不到哪去。何况单就文件来说,你可以随便升降采样
就算问,在降采样的过程中降低哪个对音质还原度影响最大,那也是个偏微分方程。
何况这三个值还有联动关系……
具体你只能凭你的耳朵。
如果你是想自动挑选,无脑选比特率大的吧,未必最好,但最让你感觉舒服,“我选了比特率最大的,其他多半只会更差吧”这样安慰自己。
AX5N
2021-01-27 22:47:50 +08:00
理论上哪个都能反应出音质,实际上哪个都反应不出音质。

人耳听不出位深高低的区别,采样率早已超出人耳极限,比特率和压缩算法有关,不同算法的比特率没有比较价值。
mmlmml1
2021-01-27 23:36:27 +08:00
这三个都不能反映音质。举个极端的例子,一段原始为 16kHz/16bit 音频,将它先压缩到 8kHz/8bit 再 upscale 到 96kHz/24bit,处理前和处理后的哪个更好?

更加准确的做法有,分析频谱图,分析 SNR 等等,而不是简单分析这几项数据。
mmlmml1
2021-01-27 23:39:33 +08:00
另外,bits_per_raw_sample 表示每个样本在文件中占用的位数,bits_per_sample 表示每个样本实际的位数。举个例子:一个样本可以是 16 位的( bits_per_sample ),但在文件中占用 24 位( bits_per_raw_sample ),剩下的 8 位全部为 0 。
Jirajine
2021-01-27 23:41:09 +08:00
你可以理解为瓶子里装水,参数越高代表瓶子越大,“能够”装下更多地水。但实际装的水有多少,没有任何参数能够直接反映出。
scarllium
2021-01-28 10:33:42 +08:00
位深是针对无损压缩的 wav 等格式,mp3/aac 有损格式的位深不是恒定的
msg7086
2021-01-28 12:03:20 +08:00
有损压缩的位深没有具体意义。位深是指数据的精度,有损压缩中,数据都变了,还谈什么精度。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/749050

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX