Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: QImage -> ffmpeg  (Прочитано 818 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Peter_I

  • Автор темы
  • Старожил
  • *
  • Сообщений: 3269
    • Просмотр профиля
QImage -> ffmpeg
« : 20 Октября 2017, 21:27:47 »
Здрваствуйте!

Я пытаюсь сформировать видеопоток из содержимого QImage и передать его ffmpeg. Само по себе это, наконец, удалось,
но не получается формировать поток так, чтобы ffmpeg его правильно обработала. Она создаёт avi-файл, но очень
попорченный. В заголовке потока есть теги YUV4MPEG2 и C444, т.к. каждая точка из QImage преобразуется в YUV или в YCbCr,
а передаётся уже полностью заполненный массив, но, похоже, мне не удаётся указать ffmpeg, что это из jpg444,
в результате mplayer пишет "Could not find matching colorspace" и что он преобразовывает yuv444p -> yuv420p,
картинка совершенно испорченная и почему-то зелёная. Или это mplayer чего-то не понимает?
Я пробовал для ffmpeg задавать ещё некоторые опции, но не помогло.

А как надо преобразовывать набор BMP в такой поток, YUV, чтобы ffmpeg его правильно обработала?
Или есть возможность передавать сразу RGB? У меня не получилось, но я в основном пытался с YUV.
Пётр.

Оффлайн Peter_I

  • Автор темы
  • Старожил
  • *
  • Сообщений: 3269
    • Просмотр профиля
Re: QImage -> ffmpeg
« Ответ #1 : 22 Октября 2017, 09:46:55 »
Как мне кажется, я понял, в чём моя ошибка - я неправильно строил видеопоток.
Для преобразования RGB надо воспользоваться утилитой rgb2ycbcr, она именно кодирует rgb-файл в YUV4MPEG2,
а затем уже его отправлять в поток. Но мне в программе пользовться внешней программой, конечно, неудобно,
желательно бы найти библиотечные функции. Возможно, придётся смотреть исходный код rgb2ycbcr.

Пользователь добавил сообщение 22 Октября 2017, 18:29:11:
Как я понял, сначала надо RGB из QImage преобразовать в формат tiff, утилитой raw2tiff, а уже его конвертировать
в кадр для потокоа утилитой rgb2ycbcr.
Но мне придётся переделывать их из main() в библиотечные функции, или есть вариант попроще?
« Последнее редактирование: 22 Октября 2017, 18:29:11 от Peter_I »
Пётр.

 

Страница сгенерирована за 0.02 секунд. Запросов: 22.