• 如果觉得本站的内容有帮助,可以考虑打赏博主哦!

  • 感谢大家访问本站,希望本站的内容可以帮助到大家!

  • 在本站开通年度VIP,无限制下载本站资源和阅读本站文章

  • 问题反馈可发送邮件到stubbornhuang@qq.com

  • 欢迎大家交换友链,可在https://www.stubbornhuang.com/申请友情链接进行友链交换申请!

  • 工资「喂饱肚子」,副业「养活灵魂」!

  • 本站会放置Google广告用于维持域名以及网站服务器费用。

  • 本站由于前段时间遭受到大量临时和国外邮箱注册,所以对可注册的邮箱类型进行了限制!

  • 计算机图形学与计算几何经典必备书单整理,下载链接可参考:https://www.stubbornhuang.com/1256/

C++ – 使用ffmpeg读取视频旋转角度并使用OpenCV根据旋转角度对视频进行旋转复原

C++ 发布于2021-12-07 阅读 5,484次 0次评论 0次点赞 本文共7999个字,阅读需要20分钟。

1 视频中的旋转信息以及为什么会有旋转信息

Android或者ios等手机上录制视频时,由于重力感应或者录制视频的摆放方式的问题会导致录制的视频拥有旋转信息。如果是横屏录制(手机逆时针旋转90度),则录制的视频时不带角度的。如果是竖屏录制(正常的拿手机的姿势),此时的录制的视频的旋转角度是90度。如果再旋转90度,此时一般音量键和关屏键朝下,此时的视频的旋转角度是180。以此类推。所以在手机上的视频一般会有4种角度的视频,播放时,要对视频资源进行旋转后再进行播放,不然视频就会出现各种反转、倾倒。

https://www.stubbornhuang.com/1855/ 已经分享了在python中如何读取视频旋转角度并根据视频旋转角度旋转视频帧的代码,有兴趣的可以查看。

我们可以使用ffmpge下的工具ffprobe查看视频的元数据信息:

1.1 不带旋转信息也就是旋转角度为0的视频元数据信息

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'a.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2021-07-17T14:12:45.000000Z
    location        : +28.7793+113.2697/
    location-eng    : +28.7793+113.2697/
    com.android.version: 8.1.0
  Duration: 00:00:06.13, start: 0.000000, bitrate: 18162 kb/s
    Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc, smpte170m), 1920x1080, 17008 kb/s, SAR 1:1 DAR 16:9, 29.86 fps, 30 tbr, 90k tbn, 180k tbc (default)
    Metadata:
      creation_time   : 2021-07-17T14:12:45.000000Z
      handler_name    : VideoHandle
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, mono, fltp, 96 kb/s (default)
    Metadata:
      creation_time   : 2021-07-17T14:12:45.000000Z
      handler_name    : SoundHandle

1.2 旋转90度的视频元数据信息

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'b.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2021-08-20T05:32:36.000000Z
    location        : +00.0000+000.0000/
    location-eng    : +00.0000+000.0000/
    com.android.version: 10
  Duration: 00:00:03.89, start: 0.000000, bitrate: 8777 kb/s
    Stream #0:0(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 127 kb/s (default)
    Metadata:
      creation_time   : 2021-08-20T05:32:36.000000Z
      handler_name    : SoundHandle
    Stream #0:1(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, unknown/bt470bg/unknown), 720x1280, 8724 kb/s, SAR 1:1 DAR 9:16, 30.09 fps, 30 tbr, 90k tbn, 180k tbc (default)
    Metadata:
      rotate          : 90
      creation_time   : 2021-08-20T05:32:36.000000Z
      handler_name    : VideoHandle
    Side data:
      displaymatrix: rotation of -90.00 degrees

