Я пытаюсь кодировать видео с помощью H.264, используя FFmpeg (AV_CODEC_ID_H264
), но я не могу правильно инициализировать кодек. Никаких проблем при использовании другого кодека, например AV_CODEC_ID_MPEG1VIDEO
.
avcodec_register_all();
auto codec = avcodec_find_encoder(AV_CODEC_ID_H264);
if (!codec) { return false; }
auto codec_context = avcodec_alloc_context3(codec);
if (!codec_context) { return false; }
codec_context->codec_id = codec->id;
codec_context->codec_type = AVMEDIA_TYPE_VIDEO;
codec_context->width = w; // w = 1280 on tests
codec_context->height = h; // h = 1024 on tests
codec_context->bit_rate = w * h * 4;
codec_context->time_base = { 1, fps }; // fps = 50 on tests
codec_context->framerate = { fps, 1 };
codec_context->gop_size = 10;
codec_context->pix_fmt = AV_PIX_FMT_YUV420P;
if (codec->id == AV_CODEC_ID_H264) {
av_opt_set(codec_context->priv_data, "preset", "veryfast", 0);
}
if (avcodec_open2(codec_context, codec, nullptr) < 0) { return false; } // < Fails here
Первое сообщение об ошибке, которое я получил:
[h264_amf @ 08e75900] DLL amfrt32.dll не удалосьopen
Насколько мне удалось обнаружить, эта DLL принадлежит к Advanced Media Framework, SDK для доступа к ускорению HW от оборудования AMD. У меня нет карты AMD, поэтому на моем компьютере не установлены ни драйверы, ни SDK. В любом случае, я скачал SDK и скопировал DLL-файлы драйвера в мой каталог binaries. Отсутствующая ошибка DLL была удалена, но, как и ожидалось, модуль был неправильно инициализирован:
[h264_amf @ 0375b600] CreateComponent (AMFVideoEncoderVCE_AVC) завершился ошибкой 13
Вопрос: Я что-то упускаю (параметры, зависимости)? Есть ли способ отключить ускорение AMF или пометить его как необязательный / автоопределение / что угодно?
PS: я ожидаю запустить исполняемый файл кодирования в очень разнородной клиентской базе,предполагается, что Windows 10 и ничего больше, поэтому я не могу пометить как обязательные для конкретного производителя ускорения.
PS: я использую предварительно скомпилированную сборку LGPL FFmpeg 4.2.1 из https://ffmpeg.zeranoe.com/builds/ для Windows 32 бита. Мой код компилируется с использованием Visual Studio 2017.
Если проблема в скомпилированной версии, я рад ее пересозданию. Если да, то какие параметры конфигурации мне следует использовать при сборке x264 или ffmpeg?