#11262: Musepack decoding is worse quality than the official mpc decoder
-------------------------------------+-------------------------------------
             Reporter:  ego-         |                    Owner:  (none)
  lay_atman-bay                      |
                 Type:  defect       |                   Status:  new
             Priority:  normal       |                Component:  ffmpeg
              Version:  6.1.1        |               Resolution:
             Keywords:               |               Blocked By:
             Blocking:               |  Reproduced by developer:  0
Analyzed by developer:  0            |
-------------------------------------+-------------------------------------
Description changed by ego-lay_atman-bay:

Old description:

> Summary of the bug:
>
> I am trying to transcode an mpc (musepack) file to wav, however when I
> transcode this mpc file to wav, I get static that is not present when
> decoding using the official mpc decoder, which can be found
> [https://www.musepack.net/index.php here].
>
> How to reproduce:
> {{{
> % ffmpeg -i .\m_lic_eqg_eg_stomp.mpc .\m_lic_eqg_eg_stomp-ffmpeg.wav
> }}}
>
> Here's the console output
>
> {{{
> ffmpeg started on 2024-10-22 at 20:18:26
> Report written to "ffmpeg-20241022-201826.log"
> Log level: 99
> Command line:
> "C:\\Users\\USER\\AppData\\Local\\Microsoft\\WinGet\\Links\\ffmpeg.exe"
> -report -v 9 -loglevel 99 -i ".\\m_lic_eqg_eg_stomp.mpc"
> ".\\m_lic_eqg_eg_stomp-ffmpeg.wav"
> ffmpeg version 6.1-full_build-www.gyan.dev Copyright (c) 2000-2023 the
> FFmpeg developers
>   built with gcc 12.2.0 (Rev10, Built by MSYS2 project)
>   configuration: --enable-gpl --enable-version3 --enable-static --pkg-
> config=pkgconf --disable-w32threads --disable-autodetect --enable-
> fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp
> --enable-bzlib --enable-lzma --enable-libsnappy --enable-zlib --enable-
> librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth
> --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libaribb24
> --enable-libaribcaption --enable-libdav1d --enable-libdavs2 --enable-
> libuavs3d --enable-libzvbi --enable-librav1e --enable-libsvtav1 --enable-
> libwebp --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-
> libxvid --enable-libaom --enable-libjxl --enable-libopenjpeg --enable-
> libvpx --enable-mediafoundation --enable-libass --enable-frei0r --enable-
> libfreetype --enable-libfribidi --enable-libharfbuzz --enable-liblensfun
> --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf
> --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec
> --enable-nvenc --enable-dxva2 --enable  libavutil      58. 29.100 / 58.
> 29.100
>   libavcodec     60. 31.102 / 60. 31.102
>   libavformat    60. 16.100 / 60. 16.100
>   libavdevice    60.  3.100 / 60.  3.100
>   libavfilter     9. 12.100 /  9. 12.100
>   libswscale      7.  5.100 /  7.  5.100
>   libswresample   4. 12.100 /  4. 12.100
>   libpostproc    57.  3.100 / 57.  3.100
> Splitting the commandline.
> Reading option '-report' ... matched as option 'report' (generate a
> report) with argument '1'.
> Reading option '-v' ... matched as option 'v' (set logging level) with
> argument '9'.
> Reading option '-loglevel' ... matched as option 'loglevel' (set logging
> level) with argument '99'.
> Reading option '-i' ... matched as output url with argument
> '.\m_lic_eqg_eg_stomp.mpc'.
> Reading option '.\m_lic_eqg_eg_stomp-ffmpeg.wav' ... matched as output
> url.
> Finished splitting the commandline.
> Parsing a group of options: global .
> Applying option report (generate a report) with argument 1.
> Applying option v (set logging level) with argument 9.
> Applying option loglevel (set logging level) with argument 99.
> Successfully parsed a group of options.
> Parsing a group of options: input url .\m_lic_eqg_eg_stomp.mpc.
> Successfully parsed a group of options.
> Opening an input file: .\m_lic_eqg_eg_stomp.mpc.
> [AVFormatContext @ 00000175db2a3e40] Opening '.\m_lic_eqg_eg_stomp.mpc'
> for reading
> [file @ 00000175db2a42c0] Setting default whitelist 'file,crypto,data'
> Probing mp3 score:1 size:2048
> Probing mpc8 score:100 size:2048
> [mpc8 @ 00000175db2a3e40] Format mpc8 probed with size=2048 and score=100
> st:0 removing common factor 256 from timebase
> [mpc8 @ 00000175db2a3e40] Before avformat_find_stream_info() pos: 19
> bytes read:32800 seeks:2 nb_streams:1
> [mpc8 @ 00000175db2a3e40] max_analyze_duration 5000000 reached at 6912000
> microseconds st:0
> [mpc8 @ 00000175db2a3e40] stream 0: start_time: 0 duration: 92.16
> [mpc8 @ 00000175db2a3e40] format: start_time: 0 duration: 92.16 (estimate
> from stream) bitrate=73 kb/s
> [mpc8 @ 00000175db2a3e40] After avformat_find_stream_info() pos: 113155
> bytes read:196685 seeks:4 frames:5
> Input #0, mpc8, from '.\m_lic_eqg_eg_stomp.mpc':
>   Duration: 00:01:32.16, start: 0.000000, bitrate: 73 kb/s
>   Stream #0:0, 5, 288/125: Audio: musepack8, 32000 Hz, stereo, s16p
> Successfully opened the file.
> Parsing a group of options: output url .\m_lic_eqg_eg_stomp-ffmpeg.wav.
> Successfully parsed a group of options.
> Opening an output file: .\m_lic_eqg_eg_stomp-ffmpeg.wav.
> [out#0/wav @ 00000175db2aca80] No explicit maps, mapping streams
> automatically...
> [aost#0:0/pcm_s16le @ 00000175db29e540] Created audio stream from input
> stream 0:0
> [file @ 00000175db2d5380] Setting default whitelist 'file,crypto,data'
> Successfully opened the file.
> Stream mapping:
>   Stream #0:0 -> #0:0 (musepack8 (mpc8) -> pcm_s16le (native))
> Press [q] to stop, [?] for help
> detected 12 logical cores
> [graph_0_in_0_0 @ 00000175db330600] Setting 'time_base' to value
> '1/32000'
> [graph_0_in_0_0 @ 00000175db330600] Setting 'sample_rate' to value
> '32000'
> [graph_0_in_0_0 @ 00000175db330600] Setting 'sample_fmt' to value 's16p'
> [graph_0_in_0_0 @ 00000175db330600] Setting 'channel_layout' to value
> 'stereo'
> [graph_0_in_0_0 @ 00000175db330600] tb:1/32000 samplefmt:s16p
> samplerate:32000 chlayout:stereo
> [format_out_0_0 @ 00000175db330d80] Setting 'sample_fmts' to value 's16'
> [format_out_0_0 @ 00000175db330d80] auto-inserting filter
> 'auto_aresample_0' between the filter 'Parsed_anull_0' and the filter
> 'format_out_0_0'
> [AVFilterGraph @ 00000175db31a5c0] query_formats: 4 queried, 4 merged, 6
> already done, 0 delayed
> [auto_aresample_0 @ 00000175db331200] [SWR @ 00000175db331300] Using s16p
> internally between filters
> [auto_aresample_0 @ 00000175db331200] ch:2 chl:stereo fmt:s16p r:32000Hz
> -> ch:2 chl:stereo fmt:s16 r:32000Hz
> Output #0, wav, to '.\m_lic_eqg_eg_stomp-ffmpeg.wav':
>   Metadata:
>     ISFT            : Lavf60.16.100
>   Stream #0:0, 0, 1/32000: Audio: pcm_s16le ([1][0][0][0] / 0x0001),
> 32000 Hz, stereo, s16, 1024 kb/s
>     Metadata:
>       encoder         : Lavc60.31.102 pcm_s16le
> size=     243kB time=00:00:02.26 bitrate= 878.0kbits/s speed=N/A
> [in#0/mpc8 @ 00000175db28b180] EOF while reading input
> [in#0/mpc8 @ 00000175db28b180] Terminating demuxer thread
> [aist#0:0/musepack8 @ 00000175db2b6a40] Decoder thread received EOF
> packet
> [aist#0:0/musepack8 @ 00000175db2b6a40] Decoder returned EOF, finishing
> [aist#0:0/musepack8 @ 00000175db2b6a40] Terminating decoder thread
> [out_0_0 @ 00000175db330c80] EOF on sink link out_0_0:default.
> No more output streams to write to, finishing.
> [out#0/wav @ 00000175db2aca80] All streams finished
> [out#0/wav @ 00000175db2aca80] Terminating muxer thread
> [AVIOContext @ 00000175db3174c0] Statistics: 11884118 bytes written, 4
> seeks, 48 writeouts
> [out#0/wav @ 00000175db2aca80] Output file #0 (.\m_lic_eqg_eg_stomp-
> ffmpeg.wav):
> [out#0/wav @ 00000175db2aca80]   Output stream #0:0 (audio): 2579 frames
> encoded (2971008 samples); 2579 packets muxed (11884032 bytes);
> [out#0/wav @ 00000175db2aca80]   Total: 2579 packets (11884032 bytes)
> muxed
> [out#0/wav @ 00000175db2aca80] video:0kB audio:11606kB subtitle:0kB other
> streams:0kB global headers:0kB muxing overhead: 0.000656%
> size=   11606kB time=00:01:32.80 bitrate=1024.4kbits/s speed=1.25e+03x
> [in#0/mpc8 @ 00000175db28b180] Input file #0 (.\m_lic_eqg_eg_stomp.mpc):
> [in#0/mpc8 @ 00000175db28b180]   Input stream #0:0 (audio): 41 packets
> read (843738 bytes); 2579 frames decoded; 0 decode errors (2971008
> samples);
> [in#0/mpc8 @ 00000175db28b180]   Total: 41 packets (843738 bytes) demuxed
> [AVIOContext @ 00000175db2ace00] Statistics: 909598 bytes read, 4 seeks
> }}}
>
> I have attached the mpc file I'm trying to transcode, the ffmpeg output,
> and the musepack decoder output (what ffmpeg should output).

New description:

 Summary of the bug:

 I am trying to transcode an mpc (musepack) file to wav, however when I
 transcode this mpc file to wav, I get static that is not present when
 decoding using the official mpc decoder, which can be found
 [https://www.musepack.net/index.php here].

 How to reproduce:
 {{{
 % ffmpeg -i .\m_lic_eqg_eg_stomp.mpc .\m_lic_eqg_eg_stomp-ffmpeg.wav
 }}}

 Here's the console output

 {{{
 ffmpeg started on 2024-10-22 at 20:18:26
 Report written to "ffmpeg-20241022-201826.log"
 Log level: 99
 Command line:
 "C:\\Users\\USER\\AppData\\Local\\Microsoft\\WinGet\\Links\\ffmpeg.exe"
 -report -v 9 -loglevel 99 -i ".\\m_lic_eqg_eg_stomp.mpc"
 ".\\m_lic_eqg_eg_stomp-ffmpeg.wav"
 ffmpeg version 6.1-full_build-www.gyan.dev Copyright (c) 2000-2023 the
 FFmpeg developers
   built with gcc 12.2.0 (Rev10, Built by MSYS2 project)
   configuration: --enable-gpl --enable-version3 --enable-static --pkg-
 config=pkgconf --disable-w32threads --disable-autodetect --enable-
 fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp
 --enable-bzlib --enable-lzma --enable-libsnappy --enable-zlib --enable-
 librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth
 --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libaribb24
 --enable-libaribcaption --enable-libdav1d --enable-libdavs2 --enable-
 libuavs3d --enable-libzvbi --enable-librav1e --enable-libsvtav1 --enable-
 libwebp --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-
 libxvid --enable-libaom --enable-libjxl --enable-libopenjpeg --enable-
 libvpx --enable-mediafoundation --enable-libass --enable-frei0r --enable-
 libfreetype --enable-libfribidi --enable-libharfbuzz --enable-liblensfun
 --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf
 --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec
 --enable-nvenc --enable-dxva2 --enable  libavutil      58. 29.100 / 58.
 29.100
   libavcodec     60. 31.102 / 60. 31.102
   libavformat    60. 16.100 / 60. 16.100
   libavdevice    60.  3.100 / 60.  3.100
   libavfilter     9. 12.100 /  9. 12.100
   libswscale      7.  5.100 /  7.  5.100
   libswresample   4. 12.100 /  4. 12.100
   libpostproc    57.  3.100 / 57.  3.100
 Splitting the commandline.
 Reading option '-report' ... matched as option 'report' (generate a
 report) with argument '1'.
 Reading option '-v' ... matched as option 'v' (set logging level) with
 argument '9'.
 Reading option '-loglevel' ... matched as option 'loglevel' (set logging
 level) with argument '99'.
 Reading option '-i' ... matched as output url with argument
 '.\m_lic_eqg_eg_stomp.mpc'.
 Reading option '.\m_lic_eqg_eg_stomp-ffmpeg.wav' ... matched as output
 url.
 Finished splitting the commandline.
 Parsing a group of options: global .
 Applying option report (generate a report) with argument 1.
 Applying option v (set logging level) with argument 9.
 Applying option loglevel (set logging level) with argument 99.
 Successfully parsed a group of options.
 Parsing a group of options: input url .\m_lic_eqg_eg_stomp.mpc.
 Successfully parsed a group of options.
 Opening an input file: .\m_lic_eqg_eg_stomp.mpc.
 [AVFormatContext @ 00000175db2a3e40] Opening '.\m_lic_eqg_eg_stomp.mpc'
 for reading
 [file @ 00000175db2a42c0] Setting default whitelist 'file,crypto,data'
 Probing mp3 score:1 size:2048
 Probing mpc8 score:100 size:2048
 [mpc8 @ 00000175db2a3e40] Format mpc8 probed with size=2048 and score=100
 st:0 removing common factor 256 from timebase
 [mpc8 @ 00000175db2a3e40] Before avformat_find_stream_info() pos: 19 bytes
 read:32800 seeks:2 nb_streams:1
 [mpc8 @ 00000175db2a3e40] max_analyze_duration 5000000 reached at 6912000
 microseconds st:0
 [mpc8 @ 00000175db2a3e40] stream 0: start_time: 0 duration: 92.16
 [mpc8 @ 00000175db2a3e40] format: start_time: 0 duration: 92.16 (estimate
 from stream) bitrate=73 kb/s
 [mpc8 @ 00000175db2a3e40] After avformat_find_stream_info() pos: 113155
 bytes read:196685 seeks:4 frames:5
 Input #0, mpc8, from '.\m_lic_eqg_eg_stomp.mpc':
   Duration: 00:01:32.16, start: 0.000000, bitrate: 73 kb/s
   Stream #0:0, 5, 288/125: Audio: musepack8, 32000 Hz, stereo, s16p
 Successfully opened the file.
 Parsing a group of options: output url .\m_lic_eqg_eg_stomp-ffmpeg.wav.
 Successfully parsed a group of options.
 Opening an output file: .\m_lic_eqg_eg_stomp-ffmpeg.wav.
 [out#0/wav @ 00000175db2aca80] No explicit maps, mapping streams
 automatically...
 [aost#0:0/pcm_s16le @ 00000175db29e540] Created audio stream from input
 stream 0:0
 [file @ 00000175db2d5380] Setting default whitelist 'file,crypto,data'
 Successfully opened the file.
 Stream mapping:
   Stream #0:0 -> #0:0 (musepack8 (mpc8) -> pcm_s16le (native))
 Press [q] to stop, [?] for help
 detected 12 logical cores
 [graph_0_in_0_0 @ 00000175db330600] Setting 'time_base' to value '1/32000'
 [graph_0_in_0_0 @ 00000175db330600] Setting 'sample_rate' to value '32000'
 [graph_0_in_0_0 @ 00000175db330600] Setting 'sample_fmt' to value 's16p'
 [graph_0_in_0_0 @ 00000175db330600] Setting 'channel_layout' to value
 'stereo'
 [graph_0_in_0_0 @ 00000175db330600] tb:1/32000 samplefmt:s16p
 samplerate:32000 chlayout:stereo
 [format_out_0_0 @ 00000175db330d80] Setting 'sample_fmts' to value 's16'
 [format_out_0_0 @ 00000175db330d80] auto-inserting filter
 'auto_aresample_0' between the filter 'Parsed_anull_0' and the filter
 'format_out_0_0'
 [AVFilterGraph @ 00000175db31a5c0] query_formats: 4 queried, 4 merged, 6
 already done, 0 delayed
 [auto_aresample_0 @ 00000175db331200] [SWR @ 00000175db331300] Using s16p
 internally between filters
 [auto_aresample_0 @ 00000175db331200] ch:2 chl:stereo fmt:s16p r:32000Hz
 -> ch:2 chl:stereo fmt:s16 r:32000Hz
 Output #0, wav, to '.\m_lic_eqg_eg_stomp-ffmpeg.wav':
   Metadata:
     ISFT            : Lavf60.16.100
   Stream #0:0, 0, 1/32000: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 32000
 Hz, stereo, s16, 1024 kb/s
     Metadata:
       encoder         : Lavc60.31.102 pcm_s16le
 size=     243kB time=00:00:02.26 bitrate= 878.0kbits/s speed=N/A
 [in#0/mpc8 @ 00000175db28b180] EOF while reading input
 [in#0/mpc8 @ 00000175db28b180] Terminating demuxer thread
 [aist#0:0/musepack8 @ 00000175db2b6a40] Decoder thread received EOF packet
 [aist#0:0/musepack8 @ 00000175db2b6a40] Decoder returned EOF, finishing
 [aist#0:0/musepack8 @ 00000175db2b6a40] Terminating decoder thread
 [out_0_0 @ 00000175db330c80] EOF on sink link out_0_0:default.
 No more output streams to write to, finishing.
 [out#0/wav @ 00000175db2aca80] All streams finished
 [out#0/wav @ 00000175db2aca80] Terminating muxer thread
 [AVIOContext @ 00000175db3174c0] Statistics: 11884118 bytes written, 4
 seeks, 48 writeouts
 [out#0/wav @ 00000175db2aca80] Output file #0 (.\m_lic_eqg_eg_stomp-
 ffmpeg.wav):
 [out#0/wav @ 00000175db2aca80]   Output stream #0:0 (audio): 2579 frames
 encoded (2971008 samples); 2579 packets muxed (11884032 bytes);
 [out#0/wav @ 00000175db2aca80]   Total: 2579 packets (11884032 bytes)
 muxed
 [out#0/wav @ 00000175db2aca80] video:0kB audio:11606kB subtitle:0kB other
 streams:0kB global headers:0kB muxing overhead: 0.000656%
 size=   11606kB time=00:01:32.80 bitrate=1024.4kbits/s speed=1.25e+03x
 [in#0/mpc8 @ 00000175db28b180] Input file #0 (.\m_lic_eqg_eg_stomp.mpc):
 [in#0/mpc8 @ 00000175db28b180]   Input stream #0:0 (audio): 41 packets
 read (843738 bytes); 2579 frames decoded; 0 decode errors (2971008
 samples);
 [in#0/mpc8 @ 00000175db28b180]   Total: 41 packets (843738 bytes) demuxed
 [AVIOContext @ 00000175db2ace00] Statistics: 909598 bytes read, 4 seeks
 }}}

 Due to the filesize limit, I was only able to attach samples of the
 outputs of both ffmpeg and the musepack decoder, but I was able to upload
 the full original mpc file.

--
-- 
Ticket URL: <https://trac.ffmpeg.org/ticket/11262#comment:1>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker
_______________________________________________
FFmpeg-trac mailing list
FFmpeg-trac@avcodec.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-trac

To unsubscribe, visit link above, or email
ffmpeg-trac-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to