.avimp4v-->.mp4一、編碼MJPG、后綴.aviMJPG是大寫!!!#coding=utf-8from__future__importabsolute_import,division,print_functionimportcv2importwarningsimportnumpyasnp" />

欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Python OpenCV 寫入視頻

系統 2124 0

其實OpenCV已經提供了寫視頻的接口,但是編碼和文件后綴的對應真是讓人頭疼,動不動就不支持。經過嘗試,總結出目前兩種可以正常寫入視頻的對應關系:

  1. MJPG --> .avi
  2. mp4v -->.mp4

一、編碼MJPG、后綴.avi

MJPG是大寫!!!

            
              
                # coding=utf-8
              
              
                from
              
               __future__ 
              
                import
              
               absolute_import
              
                ,
              
               division
              
                ,
              
               print_function

              
                import
              
               cv2

              
                import
              
               warnings

              
                import
              
               numpy 
              
                as
              
               np
warnings
              
                .
              
              simplefilter
              
                (
              
              
                "always"
              
              
                )
              
              
                class
              
              
                VideoWriter
              
              
                :
              
              
                def
              
              
                __init__
              
              
                (
              
              self
              
                ,
              
               name
              
                ,
              
               width
              
                ,
              
               height
              
                ,
              
               fps
              
                =
              
              
                25
              
              
                )
              
              
                :
              
              
                # type: (str, int, int, int) -> None
              
              
                if
              
              
                not
              
               name
              
                .
              
              endswith
              
                (
              
              
                '.avi'
              
              
                )
              
              
                :
              
              
                # 保證文件名的后綴是.avi
              
              
            name 
              
                +=
              
              
                '.avi'
              
              
            warnings
              
                .
              
              warn
              
                (
              
              
                'video name should ends with ".avi"'
              
              
                )
              
              
        self
              
                .
              
              __name 
              
                =
              
               name          
              
                # 文件名
              
              
        self
              
                .
              
              __height 
              
                =
              
               height      
              
                # 高
              
              
        self
              
                .
              
              __width 
              
                =
              
               width        
              
                # 寬
              
              
        fourcc 
              
                =
              
               cv2
              
                .
              
              VideoWriter_fourcc
              
                (
              
              
                *
              
              
                'MJPG'
              
              
                )
              
              
                # 如果是avi視頻,編碼需要為MJPG
              
              
        self
              
                .
              
              __writer 
              
                =
              
               cv2
              
                .
              
              VideoWriter
              
                (
              
              name
              
                ,
              
               fourcc
              
                ,
              
               fps
              
                ,
              
              
                (
              
              width
              
                ,
              
               height
              
                )
              
              
                )
              
              
                def
              
              
                write
              
              
                (
              
              self
              
                ,
              
               frame
              
                )
              
              
                :
              
              
                if
              
               frame
              
                .
              
              dtype 
              
                !=
              
               np
              
                .
              
              uint8
              
                :
              
              
                # 檢查frame的類型
              
              
                raise
              
               ValueError
              
                (
              
              
                'frame.dtype should be np.uint8'
              
              
                )
              
              
                # 檢查frame的大小
              
              
        row
              
                ,
              
               col
              
                ,
              
               _ 
              
                =
              
               frame
              
                .
              
              shape
        
              
                if
              
               row 
              
                !=
              
               self
              
                .
              
              __height 
              
                or
              
               col 
              
                !=
              
               self
              
                .
              
              __width
              
                :
              
              
            warnings
              
                .
              
              warn
              
                (
              
              
                '長和寬不等于創建視頻寫入時的設置,此frame不會被寫入視頻'
              
              
                )
              
              
                return
              
              
        self
              
                .
              
              __writer
              
                .
              
              write
              
                (
              
              frame
              
                )
              
              
                def
              
              
                close
              
              
                (
              
              self
              
                )
              
              
                :
              
              
        self
              
                .
              
              __writer
              
                .
              
              release
              
                (
              
              
                )
              
              
                def
              
              
                main
              
              
                (
              
              
                )
              
              
                :
              
              
    width 
              
                =
              
              
                512
              
              
    height 
              
                =
              
              
                256
              
              
    vw 
              
                =
              
               VideoWriter
              
                (
              
              
                'test.avi'
              
              
                ,
              
               width
              
                ,
              
               height
              
                )
              
              
                for
              
               i 
              
                in
              
              
                range
              
              
                (
              
              
                25
              
              
                *
              
              
                50
              
              
                )
              
              
                :
              
              
                # 隨機生成一幅圖像
              
              
        frame 
              
                =
              
               np
              
                .
              
              random
              
                .
              
              randint
              
                (
              
              
                0
              
              
                ,
              
              
                255
              
              
                ,
              
              
                (
              
              height
              
                ,
              
               width
              
                ,
              
              
                3
              
              
                )
              
              
                ,
              
               dtype
              
                =
              
              np
              
                .
              
              uint8
              
                )
              
              
                # 寫入圖像
              
              
        vw
              
                .
              
              write
              
                (
              
              frame
              
                )
              
              
                # 關閉
              
              
    vw
              
                .
              
              close
              
                (
              
              
                )
              
              
                if
              
               __name__ 
              
                ==
              
              
                '__main__'
              
              
                :
              
              
    main
              
                (
              
              
                )
              
            
          

