没有使用ffmpeg的选项
我正在使用ffmpeg来生成音频数据。我使用以下命令
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上提到的示例编码和转码应用程序。
使用以下配置,但失败了
spTypeOut->SetUINT32(MF_MT_AUDIO_BITS_PER_SAMPLE, 20); 注:但我把16而不是20;它创造顺利。
有没有办法产生这样的20位PCM音频?20位深度有什么特别之处,而不是在ffmpeg和媒体基础上,而是在苹果编解码器上?
发布于 2015-02-11 23:09:35
如果您仅限于使用ffmpeg,下面是它的可用位深度
ffmpeg -sample_fmts这给了你这个
name depth
u8 8
s16 16
s32 32
flt 32
dbl 64
u8p 8
s16p 16
s32p 32
fltp 32
dblp 64 如果你可以自由地使用你自己的解决方案,那是一个比特移位和比特掩蔽的问题,这并不难掌握。
如果你搜索:
alac command line encoder似乎有一个工具可以帮助你:卡亚克
发布于 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。
https://stackoverflow.com/questions/28465648
复制相似问题