Opened 8 years ago
Closed 8 years ago
#7057 closed defect (duplicate)
Make ffmpeg to automatically convert audio sample format to floating point before apllying filters
| Reported by: | Rollinnn | Owned by: | |
|---|---|---|---|
| Priority: | normal | Component: | undetermined |
| Version: | unspecified | Keywords: | |
| Cc: | Blocked By: | ||
| Blocking: | Reproduced by developer: | no | |
| Analyzed by developer: | no |
Description
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 simlply 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%
Attachments (1)
Change History (2)
by , 8 years ago
| Attachment: | sample_8channels_16bit.flac added |
|---|
comment:1 by , 8 years ago
| Resolution: | → duplicate |
|---|---|
| Status: | new → closed |
| Type: | enhancement → defect |
| Version: | git-master → unspecified |


