ffmpeg - Making a Clean WAV file
Solution 1
FFMpeg by default is adding a LIST-INFO chunk to the WAV output. Adding -bitexact
suppresses it.
So,
ffmpeg -i "orig.wav" -f wav -bitexact -acodec pcm_s16le -ar 22050 -ac 1 "ffmpeg.wav"
Solution 2
According to this feature request for ffmpeg to change its wav header files, the problem is 2 optional bytes. cbSize
which are only supposed to be used for non-pcm data.
https://ffmpeg.org/pipermail/ffmpeg-devel/2013-April/142576.html
The header ffmpeg was writing as of 2013 was "80 bytes or 46 if you manage to suppress the LIST-INFO chunk."
The solution written there is to used these arguments when using ffmpeg.
> I must use
ffmpeg -i ... -f s16le tmp.dat
and thenmplayer -demuxer rawaudio -rawaudio rate=44100:channels=2:samplesize=2 -ao pcm tmp.dat
to get "normal" wav file, many program can't read ffmpeg's wav file, they read 44 bytes of header, and others data use as sound, sometimes it caused broken byteorder, or they say that file is broken and can't read file at all. So I want get "correct" wav from ffmpeg directly. Sorry for my bad english :)
The method listed there might work if -bitexact is not applicable. For example when converting wav to wav in order to fix the header.
Edward
Updated on June 09, 2022Comments
-
Edward almost 2 years
I'm looking to batch convert a number of files to audio files using
ffmpeg
for a game calledStar Wars: Jedi Knight: Dark Forces II
. The problem I'm having is thatffmpeg
seems to be doing something that does so thatJedi Knight
can't play the sound file.Jedi Knight
accepts plain oldPCM
WAV
files of various ranges, from 5khz to 96khz, 8 and 16 bit, mono and stereo. This sounds plain and simple. Except for that if one were to create aWAV
file usingMS Sound Recorder
,Jedi Knight
could not play it. Speculation was that it added something extra to header or something. But it can play aWAV
file created byAudacity
,GoldWave
orModPlug Tracker
to name a few.So why not
ffmpeg
? Am I using the wrong codec or params? I took an original sound file from the game and performed the following:ffmpeg -i "orig_thrmlpu2.wav" -f wav -acodec pcm_s16le -ar 22050 -ac 1 "ffmpeg_thrmlpu2.wav"
The
ffmpeg
version does not play in the game.ffprobe
shows that theffmpeg
version has someMetadata
which theoriginal
doesn't have. What params should I use to try and get the sameWAV
format as the original? Mind you,-ar
,-ac
andbits
aren't the important parts.Here are the files for you to examine: http://www.edwardleuf.org/Games/JK/thrmlpu2.zip