FFmpeg параметр размера необработанного видео - PullRequest
0 голосов
/ 03 ноября 2019

Я использую 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, однако это не так.

Где мне указать размеры моего необработанного входного потока?

1 Ответ

1 голос
/ 03 ноября 2019

Конкретные опции для демультиплексора rawvideo: pixel_format и video_size. CLI FFmpeg имеет общие параметры ввода -size и -pix_fmt в качестве прокладок.

Выполните ffmpeg -h demuxer=rawvideo, чтобы получить список этих параметров.

Через C API, см. av_opt_show2().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...