ExtractMpegFramesTest возникла проблема с видео, записанным в портретном режиме в Android

1

Я следую за ExtractMpegFramesTest, чтобы извлекать кадры PNG из видео. Это отлично работает с видеороликами, записанными в альбомном режиме, но не работающими с видеороликами, записанными в портретном режиме.

Кто-нибудь знает, как создавать рамки PNG из портретного видео, используя решение, указанное в ссылке выше?

Я тестировал это с видео 720p и 1080p.

Несколько вещей, которые я наблюдал,

MediaExtractor дает ширину и высоту 1280 и 720 из 720p видео независимо от ориентации. это должно быть 1280 x 720 в ландшафте и 720 x 1280 в портрете. simillar case в видеороликах 1080p.

Другое дело, когда я передаю false в методе drawFrame в инвертирующем параметре, кадр PNG хорош, но перевернут.

Edit:

С ExtractMpegFramesTest я получаю этот результат

Пейзажное видео с инвертированным параметром true дает идеальное изображение http://postimg.org/image/qdliypuj5/

портретное видео с инвертированным параметром true дает искаженное изображение http://postimg.org/image/vfb7dwvdx/

портретное видео с инвертированным параметром false дает идеальное перевернутое изображение. (Согласно ответу ответа @Peter Tran, можно зафиксировать, вращая битмап.) http://postimg.org/image/p7km4iimf/

  • 0
    Какой у тебя вопрос снова? stackoverflow.com/help/how-to-ask
  • 0
    @shkschneider вопрос отредактирован.
Показать ещё 2 комментария
Теги:
video
mediacodec
mediaextractor

1 ответ

1
Лучший ответ

В ExtractMpegFramesTest в комментарии для saveFrame, он указывает

       // Making this even more interesting is the upside-down nature of GL, which means
        // our output will look upside-down relative to what appears on screen if the
        // typical GL conventions are used.  (For ExtractMpegFrameTest, we avoid the issue
        // by inverting the frame when we render it.)

Вот почему вы упомянули логический параметр для drawFrame.

Итак, похоже, что вы хотите сделать инвертирование растрового изображения до сохранения в PNG. Это можно сделать, применив матрицу (с preScale) к растровому изображению. Вам нужно будет изменить код в saveFrame после вызова bmp.copyPixelsFromBuffer.

Обратите внимание на этот ответ для зеркального отображения растрового изображения; и используйте preScale(-1,1) для инвертирования изображения на правильной оси.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню