首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在保持音频格式PCM =1(线性量化)的同时将24位WAV文件转换为32位

如何在保持音频格式PCM =1(线性量化)的同时将24位WAV文件转换为32位
EN

Stack Overflow用户
提问于 2017-02-05 02:52:51
回答 1查看 3.6K关注 0票数 0

有关我的问题的更多上下文,请参考这里:https://gamedev.stackexchange.com/questions/136817/how-to-get-sdl2-to-play-32bit-wav-files

我有一个24位的WAV文件,它的音频格式为1,请参阅这里:http://soundfile.sapp.org/doc/WaveFormat/ to AudioFormat

当使用:ffmpeg -i input.wav -ar 48000 -ac 2 -acodec pcm_s16le output.wav将我的WAV文件(24位)转换为16位时,它保留了音频格式PCM = 0x001。

当使用ffmpeg -i input.wav -ar 48000 -ac 2 -acodec pcm_s32le output.wav时,音频格式PCM = 0xfffe。

SDL2 (如父问题中所示)只允许文件使用线性PCM音频格式(1),我不确定如何使用soxffmpeg将24位WAV文件向上转换为32位(因为SDL2只播放32位和16位)。

我想问的是可能吗?更多有关WAV文件和为什么ffmpeg更改头号的信息将是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-05 05:40:06

FFmpeg使用以下代码设置编解码器标记

代码语言:javascript
复制
...
waveformatextensible = (par->channels > 2 && par->channel_layout) ||
                       par->channels == 1 && par->channel_layout && par->channel_layout != AV_CH_LAYOUT_MONO ||
                       par->channels == 2 && par->channel_layout && par->channel_layout != AV_CH_LAYOUT_STEREO ||
                       par->sample_rate > 48000 ||
                       par->codec_id == AV_CODEC_ID_EAC3 ||
                       av_get_bits_per_sample(par->codec_id) > 16;

if (waveformatextensible)
    avio_wl16(pb, 0xfffe);
...

一个粗略的尝试就是用01 00替换0x20的2个字节,然后尝试。如果这不起作用,而且这种行为是不规范的,那么就提交一个错误报告

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

https://stackoverflow.com/questions/42048078

复制
相关文章

相似问题

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