2015-04-24 4 views
1

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

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

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

Пара вещей я наблюдал это,

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

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

Edit:

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

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

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

портретное видео с i Параметр nvert ложь дает совершенный вверх вниз изображение. (По выходной ответ @Peter Тран может быть исправлена ​​путем поворота растрового изображения.) http://postimg.org/image/p7km4iimf/

+0

Каков ваш вопрос снова? http://stackoverflow.com/help/how-to-ask – shkschneider

+0

@shkschneider вопрос отредактирован. – Ankit

+0

Укажите, что означает «не работает». Видео записывается в физическую ориентацию камеры устройства, и игрок может исправить ориентацию. В примере ExtractMpegFramesTest игнорируется подсказка ориентации, поэтому вы увидите ее в исходной физической ориентации. – fadden

ответ

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.

См. Это answer for mirroring a bitmap; и используйте preScale(-1,1) для инвертирования изображения на правильной оси.