二、編碼mp4v、后綴.mp4

mp4v是小寫!!!

            
              
                # coding=utf-8
              
              
                from
              
               __future__ 
              
                import
              
               absolute_import
              
                ,
              
               division
              
                ,
              
               print_function

              
                import
              
               cv2

              
                import
              
               warnings

              
                import
              
               numpy 
              
                as
              
               np
warnings
              
                .
              
              simplefilter
              
                (
              
              
                "always"
              
              
                )
              
              
                class
              
              
                VideoWriter
              
              
                :
              
              
                def
              
              
                __init__
              
              
                (
              
              self
              
                ,
              
               name
              
                ,
              
               width
              
                ,
              
               height
              
                ,
              
               fps
              
                =
              
              
                25
              
              
                )
              
              
                :
              
              
                # type: (str, int, int, int) -> None
              
              
                if
              
              
                not
              
               name
              
                .
              
              endswith
              
                (
              
              
                '.mp4'
              
              
                )
              
              
                :
              
              
                # 保證文件名的后綴是.mp4
              
              
            name 
              
                +=
              
              
                '.mp4'
              
              
            warnings
              
                .
              
              warn
              
                (
              
              
                'video name should ends with ".mp4"'
              
              
                )
              
              
        self
              
                .
              
              __name 
              
                =
              
               name          
              
                # 文件名
              
              
        self
              
                .
              
              __height 
              
                =
              
               height      
              
                # 高
              
              
        self
              
                .
              
              __width 
              
                =
              
               width        
              
                # 寬
              
              
        fourcc 
              
                =
              
               cv2
              
                .
              
              VideoWriter_fourcc
              
                (
              
              
                *
              
              
                'mp4v'
              
              
                )
              
              
                # 如果是mp4視頻,編碼需要為mp4v
              
              
        self
              
                .
              
              __writer 
              
                =
              
               cv2
              
                .
              
              VideoWriter
              
                (
              
              name
              
                ,
              
               fourcc
              
                ,
              
               fps
              
                ,
              
              
                (
              
              width
              
                ,
              
               height
              
                )
              
              
                )
              
              
                def
              
              
                write
              
              
                (
              
              self
              
                ,
              
               frame
              
                )
              
              
                :
              
              
                if
              
               frame
              
                .
              
              dtype 
              
                !=
              
               np
              
                .
              
              uint8
              
                :
              
              
                # 檢查frame的類型
              
              
                raise
              
               ValueError
              
                (
              
              
                'frame.dtype should be np.uint8'
              
              
                )
              
              
                # 檢查frame的大小
              
              
        row
              
                ,
              
               col
              
                ,
              
               _ 
              
                =
              
               frame
              
                .
              
              shape
        
              
                if
              
               row 
              
                !=
              
               self
              
                .
              
              __height 
              
                or
              
               col 
              
                !=
              
               self
              
                .
              
              __width
              
                :
              
              
            warnings
              
                .
              
              warn
              
                (
              
              
                '長和寬不等于創建視頻寫入時的設置,此frame不會被寫入視頻'
              
              
                )
              
              
                return
              
              
        self
              
                .
              
              __writer
              
                .
              
              write
              
                (
              
              frame
              
                )
              
              
                def
              
              
                close
              
              
                (
              
              self
              
                )
              
              
                :
              
              
        self
              
                .
              
              __writer
              
                .
              
              release
              
                (
              
              
                )
              
              
                def
              
              
                main
              
              
                (
              
              
                )
              
              
                :
              
              
    width 
              
                =
              
              
                512
              
              
    height 
              
                =
              
              
                256
              
              
    vw 
              
                =
              
               VideoWriter
              
                (
              
              
                'test.mp4'
              
              
                ,
              
               width
              
                ,
              
               height
              
                )
              
              
                for
              
               i 
              
                in
              
              
                range
              
              
                (
              
              
                25
              
              
                *
              
              
                50
              
              
                )
              
              
                :
              
              
                # 隨機生成一幅圖像
              
              
        frame 
              
                =
              
               np
              
                .
              
              random
              
                .
              
              randint
              
                (
              
              
                0
              
              
                ,
              
              
                255
              
              
                ,
              
              
                (
              
              height
              
                ,
              
               width
              
                ,
              
              
                3
              
              
                )
              
              
                ,
              
               dtype
              
                =
              
              np
              
                .
              
              uint8
              
                )
              
              
                # 寫入圖像
              
              
        vw
              
                .
              
              write
              
                (
              
              frame
              
                )
              
              
                # 關閉
              
              
    vw
              
                .
              
              close
              
                (
              
              
                )
              
              
                if
              
               __name__ 
              
                ==
              
              
                '__main__'
              
              
                :
              
              
    main
              
                (
              
              
                )
              
            
          

