首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何通过设置20位深度生成pcm音频文件?

如何通过设置20位深度生成pcm音频文件?
EN

Stack Overflow用户
提问于 2015-02-11 22:19:01
回答 2查看 3.1K关注 0票数 1

没有使用ffmpeg的选项

我正在使用ffmpeg来生成音频数据。我使用以下命令

代码语言:javascript
运行
复制
ffmpeg.exe -i in.wav -ar 44100  -acodec pcm_s16le  -ac 1 out.wav

但没有选择转换为20位深度pcm音频。(有点像pcm_s20le)。

我想对苹果编解码器执行一些操作(例如,将pcm音频数据编码给alac)。

关于ALAC的来源:http://alac.macosforge.org/trac/browser/trunk/ReadMe.txt,有人这样提过;

Apple支持以下特性:1.bit深度16、20、24和32位。

20位深度窗口抛出异常的媒体基础

我尝试过在MSDN https://code.msdn.microsoft.com/windowsapps/media-transcode-sample-f7ba5269上提到的示例编码和转码应用程序。

使用以下配置,但失败了

代码语言:javascript
运行
复制
spTypeOut->SetUINT32(MF_MT_AUDIO_BITS_PER_SAMPLE, 20);  

注:但我把16而不是20;它创造顺利。

有没有办法产生这样的20位PCM音频?20位深度有什么特别之处,而不是在ffmpeg和媒体基础上,而是在苹果编解码器上?

EN

回答 2

Stack Overflow用户

发布于 2015-02-11 23:09:35

如果您仅限于使用ffmpeg,下面是它的可用位深度

代码语言:javascript
运行
复制
ffmpeg -sample_fmts

这给了你这个

代码语言:javascript
运行
复制
name   depth
u8        8 
s16      16 
s32      32 
flt      32 
dbl      64 
u8p       8 
s16p     16 
s32p     32 
fltp     32 
dblp     64 

如果你可以自由地使用你自己的解决方案,那是一个比特移位和比特掩蔽的问题,这并不难掌握。

如果你搜索:

代码语言:javascript
运行
复制
alac command line encoder

似乎有一个工具可以帮助你:卡亚克

票数 3
EN

Stack Overflow用户

发布于 2015-02-11 23:20:23

20位音频的一个关键区别是它没有很好地打包成字节。16位包成2字节,32位打包成4字节,24位可以单独打包成3字节,也可以在4字节整数中打包3字节。您会发现,将24位音频打包成一个4字节的整数非常常见,这样就忽略了一个字节。这使得软件程序更容易使用ints和casting跨出音频。

现在考虑如何存储20位音频。要么以3字节或4字节的格式存储它,忽略额外的位,要么将其打包成紧凑的格式,从而使抽取样本变得痛苦(因为一个样本将是2个字节加上一个小数据,下一个样本将是一个小字节,然后是2个字节,等等)。由于这个原因,20位音频不太可能被严格打包存储。

考虑到这一点,如果您只是将您的波形文件作为24位写入3或4个字节,然后忽略lsb中的额外4位,那么它与20位波形是相同的(除了可能的抖动)。

我只想避免所有的20位,因为它没有得到广泛支持。一个可能的解决办法是从ffmpeg获取波形文件输出,然后修改头以指示20位音频,而不是24位音频。它应该是一个2字节字的偏移量32。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28465648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档