Перевод командной строки ffmpeg в настройки кодека C ++

Я некоторое время работал над ffmpeg в C ++.
Большая часть справки, касающейся настроек кодера, объясняется как параметры командной строки.
Например (взято с сайта ffmpeg):

-mbd rd -trellis 2 -cmp 2 -subcmp 2 -g 100 -pass 1/2’

но будьте осторожны, ‘-g 100’ может вызвать проблемы с некоторыми декодерами. Вещи, чтобы попробовать:

 ’-bf 2’, ’-flags qprd’, ’-flags mv0’, ’- flags skiprd.

Это не очень полезно, если вы хотите установить эти параметры в C.
Например мне удалось найти Int Trellis; в AVCodecContext структура так, что один решен, но как насчет других?

Есть ли способ определить, какие параметры командной строки соответствуют каким членам AVCodecContext?
Я попытался установить их так:

AVCodecContext* c;
av_opt_set_int(c->priv_data, "cmp", 2, 0);

Но это возвращает код ошибки, что опция не существует.
Я также попробовал:

  av_opt_set(c->priv_data, "cmp", "2", 0);

Я все еще получаю ошибку, что опция не существует.

Итак, есть ли способ определить, какие члены AVCodecContext я должен установить, которые эквивалентны параметрам командной строки ffmpeg выше?

1

Решение

Вы делаете это неправильно ™

av_opt_set (и друзья) взять объект типа AVClass (доказательство). Не трогай priv_data,

Вы должны заметить, что AVCodecContext является AVClass потому что это первый член AVClass (что более или менее так, как «наследование» (злоупотреблять термином) работает в C).

Короче говоря, то, что вы должны делать, это:

AVCodecContext* c;
av_opt_set_int(c, "cmp", 2, 0);

Если вы хотите узнать, какие опции может выбрать конкретный класс, просто посмотрите на источник. Например, кодировщик libopenjpeg принимает много вариантов. Другие классы в avcodec / avformat определяют параметры, которые они принимают, очень похожим образом. Эти опции отбрасываются, когда вы делаете длинную помощь ffmpeg, но иногда обращение к источнику может пролить некоторый свет на вещи.

Кроме того, для дальнейшего использования и для помощи вам, возможно, вы захотите прочитай это как установить параметры, которые не принимают параметры.

2

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector