Musepack Forums  

Go Back   Musepack Forums > Main > Tech

Reply
 
Thread Tools Search this Thread Display Modes
Old 17 February 2016, 07:02 pm   #1
doppletune
Member
 
Join Date: Feb 2016
Posts: 3
Default Error when piping WAV from ffmpeg to musepack mpcenc.exe

I am getting an error message in mpcenc, "WAVE file has incorrect header", when input from stdin coming from ffmpeg.

This is running on a Windows Vista machine, under cygwin, using the current versions of musepack (MPC Encoder 1.30.0) and ffmpeg (N-78410-g588e2e3 / in other words, downloaded yesterday).

I am ripping audiobook CDs; then using ffmpeg to downmix to mono; and piping the 44.1 kHz mono WAV output to mpcenc:

ffmpeg.exe -i d01\ 11.wav -ac 1 -f wav pipe: | mpcenc.exe --quality 0.8 - d01\ 11.mpc

The errors:
WAVE file has incorrect header: header: 62519.262 s, contents: 191.893 s
WAVE file has incorrect header: header: 191.893 s, contents: 191.893 s
WAVE file has incorrect header: header: 191.893 s, contents: 191.893 s

mpcenc.exe gives these errors, but still produces a usable .mpc file. The source example file above is 3m:11S, so the "contents:" parts of the error messages show the correct duration.

The same error messages appear if I pipe the output of ffmpeg to stdout and cat that output to a new WAV file on disk, then use that WAV file as input for mpcenc. However, if I output from ffmpeg to a disk-based WAV file (that is, without using stdout), then that file does not produce errors in mpcenc.

In each case, the WAV file outputs from ffmpeg play properly in Winamp and Media Player Classic.
doppletune is offline   Reply With Quote
Old 19 February 2016, 09:21 pm   #2
r2d
Musepack developer
 
Join Date: Sep 2006
Location: Villeurbanne - France
Posts: 36
Default

This error is (almost) normal. ffmpeg is sending the wave header with a very high number of samples, as if it didn't know the real file length. It is probably doing the same thing with a file output, but it rewrite the file header when closing it with the real number of samples written. But it is not possible to rewrite the header with a pipe.
r2d is offline   Reply With Quote
Old 20 February 2016, 10:39 pm   #3
doppletune
Member
 
Join Date: Feb 2016
Posts: 3
Default

Thanks, that was what I had guessed, including the "(almost) normal" description of the error.

If FFMPEG outputs a WAV header with the incorrect duration, this looks like a bug with FFMPEG (because its input is a file with known duration). Then Musepack is correctly reading incorrect input data and producing error messages.

Is there a reason for mpcenc producing _two_ error messages? The first makes sense, with the large duration that disagrees with the duration of the contents. The second message is nonsensical. For example:
"WAVE file has incorrect header: header: 3119.752 s, contents: 3119.752 s"
doppletune is offline   Reply With Quote
Old 22 February 2016, 12:49 am   #4
doppletune
Member
 
Join Date: Feb 2016
Posts: 3
Default

I discovered that this is a well-known problem with output from ffmpeg to stdout. I would like to suggest an option for mpcenc, which is a --ignorelength flag. This informs the encoder to disregard the "length" field in the header of the input WAV file. Apparently some codecs when piping to streams will write zero for length, and others write 0xfff.... to represent infinity. These are meant as flags or placeholders to represent unknown duration. So an encoder that receives WAV data like this could have an option to disregard the fictional duration in the input WAV header, then figure out the real duration based on actual data.

This is what is discussed in the following thread, regarding two other encoders (qaac and lossywav) handling input from a pipe from ffmpeg: https://hydrogenaud.io/index.php/topic,103191.0.html

I think it is worthwhile having this option, as WAV is the expected intermediate format that gets piped from one codec to another.
doppletune is offline   Reply With Quote
Reply

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off



All times are GMT. The time now is 10:41 am.


Powered by vBulletin® Version 3.8.11 Beta 2
Copyright ©2000 - 2017, vBulletin Solutions Inc.