三、視頻寫入失敗的原因

  1. 不支持對應的編碼和后綴。目前我知道支持的是:
    * mp4v–>.mp4
    * MJPG–>.avi
  2. frame的值類型不是uint8。
  3. frame的高或者寬和新建cv2.VideoWriter設置的高或寬不對應。

更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 成人免费毛片网站 | 欧美成人免费毛片 | 波多野结衣办公室33分jian情 | 三级理论中文字幕在线播放 | 亚洲免费观看视频 | 91短视频版官网 | 美女网站在线观看视频18 | 亚洲精品99 | 天堂色综合 | 日韩一区二区三区在线播放 | 国产人成精品 | 火辣福利在线观看 | 亚洲尻逼视频 | 色中色在线播放 | www.com黄色| 欧美a级成人淫片免费看 | 久久精品免费一区二区三 | 大香萑75久久精品免费 | 亚洲精品无| 99精品热| 黑色丝袜美女被狂躁 | 天天看天天爽天天摸天天添 | 欧美一级美国一级 | 神马久久久久久久久 | 国产一级电影网 | 嗯啊你轻点好深啊hh在线播放 | A片扒开双腿猛进入免费观看 | 一级高清视频www | 日韩第3页 | 婷婷综合激情五月中文字幕 | 久久久99精品久久久 | 国产成+人+亚洲+欧美+日韩 | 青娱乐手机在线 | 亚洲国产精品第一区二区三区 | 亚洲国产片高清在线观看 | 国产品久久| 免费在线国产视频 | 国产精品久久久久免费 | 三级特黄 | 加勒比 テカ痴女の猛烈交尾 | 亚洲 中文 欧美 日韩 在线观看 |