我希望使用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
无法播放。猜测是它在标题或其他东西上添加了额外的东西。但它可以播放由WAV
,Audacity
或GoldWave
创建的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
格式?请注意,-ac
,bits
和request.addEventListener('load', function(event) {
if (request.status >= 200 && request.status < 300) {
console.log(request.responseText);
} else {
console.warn(request.statusText, request.responseText);
}
});
不是重要的部分。
答案 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以修复标头时。