[FFmpeg-trac] #7056(undetermined:new): Make ffmpeg to automatically convert audio sample format to floating point before apllying filters

FFmpeg trac at avcodec.org
Sun Mar 4 16:39:52 EET 2018


#7056: Make ffmpeg to automatically convert audio sample format to floating point
before apllying filters
-------------------------------------+-------------------------------------
             Reporter:  Rollinnn     |                     Type:
               Status:  new          |  enhancement
            Component:               |                 Priority:  normal
  undetermined                       |                  Version:  git-
             Keywords:               |  master
             Blocking:               |               Blocked By:
Analyzed by developer:  0            |  Reproduced by developer:  0
-------------------------------------+-------------------------------------
 Summary of the bug:
 It seems that currently, if source file has sample format 16 or 24 bit
 fixed point, then ffmpeg process it also in fixed point format. With some
 processing this can result in audible clipping, even if "alimiter" filter
 is used in the end of filter chain. So it is needed to manually change
 sample format with "aformat=sample_fmts=flt" in the beginning if filters
 chain to be able to prevent clipping.

 == Suggestion is to convert sample format to floating point automatically
 before applying filters. ==


 Example. If attached flac file is processed with command
 {{{
 ffmpeg -i input.flac -af
 "pan=stereo|FL=0.707*FC+FL+0.707*BL+0.707*SL+0.5*BC|FR=0.707*FC+FR+0.707*BR+0.707*SR+0.5*BC,
 alimiter=attack=0.1" output.flac
 }}}
 then resulted file contains obvious and audible clipping regardless
 alimiter was used

 But if "aformat=sample_fmts=flt" is added to beginning of filter chain, so
 command is
 {{{
 ffmpeg -i input.flac -af "aformat=sample_fmts=flt,
 pan=stereo|FL=0.707*FC+FL+0.707*BL+0.707*SL+0.5*BC|FR=0.707*FC+FR+0.707*BR+0.707*SR+0.5*BC,
 alimiter=attack=0.1" output.flac
 }}}
 there is no clipping in resulted file, because alimiter succesfully
 supress it.
 Yes, i know that i can simlpy use -ac 2 for downmixing.
 ffmpeg is static build from Zeranoe.

 How to reproduce:
 Once again
 This command results in file with no clipping
 {{{
 ffmpeg -i C:\000\sample_8channels_16bit.flac -af "aformat=sample_fmts=flt,
 pan=stereo|FL=0.707*FC+FL+0.707*BL+0.707*SL+0.5*BC|FR=0.707*FC+FR+0.707*BR+0.707*SR+0.5*BC,
 alimiter=attack=0.1" C:\000\downmixed.flac
 ffmpeg version N-90173-gfa0c9d69d3 Copyright (c) 2000-2018 the FFmpeg
 developers
   built with gcc 7.3.0 (GCC)
   configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-
 bzlib --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass
 --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-
 libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg
 --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr
 --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack
 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2
 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-
 libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa
 --enable-libspeex --enable-libxvid --enable-libmfx --enable-amf --enable-
 cuda --enable-cuvid --enable-d3d11va --enable-nvenc --enable-dxva2
 --enable-avisynth
   libavutil      56.  7.101 / 56.  7.101
   libavcodec     58. 13.100 / 58. 13.100
   libavformat    58. 10.100 / 58. 10.100
   libavdevice    58.  2.100 / 58.  2.100
   libavfilter     7. 12.100 /  7. 12.100
   libswscale      5.  0.101 /  5.  0.101
   libswresample   3.  0.101 /  3.  0.101
   libpostproc    55.  0.100 / 55.  0.100
 Input #0, flac, from 'C:\000\sample_8channels_16bit.flac':
   Duration: 00:00:11.04, start: 0.000000, bitrate: 2828 kb/s
     Stream #0:0: Audio: flac, 48000 Hz, 7.1, s16
 Stream mapping:
   Stream #0:0 -> #0:0 (flac (native) -> flac (native))
 Press [q] to stop, [?] for help
 [flac @ 006dacc0] encoding as 24 bits-per-sample
 Output #0, flac, to 'C:\000\downmixed.flac':
   Metadata:
     encoder         : Lavf58.10.100
     Stream #0:0: Audio: flac, 48000 Hz, stereo, s32 (24 bit), 128 kb/s
     Metadata:
       encoder         : Lavc58.13.100 flac
 size=    2315kB time=00:00:11.04 bitrate=1717.9kbits/s speed=100x
 video:0kB audio:2307kB subtitle:0kB other streams:0kB global headers:0kB
 muxing overhead: 0.350835%
 }}}

 And this command results in file with audible clipping:

 {{{
 C:\Users\Андрей>ffmpeg -i C:\000\sample_8channels_16bit.flac -af
 "pan=stereo|FL=0.707*FC+FL+0.707*BL+0.707*SL+0.5*BC|FR=0.707*FC+FR+0.707*BR+0.707*SR+0.5*BC,
 alimiter=attack=0.1" C:\000\downmixed.flac
 ffmpeg version N-90173-gfa0c9d69d3 Copyright (c) 2000-2018 the FFmpeg
 developers
   built with gcc 7.3.0 (GCC)
   configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-
 bzlib --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass
 --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-
 libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg
 --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr
 --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack
 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2
 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-
 libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa
 --enable-libspeex --enable-libxvid --enable-libmfx --enable-amf --enable-
 cuda --enable-cuvid --enable-d3d11va --enable-nvenc --enable-dxva2
 --enable-avisynth
   libavutil      56.  7.101 / 56.  7.101
   libavcodec     58. 13.100 / 58. 13.100
   libavformat    58. 10.100 / 58. 10.100
   libavdevice    58.  2.100 / 58.  2.100
   libavfilter     7. 12.100 /  7. 12.100
   libswscale      5.  0.101 /  5.  0.101
   libswresample   3.  0.101 /  3.  0.101
   libpostproc    55.  0.100 / 55.  0.100
 Input #0, flac, from 'C:\000\sample_8channels_16bit.flac':
   Duration: 00:00:11.04, start: 0.000000, bitrate: 2828 kb/s
     Stream #0:0: Audio: flac, 48000 Hz, 7.1, s16
 Stream mapping:
   Stream #0:0 -> #0:0 (flac (native) -> flac (native))
 Press [q] to stop, [?] for help
 [flac @ 0487acc0] encoding as 24 bits-per-sample
 Output #0, flac, to 'C:\000\downmixed.flac':
   Metadata:
     encoder         : Lavf58.10.100
     Stream #0:0: Audio: flac, 48000 Hz, stereo, s32 (24 bit), 128 kb/s
     Metadata:
       encoder         : Lavc58.13.100 flac
 size=    1286kB time=00:00:11.04 bitrate= 954.5kbits/s speed=  69x
 video:0kB audio:1278kB subtitle:0kB other streams:0kB global headers:0kB
 muxing overhead: 0.633161%
 }}}

--
Ticket URL: <https://trac.ffmpeg.org/ticket/7056>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list