При конвертации аудио с помощью FFmpeg, есть опции -ar и -ac , которые управляют частотой дискретизации и количеством каналов соответственно. Он также предлагает опцию -ab , которая контролирует битрейт, но не позволяет контролировать битрейт.

Поскольку…

[битрейт] = [количество каналов] * [частота дискретизации] * [битовая глубина]

… Значит ли это, что ffmpeg вычисляет bitdepth из трех других параметров?

Другое сообщение говорит, что bitdepth управляется в опции формата. Это смутило меня, потому что приведенное выше уравнение может больше не выполняться, если пользователь устанавливает все 4 параметра.

Кто-нибудь может объяснить, как работает bitdepth и bitrate в FFmpeg?

1 ответ1

1

Что касается возможностей установки битовой глубины: это зависит от ваших исходных файлов и вашего выходного формата.

Например, возьмите pcm_s16le и pcm_s24le - оба будут отображать файлы PCM, но с глубиной 16 бит / 24 бита соответственно. (Вы можете найти эту информацию с помощью ffmpeg -h encoder=<YOUR_ENCODER> .)

Если у вас есть формат, который может принимать несколько битов (например, libmp3lame), FFmpeg по умолчанию определит используемое значение, посмотрев на исходный файл: так что если вы берете -c:a libmp3lame и ваш входной файл имеет бит- глубина 16 бит, тогда FFmpeg будет использовать 16 бит. Если у вас есть 32-битный файл и вы хотите закодировать его в кодек, который может содержать только 16 бит, то FFmpeg сэмплирует его для вас.

Но вы также можете указать это самостоятельно, используя -sample_fmt.


Что касается вашей формулы битрейта: FFmpeg, как и практически все другие инструменты, видит количество аудиоканалов, битовую глубину и частоту дискретизации как фиксированные значения (то есть, они не изменятся внутри файла), а битрейт переменная, которая соотносится с качеством кодирования. Это, однако, верно только для кодеков с потерями; поэтому повторное кодирование WAV-файла 200 раз не будет иметь значения, в то время как повторное кодирование тех же файлов 20 раз с довольно приличным MP3-кодером уже может привести к невыносимым результатам.

Кодеки с потерями повышают качество в вашем уравнении: например, в MP3, значение 320k будет очень хорошим качеством, так как кодировщику не нужно будет сбрасывать много информации, чтобы оставаться в пределах указанных значений. Если бы вы использовали -b:a 64k , кодировщику пришлось бы отбросить много информации для достижения указанной скорости передачи. Кодеры будут уменьшаться настолько низко, насколько это необходимо для достижения скорости передачи в битах: очень тривиально и, следовательно, только теоретические примеры информации, которую можно отбросить:

  • Если объединение всех частот от 8 до 16 кГц в одну полукомплексную синусоидальную волну приведет к тому, что кодер достигнет скорости передачи в битах, он сделает это.
  • Если удалить каждый сигнал ниже -32dB, то получится.

Для некоторого реального объяснения того, какая информация будет отброшена, я предлагаю вам начать с чтения статьи Википедии о сжатии аудио-данных.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .