FFmpeg sample_fmt на самом деле не меняет битовую глубину + отсутствуют поддерживаемые форматы сэмплов

FFmpeg sample_fmt на самом деле не меняет битовую глубину + отсутствуют поддерживаемые форматы сэмплов

Отказ от ответственности: я новичок во всем этом, этот вопрос может показаться глупым.

Я пытаюсь изменить битовую глубину mp3-файла с 32 до 16, а также изменить битрейт.

Вот моя команда: ffmpeg -i input.mp3 -sample_fmt s16p -vsync 2 -b:a 256k output2.mp3 битрейт успешно меняется, а вот битовая глубина — нет.

Вот результаты.

Входной файл: ffprobe -i input.mp3

Duration: 00:04:40.08, start: 0.025056, bitrate: 323 kb/s
Stream #0:0: Audio: mp3, 44100 Hz, stereo, fltp, 320 kb/s

Выходной файл: ffprobe -i output.mp3

Duration: 00:04:40.08, start: 0.025056, bitrate: 283 kb/s
Stream #0:0: Audio: mp3, 44100 Hz, stereo, fltp, 256 kb/s

Или по-другому вот что мне дает медиакодек VLC: ТекущаяМедиаИнформация

Мы видим fltp, который, как я полагаю, после поиска в Google означает 32 бита

Теперь это использованиес16пно если я попробуюс16Я получаю следующее:

[libmp3lame @ 000001645fdcaec0] Specified sample format s16 is not supported by the libmp3lame encoder
[libmp3lame @ 000001645fdcaec0] Supported sample formats:
[libmp3lame @ 000001645fdcaec0]   s32p
[libmp3lame @ 000001645fdcaec0]   fltp
[libmp3lame @ 000001645fdcaec0]   s16p

Интересно, потому что если я наберу ffmpeg -sample_fmtsэто, то получу следующее:

name   depth
u8        8
s16      16
s32      32
flt      32
dbl      64
u8p       8
s16p     16
s32p     32
fltp     32
dblp     64
s64      64
s64p     64

Что, кажется, означает, что s16 должен работать, нет? Я что-то совсем упускаю? Что происходит?

решение1

Сжатые данные в файле MP3 кодируются, поэтому не имеют собственного формата хранения или битовой глубины. Относится Supported sample formatsк форматам сэмплов, которые кодер принимает для обработки.

Формат образца, показанный для output.mp3, — это то, что выдает декодер. По умолчанию ffmpeg использует декодер mp3float, который выводит образцы с плавающей точкой одинарной точности. Чтобы получить 16-битное целое число, принудительно включите декодер mp3 с фиксированной точкой,

ffmpeg -c:a mp3 -i output.mp3

(ffprobe не поддерживает пользовательскую спецификацию декодера)

Связанный контент