opencv: высота и ширина видео одинаковы для вертикального и горизонтального - PullRequest
0 голосов
/ 01 сентября 2018

У меня есть куча видео с iPhone, и я пытаюсь получить их ширину и высоту программно с помощью opencv. Вот мой код:

import os, glob
import cv2
ff = glob.glob("*.m??") + glob.glob("*.M??")
for f in ff:
    cap = cv2.VideoCapture(f)
    w, h = (int(cap.get(i)) for i in (3, 4))
    cap.release()
    print("%s: %dx%d" % (f, w, h))

Проблема в том, что результат всегда один и тот же: 1920x1080, - независимо от того, является ли фильм горизонтальным (1920 * 1080) или вертикальным (я бы ожидал 1080 * 1920).

Есть идеи как это исправить? Может быть, где-то есть флаг, который говорит, что это Гориз или Верт? Я ничего не нашел здесь в документах opencv ... Спасибо!

1 Ответ

0 голосов
/ 06 сентября 2018

Видимо, все, что мне нужно было сделать, это установить последнюю версию ffmpeg (что потребовало некоторых усилий :).

ffmpeg -i <flnm>

выводит, помимо прочего, строку с «поворотом», например:

Metadata:
  rotate          : 90
  creation_time   : 2015-12-09T00:28:42.000000Z
  handler_name    : Core Media Data Handler
  encoder         : H.264

Я обнаружил четыре случая: значения 90, 180, 270 для поворота или строка с «поворотом» отсутствует (== нет поворота). Моим потребностям 90 и 270 соответствуют "вертикали" (.a.k.a. "Портрет"), поэтому моя проблема решена.

Разбор тривиален, я не думаю, что кто-то хочет, чтобы мой код здесь. Небольшое замечание: вам нужно ловить stderr, а не stdout из ffmeg.

Спасибо всем!

...