We save a video on a mobile client and send it to a server. On the server, I use the following code to save the frames:>
import skvideo.io
import cv2
haar =
there was a glitch in skvideo, it was not reading the available metadata. For videos taken in mobile are rotated, but metadata includes such parameter. The skvideo team committed a fix, and current skvideo version 1.1.7 reads metadata from mobile, that indicates that video should be rorated. skvideo.io.vread then rotates the file:
1) use newer skvideo version, 1.1.7 which can be cloned at https://github.com/scikit-video/scikit-video
2) You can use following code to read all frames in the video, most likely metadata will be read
import skvideo.io
videogen = skvideo.io.vread(f.name)
That will rotate the video automatically if it was taken in portrait mode.
3) Created an issue on skvideo repo, take a look for further reference: https://github.com/scikit-video/scikit-video/issues/40
It looks like OpenCV
does not record the rotation metadata of the video file with VideoCapture() as you can see by the propId
s that it stores.
I'm not sure if scikit-video
does. It looks like they have a metadata puller called ffprobe which might be able to pull the rotation. See here for an example of how to call and see the output. This shows a hefty list of metadata---no rotation---but that might just be because it's not set or of a movie type which doesn't have rotation metadata.
Another way to grab it would be to read the metadata directly from ffmpeg
. I found an old StackOverflow answer that wrote a little python
code to extract specifically the rotation metadata from a video using ffmpeg
.