Аудио файл, преобразованный с помощью ffmpeg в 22050 Гц, uint8_t моно PCM слишком велик
621
user768151
Я пытаюсь уменьшить частоту стереофонического звукового файла PCM с частотой 44,1 кГц до 22050 Гц и моно. Однако размер полученного файла слишком велик.
Пример сеанса (сборка ffmpeg и информация о версии вырезаны для удобства чтения).
> ffprobe input.wav -count_frames Input #0, wav, from 'input.wav': Metadata: encoder : Lavf57.56.101 Duration: 00:03:23.18, bitrate: 1411 kb/s Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, 2 channels, s16, 1411 kb/s
Таким образом, количество кадров: 03: 23.18 * 44100 = 8960238
> ffmpeg -i input.wav -ar 22050 -ac 1 -f u8 -acodec pcm_u8 output.u8 Guessed Channel Layout for Input Stream #0.0 : stereo Input #0, wav, from 'input.wav': Metadata: encoder : Lavf57.56.101 Duration: 00:03:23.18, bitrate: 1411 kb/s Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s16, 1411 kb/s File 'output.u8' already exists. Overwrite ? [y/N] y Output #0, u8, to 'output.u8': Metadata: encoder : Lavf57.56.101 Stream #0:0: Audio: pcm_u8, 22050 Hz, mono, u8, 176 kb/s Metadata: encoder : Lavc57.64.101 pcm_u8 Stream mapping: Stream #0:0 -> #0:0 (pcm_s16le (native) -> pcm_u8 (native)) Press [q] to stop, [?] for help size= 4375kB time=00:03:23.18 bitrate= 176.4kbits/s speed= 276x video:0kB audio:4375kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000000%
Теперь количество кадров должно быть наполовину от предыдущего, потому что мы уменьшили частоту дискретизации вдвое, то есть она должна быть 8960238/2 = 4480119. А поскольку формат равен u8, он должен быть точно таким же, как и байты.
> wc -c output.u8 4480160 output.u8
... но это на 41 байт больше, чем должно быть.
`ffmpeg -i input.wav -ar 22050 -ac 1 -f u8 -acodec pcm_u8 output.raw`, похоже, работает; Я, кстати, OP.
Marius Macijauskas 7 лет назад
1
Вы должны связаться со Stack Exchange, чтобы объединить две учетные записи: https://superuser.com/contact - тогда вы также можете ответить на свой вопрос.
slhck 7 лет назад
1
На самом деле, это не сработало. Я только что измерил и на 41 байт больше, чем должно быть. Я думаю, мне придется сделать свое собственное решение с libsndfile.
Marius Macijauskas 7 лет назад
0
Если вы предоставите вывод на консоль, мы сможем устранить неполадки.
Gyan 7 лет назад
0
Почему эти 41 дополнительный байт имеют значение? Чего именно вы пытаетесь достичь? В общих случаях использования 41 байт не имеет значения, поэтому ваш вопрос выглядит как [проблема XY] (https://meta.stackexchange.com/q/66377/267029).
gronostaj 7 лет назад
0
Я зацикливаю звук в моей программе. Эти 41 байт создают шум в соединении петель. Когда я их вручную отрезаю, шум пропадает. Кроме того, команда не делает то, что она должна делать.
Marius Macijauskas 7 лет назад
0
0 ответов на вопрос
Похожие вопросы
-
6
Как я могу удалить шум из аудиозаписи?
-
4
Как я могу конвертировать ISO-образ CD в формат bin / cue на Mac?
-
1
Как построить представление в winamp, где исключен каждый исполнитель, у которого есть только 1 песн...
-
-
6
Автоматическое отключение Windows при выключении
-
2
Стоит ли использовать S / PDIF?
-
8
Программное обеспечение для получения аудио с домашних DVD?
-
5
Звук Dell E6500 отсутствует - почему?
-
5
Есть ли бесплатный плагин "AutoTune" для Audacity?
-
5
Ищите SECURE Audio Player для Windows
-
4
Искажение звука и задержка DPC в Vista при использовании сети после нескольких часов безотказной раб...