Как передать опцию кодера VP8 программно в программу, основанную на ffmpeg

Я строю программу с использованием библиотек ffmpeg на основе стандартного примера транскодера ffmpeg. Моя цель — создать транскодер видео, который кодирует любое подходящее видео (то есть, которое может прочитать ffmpeg) в формат WEBM. Вопрос в том, как передать параметры кодировщику VP8 для контроля качества выходного видео и других параметров? Я имею в виду передачу этих опций через код C ++.

0

Решение

Используйте следующий код:

AVDictionary *options = NULL;
AVCodec *codec = avcodec_find_encoder(AVCODEC_ID_VP8);
AVCodecContext *ctx = avcodec_alloc_context3(codec);

av_dict_set(&options, "option", "value", 0);

int res = avcodec_open2(ctx, codec, &options);
if (res < 0)
error();

while (..) {
res = avcodec_encode_video2(ctx, ..);
if (res < 0)
error();
}

avcodec_close(ctx);
avcodec_free_context(ctx);

Соответствующие пары «option» / «value» — это то, что вы получите из руководств по кодированию vp8, например, FFmpeg вики. Например, чтобы установить битрейт 1 Мбит / с (первый пример в вики), используйте:

av_dict_set_int(&options, "b", 1024 * 1024, 0);

или же

av_dict_set(&options, "b", "1M", 0);

Я рекомендую использовать VP9 вместо VP8, вы не получите отличного качества с VP8, но это, очевидно, ваш выбор.

1

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

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

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