1.3 旋转180度的视频元数据信息

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'c.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2021-07-18T01:43:43.000000Z
    com.android.version: 10
  Duration: 00:00:04.98, start: 0.000000, bitrate: 4997 kb/s
    Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080, 3502 kb/s, SAR 1:1 DAR 16:9, 29.12 fps, 29.50 tbr, 90k tbn, 180k tbc (default)
    Metadata:
      rotate          : 180
      creation_time   : 2021-07-18T01:43:43.000000Z
      handler_name    : VideoHandle
    Side data:
      displaymatrix: rotation of -180.00 degrees
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 193 kb/s (default)
    Metadata:
      creation_time   : 2021-07-18T01:43:43.000000Z
      handler_name    : SoundHandle

1.4 旋转270度的视频元数据信息

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'd.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2021-10-29T01:52:22.000000Z
    location        : +28.2386+113.0239/
    location-eng    : +28.2386+113.0239/
    com.android.version: 11
  Duration: 00:00:06.15, start: 0.000000, bitrate: 19144 kb/s
    Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1080x1920, 18490 kb/s, SAR 1:1 DAR 9:16, 30.08 fps, 90k tbr, 90k tbn, 180k tbc (default)
    Metadata:
      rotate          : 270
      creation_time   : 2021-10-29T01:52:22.000000Z
      handler_name    : VideoHandle
    Side data:
      displaymatrix: rotation of 90.00 degrees
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      creation_time   : 2021-10-29T01:52:22.000000Z
      handler_name    : SoundHandle

从上面各种视频的元数据信息中我们可以看到,如果该视频拥有旋转信息,那么在该视频的视频流的元数据信息的rotate字段会存储旋转角度,例如:

    Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1080x1920, 18490 kb/s, SAR 1:1 DAR 9:16, 30.08 fps, 90k tbr, 90k tbn, 180k tbc (default)
    Metadata:
      rotate          : 270
      creation_time   : 2021-10-29T01:52:22.000000Z
      handler_name    : VideoHandle

2 使用ffmpeg C++ sdk获取视频的视频流旋转信息

之前查看的视频旋转角度是使用ffprobe的这个工具,但是如何在代码中使用ffmpeg sdk获取视频角度信息呢?

通过上述发现,视频的旋转角度存储在视频流的元数据中,所以我们首先可以打开视频文件,然后找到视频中的视频流,最后获取视频流的元数据信息并得到旋转角度,具体的代码如下:

此文章剩余51%被隐藏需要付费查看,内容查看价格1小饼子立即购买,VIP免费
支付前请仔细阅读以下说明,如支付代表您了解并同意了以下说明:
(1)资源收集自互联网,仅供自我学习,请在下载后24小时内删除该资源,如下载者将此资源用于其他非法用途,本站不承担任何法律责任;如有侵权,请立即联系我,马上删除!
(2)下载单个资源则点击立即下载或者立即购买按钮;本站VIP可下载本站所有资源。
(3)请不要使用手机以及电脑浏览器的无痕模式进行支付操作,以免造成支付成功但未显示下载链接。
(4)如遇支付问题或者资源失效问题请点击按钮点击反馈进行反馈或者发送说明邮件到stubbornhuang@qq.com

欢迎扫码关注我的微信公众号,及时获取文章更新

微信公众号二维码

本文作者:StubbornHuang

版权声明:本文为站长原创文章,如果转载请注明原文链接!

原文标题:C++ – 使用ffmpeg读取视频旋转角度并使用OpenCV根据旋转角度对视频进行旋转复原

原文链接:https://www.stubbornhuang.com/1856/

发布于:2021年12月07日 10:25:31

修改于:2023年06月26日 20:59:05

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

文章末尾
上一篇
Python - 使用scikit-video库获取视频的旋转角度并使用opencv_python根据旋转角度对视频进行旋转复原
Python
下一篇
C++ - 将Unicode std::wstring字符串转换为Unicode std::string转义字符,类似于\uxxxx的形式
C++
当前分类随机文章推荐

发表评论

您必须 [ 登录 ] 才能发表留言!

关注我们的公众号

微信公众号