Пример кодирования аудио libav из необработанного pcm в OGG Vorbis

В настоящее время я работаю над инструментом, позволяющим конвертировать игровые медиа-ресурсы нескольких проприетарных форматов и преобразовывать их в более открытые форматы. Я пытаюсь использовать библиотеку libav http://libav.org/ декодировать из формата WAV, mp3, ect в формат pcm std::vector<char> (сделал это успешно) и затем закодируйте это в ogg vorbis. Я пытаюсь использовать api-example.c в документации. https://github.com/FFmpeg/FFmpeg/blob/master/doc/examples/decoding_encoding.c но у меня был небольшой прогресс, так как я застрял в том, где заканчивается генерация тона и начинается кодирование AVPacket.

Может ли кто-нибудь указать мне рабочий пример кодирования звука из необработанного файла PCM (или std::vector) что записывает в файл (желательно ogg vorbis)?

1

Решение

Несколько вещей, которые вы должны иметь в виду при кодировании аудио с использованием libav:

  1. Каков пример формата pcm декодированного кадра (например, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_FLTP и т. Д.)

  2. Сколько отсчетов на канал имеется в декодированном кадре.

  3. Каждый аудиокодер использует только определенный тип формата семпла, поэтому, если формат семпла pcm не совпадает с форматом семпла кодера, чем вы должны выполнить преобразование формата семпла.

  4. Каждый аудио кодер занимает определенное нет. выборок на канал в кадре.

    например MP3 берет 1152 семпла на канал, aac-main / lc отбирает 1024 семпла на канал, а 2048 семплов на канал. поэтому вы должны сделать некоторую буферизацию, чтобы обеспечить ожидаемое нет. образцов в кодировщик.

Для того, чтобы сделать пример преобразования формата, я бы предложил вам использовать
API-интерфейс swr_convert, который находится внутри libswresample.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]