Я следую за 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/
В 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)
для инвертирования изображения на правильной оси.