Я использую libavformat в своей библиотеке, чтобы прочитать поток необработанных изображений i420 и преобразовать их в видео mp4. Я нашел команды CLI, которые выполняют это, но так как я использую библиотеку в своей программе, мне нужно восстановить то же самое.
В настоящее время код, имеющий проблему, выглядит следующим образом:
const auto raw_format = av_find_input_format("rawvideo");
if (raw_format == nullptr) {
log->error("Could not find RAW input parser in FFmpeg");
throw std::runtime_error("RAW not found");
}
_format_context->pb = _io_context.get();
AVDictionary *input_options = nullptr;
av_dict_set(&input_options, "framerate", std::to_string(fps).c_str(), 0);
av_dict_set(&input_options, "pix_fmt", "yuv420p", 0);
av_dict_set(&input_options, "s:v", fmt::format("{}x{}", width, height).c_str(), 0);
av_dict_set(&input_options, "size", fmt::format("{}x{}", width, height).c_str(), 0);
auto formatPtr = _format_context.get();
auto res = avformat_open_input(&formatPtr, "(memory file)", raw_format, &input_options);
Найти rawvideo
не проблема, но он не работает в avformat_open_input
с ошибкой: [2019-11-03 15:03:22.953] [11599:11663] [ffmpeg] [error] Picture size 0x0 is invalid
Я предположил, что размеры можно вставить с помощью параметров ввода, поскольку вверсия CLI передается с использованием -s:v 1920x1080
, однако это не так.
Где мне указать размеры моего необработанного входного потока?