ffmpeg - 制作一个干净的WAV文件

时间:2016-09-23 19:22:14

标签: audio ffmpeg game-engine wav

我希望使用ffmpeg将一些文件批量转换为音频文件,以用于名为Star Wars: Jedi Knight: Dark Forces II的游戏。我遇到的问题是ffmpeg似乎做了一些事情,Jedi Knight无法播放声音文件。

Jedi Knight接受各种范围的普通旧PCM WAV个文件,从5khz到96khz,8和16位,单声道和立体声。这听起来简单明了。除非使用WAV创建MS Sound Recorder文件,否则Jedi Knight无法播放。猜测是它在标题或其他东西上添加了额外的东西。但它可以播放由WAVAudacityGoldWave创建的ModPlug Tracker文件,仅举几例。

那为什么不ffmpeg?我使用错误的编解码器或参数吗?我从游戏中获取了原始声音文件并执行了以下操作:

ffmpeg -i "orig_thrmlpu2.wav" -f wav -acodec pcm_s16le -ar 22050 -ac 1 "ffmpeg_thrmlpu2.wav"

ffmpeg版本无法在游戏中播放。 ffprobe表明ffmpeg版本有一些Metadata original没有WAV。我应该使用哪些参数来尝试获得与原始格式相同的-ar格式?请注意,-acbitsrequest.addEventListener('load', function(event) { if (request.status >= 200 && request.status < 300) { console.log(request.responseText); } else { console.warn(request.statusText, request.responseText); } }); 不是重要的部分。

以下是您要检查的文件:http://www.edwardleuf.org/Games/JK/thrmlpu2.zip

2 个答案:

答案 0 :(得分:6)

默认情况下,FFMpeg是向WAV输出添加LIST-INFO块。添加sourcefile.c可以抑制它。

所以,

-bitexact

答案 1 :(得分:0)

根据此功能要求ffmpeg更改其wav头文件,问题是2个可选字节。 cbSize仅应用于非pcm数据。

https://ffmpeg.org/pipermail/ffmpeg-devel/2013-April/142576.html

截至2013年,ffmpeg的标头为“ 80字节或46,如果您设法抑制LIST-INFO块。”

在此处编写的解决方案是在使用ffmpeg时使用这些参数。

“>我必须使用“ ffmpeg -i ... -f s16le tmp.dat”,然后使用“ mplayer -demuxer rawaudio -rawaudio rate = 44100:channels = 2:samplesize = 2 -ao pcm tmp.dat”获得“正常”的wav文件,许多程序无法读取ffmpeg的wav文件,他们读取了44个字节的标头,而其他数据则用作声音,有时会导致字节顺序损坏,或者他们说该文件已损坏并且无法读取文件根本。所以我想直接从ffmpeg获取“正确的” wav。对不起,我的英语不好:)“

如果-bitexact不适用,则此处列出的方法可能会起作用。例如,在将wav转换为wav以修复标头时。