【问题标题】:opencv: video height and width are reported same for vertical and horizontalopencv:垂直和水平的视频高度和宽度报告相同
【发布时间】:2018-09-01 16:16:53
【问题描述】:

我有一堆来自 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)。

任何想法如何解决这个问题?也许某处有一个标志可以告诉它是Horiz还是Vert?我在这里没有找到任何东西 at opencv docs... 谢谢!

【问题讨论】:

  • 相机始终以水平模式录制,您必须读取设备/视频的“旋转信息”并手动旋转视频。也许 OpenCV 没有读取旋转信息的选项。
  • 谢谢你,Micka,但正如我所写,我正在寻找的正是那个——某种标志……这里似乎没有什么与我相关:docs.opencv.org/3.3.1/d4/d15/…
  • 哦,我忘了说我正在处理 *.MOV 视频。
  • 我认为用opencv获取方向是不可能的——你可以使用ffmpeg来获取方向数据(见how-to-extract-orientation-information-from-videos
  • 德米特里 Z:哈! :) 它被称为 KLUDGE,但绝对适合我,谢谢!!!

标签: opencv video dimensions


【解决方案1】:

显然,我需要做的就是安装最新的 ffmpeg(这需要一些努力:)。

ffmpeg -i <flnm>

输出其中包含“rotate”的一行,如下所示:

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.“肖像”),所以我的问题解决了。

解析是微不足道的,我认为没有人想要我的代码。只是一个小提示:您需要从 ffmeg 捕获 stderr 而不是 stdout。

谢谢大家!

【讨论】:

    猜你喜欢
    • 2014-08-12
    • 1970-01-01
    • 2015-06-21
    • 2012-01-09
    • 2011-05-16
    • 2018-02-28
    • 1970-01-01
    • 2023-03-14
    • 2017-06-07
    相关资源
    最近更新 更多