Отказ от ответственности: я новичок во всем этом, этот вопрос может показаться глупым.
Я пытаюсь изменить битовую глубину 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 не поддерживает пользовательскую спецификацию декодера)